Неправильно определяется 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 шт):

Автор решения: passant

Отвечая на уточнение из комментария "так как элемент с нулевым индексом наименьшим вроде кака быть не может"

Он будет ровно таким, как вы его создали. Вот график ваших значений из S. Как видно именно нулевое значение у вас наименьшее.

Теперь осталось приложить ожидаемый вами график и найти, где и почему вы от него отклонились.

введите сюда описание изображения

→ Ссылка