本章涉及知識點
1、微分方程的定義
2、一階線性微分方程的定義
3、求齊次線性方程通解的算法
4、求非齊次線性方程通解的算法
5、伯努利方程的變化算法
6、案例微分方程的分析
7、純數學算法推導案例的微分方程
8、Euler算法的推導
9、編程實戰案例微分方程在不同算法下的計算結果和誤差
一、微分方程的定義
在許多實際問題,尤其是金融問題,往往不能直接列出所需要研究的函數的具體表達式,但是根據使用場景,卻可以列出待研究的函數與其導數的關系式,而關于函數和其導數的方程就稱之為微分方程,那么從這個方程中找出未知函數,就是求解微分方程的解
一般的,在滿足初始條件下,微分方程包含未知函數的一階導數
上述微分方程就叫做一階微分方程
二、一階線性微分方程的定義
上述方程是關于未知函數y及其一階導數的一次方程,我們稱之為一階線性微分方程
方程是齊次的定義為
而方程是非齊次的定義為
求解非齊次微分方程的解,我們需要
(1)、寫出對應于非齊次線性方程的齊次線性方程,求出齊次線性方程的通解
(2)、通過常數易變法,求出非齊次線性方程的通解
三、求齊次線性方程通解的算法
對于齊次方程,我們用分離變量法,得到
提出常數C1化簡得
四、求非齊次線性方程通解的算法
得到齊次方程的通解后,我們使用常數易變法,將齊次方程通解中的常數C換做未知函數u(x),變化得
我們對y進行求導,得到
將導數帶入非齊次線性方程中,得
兩端積分得
將求解到的u帶入y,就得到了非齊次方程的通解
我們將通解寫成兩項之和,得到
觀察分析上式可以看到,一階非齊次線性微分方程的通解 = 齊次方程的通解 + 非齊次方程的一個特解
五、伯努利方程的變化算法
從一階線性微分方程中可以看到,P(x)和Q(x)當只有P(x)是關聯未知函數y,我們可以用上述算法求解該方程。但是當Q(x)也關聯未知函數y,此時應該如何求解方程呢?
上述方程叫做伯努利方程,顯然當n=0或n=1時,就是非齊次線性方程,而當n不等于0和1時,這個方程就不是線性的,為此,我們需要利用上述算法求解該方程,就需要通過變量的代換,將它轉化為線性的即可
我們將伯努利方程兩端同時除以y^n得
因為
為此我們引入新的因變量z
則z的導數寫為
將伯努利方程兩端同時乘以(1-n)得
可以看到上式的P(x)與z有關聯,而Q(x)已經和z沒有了關聯,即原方程已經變成了線性方程,我們就可以按照之前的算法求出方程的通解,在用z帶回y就可以得到伯努利方程的通解
六、案例微分方程的分析
介紹了非齊次線性方程和伯努利方程求解通解的算法后,我們來求下面方程的通解
分析可知,該方程數非線性方程,屬于n=-1的伯努利方程,直接的數學解法需要做伯努利變化為線性方程,再利用非齊次線性方程的解法來求解通解,下面我們先用數學方法來求解
七、純數學算法推導案例的微分方程
將案例方程兩端同時乘以y得
令
帶入y得
我們從上式中寫出P(x)、Q(x)以及P(x)的積分
帶入非齊次線性方程的通解得
下面我們需要單獨來求解上式中的積分,使用分部積分法得
將積分的結果帶入非齊次線性方程的通解得
將z帶回y得
為此我們求出了案例方程的通解,下面帶入初始條件y(0)=1得
最終我們得到了案例方程的精確解為
八、Euler算法的推導
上面我們用純數學知識推導出了案例方程的精確解,但是計算機顯然不會分部積分法,我們任然需要從微分方程的原理出發
我們回到微分方程的定義
我們將微分方程在區間[ti,ti+1]上積分得
在區間[ti,ti+1]上將f(t,u)近似的看做常數f(ti,ui),則有
上式稱為Euler算法,可以看到這是一個遞推式算法,可以由已知初值u0推導至un
而Euler算法的幾何意義為:
過點(t0,u0),以f(t0,u0)作為斜率作直線L0,得
求出直線L0在t1=t0+h的值u1,得
得到u1后,再過點(t1,u1),以f(t1,u1)作為斜率作直線L1,得
求出直線L1在t2=t1+h的值u2,得
如此繼續迭代下去,可以求出經過
節點列表的一條直線,所以Euler算法也叫做折線法,用n段直線繪制成一條折線,來擬合函數曲線
九、編程實戰案例微分方程在不同算法下的計算結果和誤差
下面我們通過伯純數學的努利算法和Euler迭代算法來編程比較案例方程的結果值
定義區間和步長為
作圖畫出兩種算法的計算結果來直觀比較
可以看到當步長h=0.05時,Euler算法的精確度在下降,證明了誤差在迭代傳播
我們用伯努利理論值減去Euler值,畫出Euler算法的誤差曲線
當我們縮小步長h=0.01時,兩種算法的計算結果和Euler算法的誤差為
可以看到步長的縮小,擬合效果更加出色,誤差也在減小
案例代碼見:一階非齊次微分方程的算法