大三时候在跳蚤市场闲逛,从一位数学院的学长那里买了一些闲书,最近翻出来刚好有李荣华、刘播老师的《微分方程数值解法》和王仁宏老师的《数值逼近》,结合周善贵老师的《计算物理》课程,整理一下笔记。
本文整理常微分方程数值求解的欧拉法与龙格-库塔法。
一般地,动力学系统的时间演化可以用常微分方程的初值问题来描述,例如设一维简谐运动的回复力:
,有则运动方程:
。令
,可以将二阶微分方程转化为一阶微分方程组:
因此本文主要整理一阶常微分方程初值问题的数值解法。
一阶常微分方程初值问题
设
在区域
:
上连续,对于一个给定的常微分方程
及初值
,求解
。为了保证解
存在、唯一且连续依赖初值
,要求
满足Lipschitz条件:
存在常数L,使得
对所有
和
成立。
假设
总满足上述条件。常用的近似解法有级数解法等近似解析方法,以及下文整理的数值方法:欧拉法与龙格-库塔法。
欧拉法
将区间
作N等分,每一小区间长度
称为步长,
称为节点。根据初值
,代入微分方程可直接解出
的导数值
。
推导
1、根据泰勒展开式:
略去二阶小量,得:
以此类推,得到递推公式:
2、数值积分推导
由
可得:
,使用左矩形积分得: