У меня есть эта система уравнений:
def Diffeq(v,t, lam, gam,a):
c=[i for i in range(0,len(v))]
vdot = np.empty_like(v)
for i in range(0,len(v)):
if i == 0:
vdot[0] = gam*c[1]*v[1]
elif i == (len(v)-1):
vdot[i] = lam*a[i-1]*v[i-1] - (lam*a[i]+gam*c[i])*v[i]
else:
vdot[i]= lam*a[i-1]*v[i-1] - (lam*a[i]+gam*c[i])*v[i]+
gam*c[i+1]*v[i+1]
return vdot
, где лямбда, гамма и a - это следующий набор параметров (N = 1000):
a = [6*i*(N-i)/(N-1.0) for i in range (0,N+1)]
gamma = 1
lam = 2
, если я позвоню:
t = np.linspace(0,3,100)
incond=np.array([0.0]*(N+1) #from 0 to 1000 included
incond[i0] =1.0
y = odeint(Diffeq, incond, t, args=(lam,gamma,a))
, и я пытаюсь построить ожидаемое значение моего y:
finalv = np.array([0.0]*100)
for time in range(0,100):
for k in range(0,N+1):
finalv[time] = finalv[time] + (k)*y[time][k]
Я могу построить результаты, и у меня есть хорошая, ожидаемая кривая: ![enter image description here](https://i.stack.imgur.com/bHDGW.png)
Если я захочу изменить свой интервал t на
t = linspace(0,50,100)
, а затем попробую построить график, форма кривой изменится!![enter image description here](https://i.stack.imgur.com/kDkHD.png)
Иногда, если я немного играю со значениями a, я получаю это предупреждение во время выполнения:
/home/myub/Desktop/Odeintegration.py:79: RuntimeWarning: overflow
encountered in double_scalars