📅  最后修改于: 2023-12-03 15:11:03.160000             🧑  作者: Mango
Runge-Kutta 二阶方法是一种常用于求解微分方程的数值方法,其基本思想是通过将微分方程的初始条件作为起点,在一定步长内对当前点和斜率进行计算,从而得到下一个点的近似值。
对于微分方程 $y^{'}=f(x,y)$,可以采用如下的 Runge-Kutta 二阶方法进行求解:
def RK2(f, x0, y0, h, n):
"""
Runge-Kutta 二阶方法求解微分方程 y'=f(x,y)
Args:
f: 微分方程的右端函数
x0: 初始 x 值
y0: 初始 y 值
h: 步长
n: 迭代次数
Returns:
x: 各次迭代的自变量 x
y: 各次迭代的因变量 y
"""
x = [x0]
y = [y0]
for i in range(n):
k1 = f(x[-1], y[-1])
k2 = f(x[-1]+h, y[-1]+h*k1)
x.append(x[-1] + h)
y.append(y[-1] + h*(k1+k2)/2)
return x, y
其中,参数 f
指微分方程的右端函数,x0
和 y0
则指初始值,h
表示步长,n
为迭代次数。
以求解一阶常微分方程 $y^{'}=x+y$ 为例,给定初值 $y(0)=1$,计算 $y(2)$ 处的解:
def f(x, y):
return x + y
x, y = RK2(f, 0, 1, 0.2, 10)
print(y[-1])
输出结果为 4.116542005663085
。
Runge-Kutta 二阶方法是一种简单而又较为精确的数值求解微分方程的方法,适合于解一些简单的微分方程。当然,对于更为复杂的微分方程,则需要借助更高阶的数值方法来进行求解。