龙格库塔法

1 基本思想

我们求解常微分方程的时候,某些常微分方程有解析方法,但是大多数的常微分方程只能用数值解法来求解。

数值解法的一个基本特点就是“递进式”,顺着节点的顺序一步一步向前推进。

龙格库塔法的基本思想就是利用f(x,y)在某些特殊点上的函数值的线性组合,来估算高阶单步法的平均斜率。

1.1 平均斜率

对于常微分方程,有一个初始解y=y(x),用泰勒展开式有(其中,h=x(n+1)-x(n))

 根据拉格朗日中值定理,存在一个θ∈(0,1),使得

 

所以对于y(x_{n+1}),有y(x_{n+1})=y(x_n)+hy'(x+\theta h)

y'(x+θh)就是这里的平均斜率。

2 二阶龙格库塔法

考虑区间[x_i,x_{i+1}]上的点x_{i+p}=x_i+ph (0<p≤1)

x_i点和x_{i+p}点的斜率K1和K2的加权平均作为x_ix_{i+1}的 平均斜率K的近似值

即:K=λ1K1+λ2K2,也就是y_{i+1}=y_i+h(λ1K1+λ2K2),其中h=x_{i+1}-x_i

λ1和λ2都是待定的常数,K1=f(yi,yi),那么问题在于:如何确定x_{i+p}点的斜率K2和常数λ1,λ2

按照改进的泰勒展开式,用泰勒展开式估计y_{i+p}

(y(x_{i+p})=y(x_i)+(x_{i+p}-x_i)y'(x_i)

y_{i+p}=y_i+ph K_1 (y'=f(x,y))

并用它来估计斜率K2

于是得到如下形式的算法:

龙格库塔法_第1张图片

要使得公式具备二阶精度,需要:

λ1+λ2=1—— h的系数

λ2p=1/2——h^2的系数

(和泰勒公式里面h的系数对应)

方程组有无穷多组解,所以二级方程有无穷多种。

h^n的系数怎么看?f之前h的幂是h^n的一部分。

另一部分是这么看的:f(x,y+h^n Ki)中的n算是h^n的一部分,同时整个f(x,y)算是h^0的一部分

 2.2 常用的二阶龙格库塔法

2.2.1 中点法

λ1=0,λ2=1 ,p=1/2

 2.2.2 传统二阶龙格库塔法:

λ1=1/2 λ2=1/2 p=1

 3 传统三阶龙格库塔法

 龙格库塔法_第2张图片

通过验证,不难发现h的1,2,3次方的系数和泰勒展开式中一致

h的系数 1/6+2/3+1/6=1

h^2的系数 (2/3)*1/2-1/6+(1/6)*2=1/2

h^3的系数 ((1/6)*2)/2=1/6

4 传统四阶龙格库塔法

龙格库塔法_第3张图片

 4.1 四阶龙格库塔法举例

 龙格库塔法_第4张图片

 我们使用经典四阶龙格库塔法:

龙格库塔法_第5张图片

实验结果:

龙格库塔法_第6张图片

可视化结果

龙格库塔法_第7张图片

 4.2 python实现四阶龙格库塔法

 见 python 实现四阶龙格库塔法_刘文巾的博客-CSDN博客

参考文献 第二节 龙格-库塔方法 - 百度文库 (baidu.com)

你可能感兴趣的:(算法,算法,algorithm)