用python编程RungeKutta法求二阶常微分方程组
时间: 2024-05-03 21:23:22 浏览: 107
以下是使用Python编写的二阶常微分方程组RungeKutta法的代码:
```python
import numpy as np
def func(x, y):
"""
定义二阶常微分方程组
y1' = y2
y2' = -2*y2 - y1 + 4*sin(x)
"""
return np.array([y[1], -2*y[1]-y[0]+4*np.sin(x)])
def rk4(x, y, h):
"""
二阶常微分方程组的RK4方法
"""
k1 = h * func(x, y)
k2 = h * func(x + h / 2, y + k1 / 2)
k3 = h * func(x + h / 2, y + k2 / 2)
k4 = h * func(x + h, y + k3)
return y + (k1 + 2*k2 + 2*k3 + k4) / 6
# 初始值
x0 = 0
y0 = np.array([0, 0])
# 步长
h = 0.1
# 循环次数
n = 100
# 迭代
x = x0
y = y0
for i in range(n):
print(f"x={x:.1f}, y1={y[0]:.4f}, y2={y[1]:.4f}")
y = rk4(x, y, h)
x += h
```
在上面的代码中,我们首先定义了二阶常微分方程组的函数`func`,然后定义了二阶常微分方程组的RK4方法`rk4`。在主程序中,我们设置了初始值、步长和循环次数,并使用`for`循环进行迭代。在每次迭代中,我们输出当前的$x$值和$y_1$、$y_2$的值,并使用`rk4`方法进行计算,更新$y$值和$x$值。
阅读全文