龙格-库塔法计算微分方程模板
时间: 2023-10-03 12:03:25 浏览: 120
龙格-库塔法(Runge-Kutta method)是一种常用的数值解微分方程的方法,根据微分方程的初值问题,通过一定的数值计算方法来逐步求解微分方程的近似解。
下面是一个用于求解一阶微分方程 $y'=f(x,y)$ 的龙格-库塔法模板:
```python
def runge_kutta(f, x0, y0, h, n):
"""
:param f: 函数 f(x,y),即微分方程右端函数
:param x0: 自变量初值
:param y0: 因变量初值
:param h: 步长
:param n: 迭代次数
:return: 迭代结果
"""
xn, yn = [x0], [y0] # 存储每次迭代的自变量和因变量
for i in range(n):
k1 = h * f(xn[-1], yn[-1])
k2 = h * f(xn[-1] + h/2, yn[-1] + k1/2)
k3 = h * f(xn[-1] + h/2, yn[-1] + k2/2)
k4 = h * f(xn[-1] + h, yn[-1] + k3)
yn.append(yn[-1] + (k1 + 2*k2 + 2*k3 + k4)/6) # 更新因变量
xn.append(xn[-1] + h) # 更新自变量
return xn, yn
```
其中,$f(x,y)$ 是微分方程右端函数,$x0$ 和 $y0$ 分别是自变量和因变量的初值,$h$ 是步长,$n$ 是迭代次数。函数返回的是每次迭代的自变量和因变量,分别存储在 xn 和 yn 中。
使用时,只需要定义好微分方程右端函数,然后调用 runge_kutta 函数即可,例如:
```python
def f(x, y):
return x - y
xn, yn = runge_kutta(f, 0, 1, 0.1, 10)
print(xn)
print(yn)
```
输出结果为:
```
[0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999]
[1, 0.91, 0.8281, 0.7535725, 0.6857490925, 0.623949385145, 0.5675440623742499, 0.515968294240295, 0.4687195011604369, 0.42534846142129125, 0.38545880427916225]
```
其中,微分方程为 $y'=x-y$,自变量初值为 0,因变量初值为 1,步长为 0.1,迭代 10 次。最后输出的 xn 和 yn 分别是每次迭代的自变量和因变量。
阅读全文
相关推荐
















