Runge Kutta方法求解常微分方程
参考书籍:应用数学基础下
常微分方程
一阶常微分方程形式如下:
二阶Runge Kutta法
改进的Euler格式如下:
例题:用改进的Euler格式求解初值问题:
解:根据上面公式可以列出改进的Euler格式为:
取步长为h=0.1,初值y0=1,数值结果和解析结果如下表所示:
xn | yn | y(xn) |
---|---|---|
0.1 | 1.09590909 | 1.09544511 |
0.2 | 1.18409657 | 1.18321596 |
0.3 | 1.26620136 | 1.26491106 |
0.4 | 1.34336015 | 1.341640798 |
0.5 | 1.41640193 | 1.41421356 |
0.6 | 1.48595560 | 1.48323970 |
0.7 | 1.55251409 | 1.54919334 |
0.8 | 1.61647478 | 1.61245155 |
0.9 | 1.67816636 | 1.67332005 |
1.0 | 1.73786740 | 1.73205081 |
代码如下:
clear;clc;
h=0.1;
xn=0;
yn=1;
for n = 1:10
K1 = yn - 2*xn/yn;
K2 = yn + h*K1 - 2*(xn + h)/(yn + h*K1);
yn_1 = yn + h/2*(K1 + K2);
xn = xn + h;
yn = yn_1;
yn_1
end
四阶Runge Kutta法
标准四阶Runge Kutta格式为:
例题:用改进的Euler格式求解初值问题:
解:计算格式为:
取步长为h=0.1,初值y0=1,数值结果和解析结果如下表所示:
xn | yn | y(xn) |
---|---|---|
0.1 | 1.09544553 | 1.09544511 |
0.2 | 1.18321674 | 1.18321596 |
0.3 | 1.26491222 | 1.26491106 |
0.4 | 1.34164235 | 1.341640798 |
0.5 | 1.41421557 | 1.41421356 |
0.6 | 1.48324222 | 1.48323970 |
0.7 | 1.54919645 | 1.54919334 |
0.8 | 1.61245534 | 1.61245155 |
0.9 | 1.67332465 | 1.67332005 |
1.0 | 1.73205636 | 1.73205081 |
可见,四阶Runge Kutta法相比二阶Runge Kutta精度更高。
代码如下:
clear;clc;
xn=0;
yn=1;
h=0.1;
for n=1:10
K1 = yn-2*xn/yn;
K2 = yn + h/2*K1 - (2*xn+h)/(yn+h/2*K1);
K3 = yn + h/2*K2 - (2*xn+h)/(yn+h/2*K2);
K4 = yn + h*K3 - 2*(xn + h)/(yn + h*K3);
yn_1 = yn + h/6*(K1 + 2*K2 + 2*K3 + K4);
xn = xn + h;
yn = yn_1;
yn_1
pred = sqrt(1 + 2*xn)
end