【算法基础学习 6】龙格库塔法 求微分方程

时间:2024-04-11 13:11:37

龙格库塔法


龙格库塔法对于一个工科学生来说估计并不陌生,因为我们做项目的时候或多或少会接触到微分方程,解微分方程的数值解是就需要用到龙格库塔方程了。我第一次接触到该方法是对四轴姿态角进行四元数解算的时候,当时用的是一阶龙格库塔,当时的理解就是这不就是泰勒展开式取一阶嘛,然后觉得二阶龙格库塔应该就是取二阶了,依次类推,所以当时没有深入的了解,现在因为遇到这方面的问题所以重新把他学了一遍。


准确的说,高阶龙格库塔法是借用了泰勒展开式的思想,但是和泰勒展开式还是有区别的。下面我对龙格库塔法讲讲我的理解。

首先,龙格库塔的一般形式如下:

【算法基础学习 6】龙格库塔法 求微分方程

首先,我们可以知道一阶龙格库塔法的表达式

【算法基础学习 6】龙格库塔法 求微分方程

上述式子可以改写成如下式子

【算法基础学习 6】龙格库塔法 求微分方程

这里我们可以看成k是在步长为h情况下,函数的增长量,f(x,y)为函数y的斜率。这个式子其实比较好理解的。

然后我们来看二阶龙格库塔的推导过程:
二阶情况下一般表达式中就只有k1和k2了,二阶龙格库塔我们可以看成是一阶表达式的一个变形,由原来的一个k变成了k1,k2,用k1,k2来表示k,c1和c2相当于k1和k2所占的权重一样,这样理解是不是好一点。那k1和k2分别表示什么??其实k1表示xi点处的增长量,k2表示的是xi+a2*h处的增长量。在这基础上,因为c1、c2、a2和是未知量。我们需要将其求出来,下面是我的推导过程:

【算法基础学习 6】龙格库塔法 求微分方程


这样二阶龙格库塔的迭代式子就可以表达出来了,写完收工。
然而如果你想你的数值解更加精确的话,你就需要更高 阶次的龙格库塔迭代式,一般而言,四阶是最经典的,用的也是最多的。本来我想把四阶的参数也算一遍,但是工程量巨大,我放弃了。我尝试了一下3阶的参数推导,推导一半,我还是放弃了,我把我推到一半的过程也写出来,希望有人帮我弄出来,本人实在没有勇气。

【算法基础学习 6】龙格库塔法 求微分方程


这里把k1,k1k2,k2平方带入式子中,我感觉非常人能及的,高中学的解析几何感觉都不算什么??
这里有一个需要注意的地方,图片中我用红笔标注了,由于三阶龙格库塔的阶段误差为【算法基础学习 6】龙格库塔法 求微分方程,意思就是多项式中存在h的次数大于等于4的都可以忽略,这可能会大大减少我们的计算量,但是还是好难。
最后给出一个四阶龙格库塔算迭代表达式:

【算法基础学习 6】龙格库塔法 求微分方程