我刚刚开始使用Python进行科学绘图来绘制微分方程的数值解。我知道如何使用模块来求解和绘制单微分方程,但不了解微分方程系统。我如何绘制以下耦合系统?
我的微分方程系统是:
dw/dx=y
和
dy/dx=-a-3*H*y
和
dz/dx=-H*(1+z)
a = 0.1
和H=sqrt((1+z)**3+w+u**2/(2*a))
我的代码是:
import numpy as N
from scipy.integrate import odeint
import matplotlib.pyplot as plt
def model(w,y,z,x,H):
dwdx=y
dydx=-a-3*H*y
dzdx=-H*(1+z)
a=0.1
H=sqrt((1+z)**3+w+u**2/(2*a))
return [w,y,z,H]
z0=1100 #initial condition
w0=-2.26e-8
y0=-.38e-4
H0=36532.63
b=0
c=10000
x=N.arange(b,c,0.01)
y=odeint(model,y0,x) #f=Function name that returns derivative values at requested y and t values as dydt = f(y,t)
w=odeint(model,w0,x)
z=odeint(model,z0,x)
plt.plot(w,x)
plt.plot(y,x)
plt.plot(z,x)
plt.legend(loc='best')
plt.show()
答案 0 :(得分:1)
通用ODE集成商期望动态系统简化为抽象的一阶系统。这样的系统具有状态向量空间,并且微分方程为该空间提供速度向量。这里的状态有3个标量组件,它们将3D矢量作为状态。如果要单独使用这些组件,ODE函数的第一步是从状态向量中提取这些组件,最后一步是按正确的顺序从组件的导数组成返回向量。
此外,您需要按依赖顺序排列计算步骤
def model(u,t):
w, y, z = u
a=0.1
H=sqrt((1+z)**3+w+u**2/(2*a))
dwdx=y
dydx=-a-3*H*y
dzdx=-H*(1+z)
return [dwdx, dydx, dzdx]
然后使用组合初始状态
调用积分器一次u0 = [ w0, y0, z0]
u = odeint(model, u0, x)
w,y,z = u.T
还请检查绘图函数的参数,一般方案是plot(x,y)
。