编写常微分方程组的pathon程序
时间: 2023-03-02 15:21:19 浏览: 145
用C编写的常微分方程(组)的求解程序
5星 · 资源好评率100%
编写常微分方程组的 Python 程序可以使用 SciPy 库中的 odeint 函数。具体步骤如下:
1. 导入需要的库:
```
import numpy as np
from scipy.integrate import odeint
```
2. 定义常微分方程组:
```
def myode(y, t, param1, param2):
# y是状态变量向量,t是时间,param1和param2是常数参数
dydt = np.zeros(2)
dydt[0] = -param1 * y[0] + param2 * y[1]
dydt[1] = param1 * y[0] - param2 * y[1]
return dydt
```
上述函数中,dydt 表示状态变量 y 对时间的导数。在这个例子中,状态变量向量 y 有两个分量,分别是 y[0] 和 y[1]。函数返回一个向量,其中包含这两个分量对时间的导数。
3. 定义初始状态和时间向量:
```
y0 = [1, 0] # 初始状态向量
t = np.linspace(0, 10, 101) # 时间向量
```
上述代码中,y0 是初始状态向量,t 是时间向量。linspace 函数用于生成 101 个等距的时间点,这些时间点从 0 开始,到 10 结束。
4. 调用 odeint 函数:
```
sol = odeint(myode, y0, t, args=(param1, param2))
```
上述代码中,odeint 函数用于求解常微分方程组。第一个参数是常微分方程组的函数名,第二个参数是初始状态向量,第三个参数是时间向量,第四个参数是常数参数。
5. 绘制结果:
```
import matplotlib.pyplot as plt
plt.plot(t, sol[:, 0], 'b', label='y1')
plt.plot(t, sol[:, 1], 'g', label='y2')
plt.legend(loc='best')
plt.xlabel('t')
plt.grid()
plt.show()
```
上述代码中,使用 Matplotlib 库绘制了 y1 和 y2 随时间的变化曲线。
完整代码如下:
```
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
def myode(y, t, param1, param2):
dydt = np.zeros(2)
dydt[0] = -param1 * y[0] + param2 * y[1]
dydt[1] = param1 * y[0] - param2 * y[1]
return dydt
y0 = [1, 0]
t = np.linspace(0, 10, 101)
param1 = 2.0
param2 = 1.0
sol = odeint(myode, y0, t, args=(param1, param2))
plt.plot(t, sol[:, 0], 'b', label='y1')
plt.plot(t, sol[:, 1], 'g', label='y2')
plt.legend(loc='best')
plt.xlabel('t')
plt.grid()
plt.show()
```
阅读全文