Я хочу построить функцию, которая изменяется при изменении обыкновенного дифференциального уравнения, и остается решением.
Я пробовал следующий код, чтобы функция F изменялась случайным образом, а когда она меняется, кривые адаптируютсяСамо собой, чтобы остаться решением нового дифференциального уравнения, используя его начальные условия, взятые из последнего решения.
import numpy
from scipy.integrate import odeint
import matplotlib.pyplot as plt
import random as rd
def F(Y,t):
Y0,Y1,Y2,Y3=Y
return numpy.array([f(Y0,Y1,Y2,Y3,r0),g(Y0,Y1,Y2,Y3,r1),u(Y0,Y1,Y2,Y3,r2),v((Y0,Y1,Y2,Y3,r3))]
N=50
for i in range(N):
r0=rd.random()
r1=rd.random()
r2=rd.random()
r3=rd.random()
T=np.linspace(i,i+1,500)
if i==0:
s=odeint(F,np.array([1,1,0,0]),T)
y0,y1,y2,y3=s[:,0],s[:,1],s[:,2],s[:,3]
plt.plot(y0,y1)
else:
i0,i1,i2,i3=y0[499],y1[499],y2[499],y3[499]
s=odeint(F,np.array([i0,i1,i2,i3]),T)
y0,y1,y2,y3=s[:,0],s[:,1],s[:,2],s[:,3]
plt.plot(y0,y1)
plt.show()
Программа работает, но она дает мне только то же решение, в то время как оно должно измениться.Это дает мне точную цифру, когда я выполняю сценарийБолее того, я не получаю решение, которое является «физически» правильным, но это не проблема, я хочу сначала получить другую цифру при каждом запуске программы.Я думаю, что сделал ошибки, но я не вижу, где.Надеюсь, вы поможете мне определить, где я ошибаюсь.