本章涉及知識點(diǎn)
1量窘、微分方程的定義
2、一階線性微分方程的定義
3氢拥、求齊次線性方程通解的算法
4蚌铜、求非齊次線性方程通解的算法
5、伯努利方程的變化算法
6嫩海、案例微分方程的分析
7厘线、純數(shù)學(xué)算法推導(dǎo)案例的微分方程
8、Euler算法的推導(dǎo)
9出革、編程實(shí)戰(zhàn)案例微分方程在不同算法下的計(jì)算結(jié)果和誤差
一、微分方程的定義
在許多實(shí)際問題渡讼,尤其是金融問題骂束,往往不能直接列出所需要研究的函數(shù)的具體表達(dá)式,但是根據(jù)使用場景成箫,卻可以列出待研究的函數(shù)與其導(dǎo)數(shù)的關(guān)系式展箱,而關(guān)于函數(shù)和其導(dǎo)數(shù)的方程就稱之為微分方程,那么從這個(gè)方程中找出未知函數(shù)蹬昌,就是求解微分方程的解
一般的混驰,在滿足初始條件下,微分方程包含未知函數(shù)的一階導(dǎo)數(shù)
上述微分方程就叫做一階微分方程
二皂贩、一階線性微分方程的定義
上述方程是關(guān)于未知函數(shù)y及其一階導(dǎo)數(shù)的一次方程栖榨,我們稱之為一階線性微分方程
方程是齊次的定義為
而方程是非齊次的定義為
求解非齊次微分方程的解,我們需要
(1)明刷、寫出對應(yīng)于非齊次線性方程的齊次線性方程婴栽,求出齊次線性方程的通解
(2)、通過常數(shù)易變法辈末,求出非齊次線性方程的通解
三愚争、求齊次線性方程通解的算法
對于齊次方程映皆,我們用分離變量法,得到
提出常數(shù)C1化簡得
四轰枝、求非齊次線性方程通解的算法
得到齊次方程的通解后捅彻,我們使用常數(shù)易變法,將齊次方程通解中的常數(shù)C換做未知函數(shù)u(x)鞍陨,變化得
我們對y進(jìn)行求導(dǎo)步淹,得到
將導(dǎo)數(shù)帶入非齊次線性方程中,得
兩端積分得
將求解到的u帶入y湾戳,就得到了非齊次方程的通解
我們將通解寫成兩項(xiàng)之和贤旷,得到
觀察分析上式可以看到,一階非齊次線性微分方程的通解 = 齊次方程的通解 + 非齊次方程的一個(gè)特解
五砾脑、伯努利方程的變化算法
從一階線性微分方程中可以看到幼驶,P(x)和Q(x)當(dāng)只有P(x)是關(guān)聯(lián)未知函數(shù)y,我們可以用上述算法求解該方程韧衣。但是當(dāng)Q(x)也關(guān)聯(lián)未知函數(shù)y盅藻,此時(shí)應(yīng)該如何求解方程呢?
上述方程叫做伯努利方程畅铭,顯然當(dāng)n=0或n=1時(shí)氏淑,就是非齊次線性方程,而當(dāng)n不等于0和1時(shí)硕噩,這個(gè)方程就不是線性的假残,為此,我們需要利用上述算法求解該方程炉擅,就需要通過變量的代換辉懒,將它轉(zhuǎn)化為線性的即可
我們將伯努利方程兩端同時(shí)除以y^n得
因?yàn)?/p>
為此我們引入新的因變量z
則z的導(dǎo)數(shù)寫為
將伯努利方程兩端同時(shí)乘以(1-n)得
可以看到上式的P(x)與z有關(guān)聯(lián),而Q(x)已經(jīng)和z沒有了關(guān)聯(lián)谍失,即原方程已經(jīng)變成了線性方程眶俩,我們就可以按照之前的算法求出方程的通解,在用z帶回y就可以得到伯努利方程的通解
六快鱼、案例微分方程的分析
介紹了非齊次線性方程和伯努利方程求解通解的算法后颠印,我們來求下面方程的通解
分析可知,該方程數(shù)非線性方程抹竹,屬于n=-1的伯努利方程线罕,直接的數(shù)學(xué)解法需要做伯努利變化為線性方程,再利用非齊次線性方程的解法來求解通解窃判,下面我們先用數(shù)學(xué)方法來求解
七闻坚、純數(shù)學(xué)算法推導(dǎo)案例的微分方程
將案例方程兩端同時(shí)乘以y得
令
帶入y得
我們從上式中寫出P(x)、Q(x)以及P(x)的積分
帶入非齊次線性方程的通解得
下面我們需要單獨(dú)來求解上式中的積分兢孝,使用分部積分法得
將積分的結(jié)果帶入非齊次線性方程的通解得
將z帶回y得
為此我們求出了案例方程的通解窿凤,下面帶入初始條件y(0)=1得
最終我們得到了案例方程的精確解為
八仅偎、Euler算法的推導(dǎo)
上面我們用純數(shù)學(xué)知識推導(dǎo)出了案例方程的精確解,但是計(jì)算機(jī)顯然不會分部積分法雳殊,我們?nèi)稳恍枰獜奈⒎址匠痰脑沓霭l(fā)
我們回到微分方程的定義
我們將微分方程在區(qū)間[ti橘沥,ti+1]上積分得
在區(qū)間[ti,ti+1]上將f(t夯秃,u)近似的看做常數(shù)f(ti座咆,ui),則有
上式稱為Euler算法仓洼,可以看到這是一個(gè)遞推式算法介陶,可以由已知初值u0推導(dǎo)至un
而Euler算法的幾何意義為:
過點(diǎn)(t0,u0)色建,以f(t0哺呜,u0)作為斜率作直線L0,得
求出直線L0在t1=t0+h的值u1箕戳,得
得到u1后,再過點(diǎn)(t1玻墅,u1),以f(t1澳厢,u1)作為斜率作直線L1囚似,得
求出直線L1在t2=t1+h的值u2,得
如此繼續(xù)迭代下去,可以求出經(jīng)過
節(jié)點(diǎn)列表的一條直線框都,所以Euler算法也叫做折線法,用n段直線繪制成一條折線魏保,來擬合函數(shù)曲線
九熬尺、編程實(shí)戰(zhàn)案例微分方程在不同算法下的計(jì)算結(jié)果和誤差
下面我們通過伯純數(shù)學(xué)的努利算法和Euler迭代算法來編程比較案例方程的結(jié)果值
定義區(qū)間和步長為
作圖畫出兩種算法的計(jì)算結(jié)果來直觀比較
可以看到當(dāng)步長h=0.05時(shí),Euler算法的精確度在下降谓罗,證明了誤差在迭代傳播
我們用伯努利理論值減去Euler值粱哼,畫出Euler算法的誤差曲線
當(dāng)我們縮小步長h=0.01時(shí),兩種算法的計(jì)算結(jié)果和Euler算法的誤差為
可以看到步長的縮小檩咱,擬合效果更加出色揭措,誤差也在減小
案例代碼見:一階非齊次微分方程的算法