解微分方程数值解法(理论部分)

欧拉法

首先先来介绍欧拉法,如果对于一条曲线,用 Δ \Delta Δ t t t来将线段划分成许多小段,那么我们就可以近似认为每一段的斜率都是常数,且对于第 i i i段的斜率表示为
d y i d t = y i + 1 − y i Δ t \frac{dy_{i}}{dt}=\frac{y_{i+1}-y_{i}}{\Delta t} dtdyi=Δtyi+1yi
以最为常见的一阶微分方程为例
d y d t = a 0 y + f ( t ) \frac{dy}{dt}=a_{0}y+f(t) dtdy=a0y+f(t)
我们再利用欧拉法求解的时候需要第 i i i段的斜率,因此利用上式,带入 ( t i , y i ) (t_{i},y_{i}) (ti,yi)求得 d y i d t \frac{dy_{i}}{dt} dtdyi,综合可得
y i + 1 − y i Δ t = a 0 y i + f ( t i ) \frac{y_{i+1}-y_{i}}{\Delta t}=a_{0}y_{i}+f(t_{i}) Δtyi+1yi=a0yi+f(ti)
再变一下型
y i + 1 = ( a 0 Δ t + 1 ) y i + f ( t i ) Δ t y_{i+1}=(a_{0}\Delta t+1)y_{i}+f(t_{i})\Delta t yi+1=(a0Δt+1)yi+f(ti)Δt
这就是欧拉法,其误差的大小取决于你 Δ \Delta Δ t t t选择的大小。

改进的欧拉法

首先计算出第 i i i个点的斜率
d y i d t = a 0 y i + f ( t i ) \frac{dy_{i}}{dt}=a_{0}y_{i}+f(t_{i}) dtdyi=a0yi+f(ti)
然后再利用
y i + 1 = d y i d t Δ t + y i y_{i+1}=\frac{dy_{i}}{dt}\Delta t+y_{i} yi+1=dtdyiΔt+yi
求出第 i + 1 i+1 i+1个点处的斜率
d y i + 1 d t = a 0 y i + 1 + f ( t i ) \frac{dy_{i+1}}{dt}=a_{0}y_{i+1}+f(t_{i}) dtdyi+1=a0yi+1+f(ti)
这样我们在计算这一段时就会有两个斜率可以用,所以就取这两个斜率的平均值来作为这个线段的斜率
y i + 1 = y i + Δ t 2 ( d y i + 1 d t + d y i d t ) y_{i+1}=y_{i}+\frac{\Delta t}{2}(\frac{dy_{i+1}}{dt}+\frac{dy_{i}}{dt}) yi+1=yi+2Δt(dtdyi+1+dtdyi)

四阶龙格-库塔积分法

为了方便这里设 s i = f ( y i , t i ) = a 0 y i + f ( t i ) s_{i}=f(y_{i},t_{i})=a_{0}y_{i}+f(t_{i}) si=f(yi,ti)=a0yi+f(ti),那么先计算
s i = f ( y i , t i ) s_{i}=f(y_{i},t_{i}) si=f(yi,ti)
再计算
s i + 1 = f ( y i + Δ t 2 s i , t i + Δ t 2 ) − − 沿 着 s i 这 个 斜 率 向 前 走 Δ t 2 处 的 斜 率 s_{i+1}=f(y_{i}+\frac{\Delta t}{2}s_{i},t_{i}+\frac{\Delta t}{2})--沿着s_{i}这个斜率向前走\frac{\Delta t}{2}处的斜率 si+1=f(yi+2Δtsi,ti+2Δt)沿si2Δt
再计算
s i + 2 = f ( y i + Δ t 2 s i + 1 , t i + Δ t 2 ) s_{i+2}=f(y_{i}+\frac{\Delta t}{2}s_{i+1},t_{i}+\frac{\Delta t}{2}) si+2=f(yi+2Δtsi+1,ti+2Δt)
s i + 3 = f ( y i + Δ t s i + 2 , t i + Δ t ) s_{i+3}=f(y_{i}+\Delta ts_{i+2},t_{i}+\Delta t) si+3=f(yi+Δtsi+2,ti+Δt)
得到这4个斜率后再用下式计算
y i + 1 = y i + Δ t 6 ( s i + 2 s i + 1 + 2 s i + 2 + s i + 3 ) y_{i+1}=y_{i}+\frac{\Delta t}{6}(s_{i}+2s_{i+1}+2s_{i+2}+s_{i+3}) yi+1=yi+6Δt(si+2si+1+2si+2+si+3)
这种方法比前两种算法都来得精准,但是增加了计算量,以及计算程序变得复杂。

你可能感兴趣的:(解微分方程数值解法(理论部分))