我需要解决一个常微分方程组。问题是我在网上找不到任何类似的示例。它由一个2阶ODE和两个1阶ODE组成。 这是系统:
一个二阶ODE:
d ^ 2 z / dt ^ 2 +((e ^ y)/ x)(dx / dt)(dz / dt)+(dy / dt)xe ^ y = 0
和两个一阶ODE:
dx / dt =(1-2 m / x)e ^(-y)
dy / dt =(1 / x)e ^(-y)
我已经尝试使用scipy.integrate.odeint编写代码。我的问题是,由于我的工作基于以下示例:https://scipy-cookbook.readthedocs.io/items/Zombie_Apocalypse_ODEINT.html和https://scipy-cookbook.readthedocs.io/items/CoupledSpringMassSystem.html,并且这些示例中描述的系统看起来并不像我的,因此我不确定是否做了所有事情是的。
我不确定的特别事情是在下面定义函数向量域。例如,查看f1和f2。在上面显示的系统中,y1是dx / dt。因此我使f1 = y1,然后将dx / dt的显式表达式分配给f2。是这样吗?
import numpy as np
from scipy.integrate import odeint
def vectorfield(w,t):
x1,y1,x2,y2,x3,y3 = w
m = 0.5
f1 = y1
f2= (1-(2*m)/x1)*np.exp(-x2)
f3 = y2
f4 = (1/x1)*np.exp(-x2)
f5 = y3
f6 = (-1/x1)*y1*y3*np.exp(-x2)-y2*x1*np.exp(x2)
return [f1,f2,f3,f4,f5,f6]
#initial conditions:
x1 = 10
y1 = 0
x2 = 2
y2 = 1
x3 = 3
y3 = 1.5
w0 = [x1,y1, x2, y2, x3,y3]
# ODE solver parameters
stoptime = 5.0
numpoints = 250
t = [stoptime * float(i) / (numpoints - 1) for i in range(numpoints)]
wsol = odeint(vectorfield, w0, t)