解决一个二阶ODE和两个一阶ODE的ODE系统

时间:2019-04-06 14:26:43

标签: python-3.x scipy scientific-computing odeint

我需要解决一个常微分方程组。问题是我在网上找不到任何类似的示例。它由一个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.htmlhttps://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)

0 个答案:

没有答案