Python 中的一阶 ODE 系统
System of First Order ODEs in Python
我在 Python 中看到了如何求解 ODE 系统,但我看到的所有示例都是“标准”方程。我的标准意思是方程式没有说“一个函数的导数 = 包含另一个函数的导数的表达式”。
这是我试图用数值方法求解的示例系统。初始条件为x(0) = 5, y(0) = 3, z(0) = 2,所有初始导数为0:
x'(t) + 4y(t) = -3y'(t)
y'(t) + ty(t) = -2z'(t)
z'(t) = -2y(t) + x'(t)
我不是 100% 确定如何编码。这是我尝试过的:
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
import math
def ODESystem(f,t):
x = f[0]
y = f[1]
z = f[2]
现在,我先定义什么:dydt、dxdt 或 dzdt。在我使用它来定义另一个表达式之前,有没有一种方法可以让我定义一个“徘徊”的表达式?
没关系;我很蠢。我可以继续代入第三个方程,直到得到不包含任何其他导数的 z'(t) 方程。
您不需要手动解决任何问题,您也可以这样做
def ODESystem(f,t):
x,y,z = f
return np.linalg.solve([[1,3,0],[0,1,2],[-1,0,1]], [-4, -t, -2])*y
我在 Python 中看到了如何求解 ODE 系统,但我看到的所有示例都是“标准”方程。我的标准意思是方程式没有说“一个函数的导数 = 包含另一个函数的导数的表达式”。
这是我试图用数值方法求解的示例系统。初始条件为x(0) = 5, y(0) = 3, z(0) = 2,所有初始导数为0:
x'(t) + 4y(t) = -3y'(t)
y'(t) + ty(t) = -2z'(t)
z'(t) = -2y(t) + x'(t)
我不是 100% 确定如何编码。这是我尝试过的:
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
import math
def ODESystem(f,t):
x = f[0]
y = f[1]
z = f[2]
现在,我先定义什么:dydt、dxdt 或 dzdt。在我使用它来定义另一个表达式之前,有没有一种方法可以让我定义一个“徘徊”的表达式?
没关系;我很蠢。我可以继续代入第三个方程,直到得到不包含任何其他导数的 z'(t) 方程。
您不需要手动解决任何问题,您也可以这样做
def ODESystem(f,t):
x,y,z = f
return np.linalg.solve([[1,3,0],[0,1,2],[-1,0,1]], [-4, -t, -2])*y