我想绘制一个函数,当一个常微分方程不断变化时,它会改变。
我尝试了以下代码,以使函数F随机变化,并且当函数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()
该程序可以工作,但是它只能给我相同的解决方案,而应该改变。每当我执行脚本时,它都会给我确切的数字。此外,我没有“物理上”正确的解决方案,但这不是问题,我希望每次执行程序时首先拥有不同的身材。我想我犯了错误,但是我看不到哪里。 希望您能帮助我发现我误解的地方。