python实现[t,out] = ode45(@ctFun, [tBegin, tFinal], X0);plot(t,out(:,1), t,out(:,2), t,out(:,3), t,out(:,4), 'linewidth',1.5);
时间: 2023-10-10 21:11:59 浏览: 48
由于Python没有类似MATLAB中的ode45函数,我们需要使用第三方库来实现。下面是使用scipy库中的odeint函数实现的代码:
```python
from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt
def ctFun(X, t):
# 定义微分方程
x1_dot = -0.1*X[0] + 1000*X[1]*X[3]
x2_dot = -x1_dot - 3*10**7*X[1]**2
x3_dot = X[2]
x4_dot = X[1]
return [x1_dot, x2_dot, x3_dot, x4_dot]
# 初始状态
X0 = [0, 0, 0, 1]
# 时间范围
tBegin = 0
tFinal = 0.1
# 求解微分方程
t = np.linspace(tBegin, tFinal, 1000)
out = odeint(ctFun, X0, t)
# 绘图
plt.plot(t, out[:,0], 'r', linewidth=1.5)
plt.plot(t, out[:,1], 'g', linewidth=1.5)
plt.plot(t, out[:,2], 'b', linewidth=1.5)
plt.plot(t, out[:,3], 'y', linewidth=1.5)
plt.show()
```
注意,odeint函数的第一个参数是微分方程函数,第二个参数是初始状态,第三个参数是时间范围。函数的返回值是一个二维数组,第一维是时间,第二维是每个状态量在对应时间的取值。绘图时,使用out[:,i]来获取第i个状态量在所有时间的取值。