今天学习常微分方程的数值解,学习视频指路:微分方程数值解,感谢本视频让我突击学会了数值解(教材真的看不懂www)。本文作为该视频的学习笔记,加入了个人的一些理解,同时参考了王高雄老师的《常微分方程》第四版,如有理解不当地方还请各位指正。
文章目录
- 一、 欧拉方法(Euler法)
-
- 01 Euler法基本格式
- 02 差分形式拓展
- 03 Euler法的改进
-
- (1)左矩形公式
- (2)右矩形公式
- (3)梯形公式
- 04 实际运行效果
- 05 欧拉法的评价
- 二、 龙格—库塔方法(Runge—Kutta)
-
- 01 龙格—库塔方法基本介绍
- 02 相容性条件
- 03 龙格—库塔方法的评价
一、 欧拉方法(Euler法)
01 Euler法基本格式
对于微分方程的初值问题 { d y d x = f ( x , y ) y ( x 0 ) = y 0 \begin{cases}\frac{dy}{dx}=f(x,y)\\ y(x_0)=y_0\end{cases} { dxdy=f(x,y)y(x0)=y0数值方法本质上就是希望能够找出一系列点去逼近 y = f ( x ) y=f(x) y=f(x)这条曲线。
假设这个微分方程的解曲线在 [ 0 , T ] [0,T] [0,T]上有定义,我们将区间划分为 n n n个区间,即 n + 1 n+1 n+1个节点,并令步长 h = T n h=\frac{T}{n} h=nT,记节点为 t k t_k tk,满足 0 < t 0 < t 1 < . . . < t n = T 0<t_0<t_1<...<t_n=T 0<t0<t1<...<tn=T
为了方便推导符号的统一性(其实用 y y y也是可以的),我们记初值问题为 { u ( t 0 ) = u 0 u ′ ( t 0 ) = f ( t 0 , u 0 ) \begin{cases}u(t_{0})=u_{0}\\u'(t_{0})=f(t_0,u_{0})\end{cases} {
u(t0)=u0u′(t0)=f(t0,u0)在下一个节点处进行泰勒展开有 u ( t 1 ) = u ( t 0 + h ) = u ( t 0 ) + u ′ ( t 0 ) h + O ( h 2 ) u(t_1)=u(t_0+h)=u(t_0)+u'(t_0)h+O(h^2) u(t1)=u(t0+h)=u(t0)+u′(t0)h+O(h2)忽略二阶小量,令一个新的符号表示近似值 u 1 = u ( t 0 ) + u ′ ( t 0 ) h u_1=u(t_0)+u'(t_0)h u1=u(t0)+u′(t0)h由于在递推过程中,精确解本身就是难以得到的,所有的逼近过程都是用近似值 u 1 = u 0 + f ( t 0 , u 0 ) h ≈ u ( t 1 ) u_1=u_0+f(t_0,u_0)h\approx u(t_1) u1=u0+f(t0,u0)h≈u(t1)以此类推,得到递推公式
u i + 1 = u i + f ( t i , u i ) h ( i = 0 , 1 , . . . , n − 1 ) (1-1) u_{i+1}=u_i+f(t_{i},u_{i})h\quad (i=0,1,...,n-1)\tag{1-1} ui+1=ui+f(t