Неправильно определяется np.argmin
Программа должна считать значение х2 с задержкой и строить фазовый портрет х2(т+тау) от х1(т). В результате чего, повышая с0(до 0.28 все строится, но далее при увеличении ломается) мы должны получить прямую наклонную линию. Но возникает проблема, в которой np.argmin равен 0. С чем это связано? Пробовал менять значения, срезать больше/меньше значений х, менял тау, но все равно выходит не то что надо. Если кто-то знает, подскажите пожалуйста.
import numpy as np
import scipy.integrate as integrate
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
с0 = 0.29
c1 = 2.78
c11 = 2.89
c3 = 3
m0 = 1
m1 = 2
m=m0/m1
dt=0.01
def f(x1):
f = ((-m)*x1)+(1/2)*((m0+m1)/m1)*(abs(x1+1.0)-abs(x1-1.0))
return f
def dH_dt(H, t=0):
return np.array([(-c1/c3)*(f(H[1]-H[0])),
(-1/c3)*(f(H[1]-H[0])+H[2]),
c3*H[1],
(-c11/c3)*(f(H[4]-H[3])),
(-1/c3)*(f(H[4]-H[3])+H[5])+(с0/c3)*(H[1]-H[4]),
c3*H[4]])
t = np.arange(0,1000, 0.01)
H0 = [0.001, 0.001, 0.001, 0.002, 0.002, 0.002]
H, infodict = integrate.odeint(dH_dt, H0, t, full_output=True)
x1=H[10000:,0]
x2=H[10000:,3]
def simFn(x1,x2, skew):
if skew == 0:
diff_skew = x1 - x2
else:
diff_skew = x1[skew:] - x2[:-skew]
diff_skew_avg = np.average(diff_skew*diff_skew)
x1_sq_avg = np.average(x1*x1)
x2_sq_avg = np.average(x2*x2)
factor = np.sqrt(x1_sq_avg*x2_sq_avg)
return diff_skew_avg/factor
tau = np.arange(0,30,dt)
S = np.array([ simFn(x2, x1, int(_tau/dt)) for _tau in tau ])
min_idx = np.argmin(S[:10000])
tau[min_idx], np.min(S[:1000])
print(tau[min_idx])
print(np.min(S[:40000]))
one_second = int(1.0/dt)
plt.plot(x1[:-min_idx], x2[min_idx:])
#plt.plot(x1,x2)
ax = plt.gca()
ax.set_aspect(1.0)
ax.set_xlabel('$x_1(t + \Delta t)$')
ax.set_ylabel('$x_2(t)$')
plt.show()
Ответы (1 шт):
Отвечая на уточнение из комментария "так как элемент с нулевым индексом наименьшим вроде кака быть не может"
Он будет ровно таким, как вы его создали. Вот график ваших значений из S. Как видно именно нулевое значение у вас наименьшее.
Теперь осталось приложить ожидаемый вами график и найти, где и почему вы от него отклонились.
