matlab常微分方程数值求解
本節(jié)將介紹常微分方程初值問(wèn)題的數(shù)值求解,主要內(nèi)容分為三個(gè)部分:常微分方程數(shù)值求解的概念、求解函數(shù)及剛性問(wèn)題。
一、常微分方程數(shù)值求解的一般概念
首先,凡含有參數(shù),未知函數(shù)和未知函數(shù)導(dǎo)數(shù) (或微分) 的方程,稱(chēng)為微分方程,有時(shí)簡(jiǎn)稱(chēng)為方程,未知函數(shù)是一元函數(shù)的微分方程稱(chēng)作常微分方程,未知函數(shù)是多元函數(shù)的微分方程稱(chēng)作偏微分方程。微分方程中出現(xiàn)的未知函數(shù)最高階導(dǎo)數(shù)的階數(shù),稱(chēng)為微分方程的階。
常微分方程數(shù)值求解,指研究求解初值問(wèn)題各類(lèi)數(shù)值方法的構(gòu)造、理論分析與數(shù)值實(shí)現(xiàn)問(wèn)題。研究的主要對(duì)象為一階方程組初值問(wèn)題:
其中,其中y=y(x)是未知函數(shù),y(x0)=y0是初值條件,而f(x,y)是給定的二元函數(shù)。
所謂其數(shù)值解法,就是求y(x)在離散結(jié)點(diǎn)xn處的函數(shù)近似值yn 的方法 ,yn≈y(xn)。這些近似值稱(chēng)為常微分方程初值問(wèn)題的數(shù)值解。相鄰兩個(gè)結(jié)點(diǎn)之間的距離稱(chēng)為步長(zhǎng)。
這里主要介紹兩種:單步法和多步法
單步法:在計(jì)算y(n+1)時(shí)只用到前一步的y(n),因此在有了初值之后就可以逐步往下計(jì)算,其代表是龍格- - 庫(kù)塔( Runge- - Kutta ) 法
多步法:在計(jì)算y(n+1)時(shí),除了用到前一步的值y(n)之外, , 還要用到y(tǒng)(n-p)( p=1,2 , … ,k,k>0)的值, , 即前面的k步。其代表就是亞當(dāng)斯 (Adams) 法
更多介紹可參見(jiàn)這個(gè)鏈接:
https://wenku.baidu.com/view/cafe161b9a6648d7c1c708a1284ac850ad0204fc.html
二、常微分方程求解函數(shù)
MATLAB 提供了多個(gè)求常微分方程初值問(wèn)題數(shù)值解的函數(shù),一般調(diào)用格式為:
[t,y]=solver(filename,tspan,y0,option)
其中,t和y分別給出時(shí)間向量和相應(yīng)的數(shù)值解。solver為求常微分方程數(shù)值解的函數(shù)。filename 是定義 f(t ,y) 的函數(shù)名,該函數(shù)必須返回一個(gè)列向量。
tspan 形式為 [t0,tf],表示求解區(qū)間。 y0 是初始狀態(tài)向量。Option 是可選參數(shù),用于設(shè)置求解屬性,常用的屬性包括相對(duì)誤差值 RelTol(默認(rèn)值是10的-3次方)和絕對(duì)誤差值 AbsTol( ( 默認(rèn)值是10的-6次方)。
常微分方程數(shù)值求解函數(shù)的統(tǒng)一命名格式:
odennx
ode是Ordinary Differential Equation 的縮寫(xiě),是常微分方程的意思。
nn 是數(shù)字,代表所用方法的階數(shù)。例如,ode23采用2階龍格- - 庫(kù)塔( Runge- - Kutta )算法 ,用3階公式做誤差估計(jì)來(lái)調(diào)節(jié)步長(zhǎng),具有低等精度。ode45 采用4階龍格- - 庫(kù)塔算 法 ,用5階公式做誤差估計(jì)來(lái)調(diào)節(jié)步長(zhǎng),具有中等精度。
x是字母,用于標(biāo)注方法的專(zhuān)門(mén)特征。例如, ode15s 、ode23s 中的“s”代表( Stiff ),表示函數(shù)適用于剛性方程。
下表列出了求常微分方程數(shù)值解的函數(shù):
| ode23 | 2 階或3階 Runge- - Kutta 算法,低精度 | 非剛性 |
| ode45 | 4 階或5階 Runge- - Kutta 算法,中精度 | 非剛性 |
| ode113 | Adams 算法,精度可到10的-3次方至10的-6次方 | 非剛性,計(jì)算時(shí)間比 ode45 |
| ode23t | 梯形算法 | 適度剛性 |
| ode15s | Gear’s 反向數(shù)值微分算法,中精度 | 剛性 |
| ode23s | 2階 Rosebrock 算法,低精度 | 剛性,當(dāng)精度較低時(shí),計(jì)算時(shí)間比 ode15s |
| ode23tb | 梯形算法,低精度 | 剛性,當(dāng)精度較低時(shí),計(jì)算時(shí)間比 ode15s |
先看一個(gè)簡(jiǎn)單例子,y‘=y+3x/x^2,初值y(0)=-2,求解區(qū)間為[1,4]。
>> odefun=@(x,y) (y+3*x)/x^2; tspan=[1 4]; y0=-2; [x y]=ode45(odefun,tspan,y0) plot(x,y) 二、剛性問(wèn)題
有一類(lèi)常微分方程,其解的分量有的變化很快,有的變化很慢,且相差懸殊,這就是所謂的剛性問(wèn)題 (Stiff) 。
對(duì)于剛性問(wèn)題,數(shù)值解算法必須取很小步長(zhǎng)才能獲得滿意的結(jié)果,導(dǎo)致計(jì)算量會(huì)大大增加。解決剛性問(wèn)題需要有專(zhuān)門(mén)方法。非剛性算法可以求解剛性問(wèn)題,只不過(guò)需要很長(zhǎng)的計(jì)算時(shí)間。
例、假如點(diǎn)燃一個(gè)火柴,火焰球迅速增大直至某個(gè)臨界體積,然后,維持這一體積不變,原因是火焰球內(nèi)部燃燒耗費(fèi)的氧氣和從球表面所獲氧氣達(dá)到平衡。其簡(jiǎn)化模型如下:
y’=y2-y3,y(0)=L,0<=t<=2/L
其中, y(t) 代表火焰球半徑,初始半徑是λ ,它很小。分析 λ 的大小對(duì)方程求解過(guò)程的影響。
注:tic 和 toc 函數(shù) 用來(lái)記錄 微分方程求解 命令執(zhí)行的時(shí)間 ,使用 tic 函數(shù)啟動(dòng)計(jì)時(shí)器,使用 toc 函數(shù)顯示從計(jì)時(shí)器啟動(dòng)到當(dāng)前所經(jīng)歷的時(shí)間。
上述采用了三種不同方法,可以發(fā)現(xiàn),第一種的運(yùn)行結(jié)果表明這時(shí)常微分方程不算很剛性;第二種這時(shí)計(jì)算時(shí)間明顯加長(zhǎng),計(jì)算的點(diǎn)數(shù)劇增,表明這時(shí)常微分方程表現(xiàn)為剛性;因此對(duì)于剛性問(wèn)題,我們需要改變求解算法,我們選擇以“s”結(jié)尾的函數(shù),例如第三種方法他們專(zhuān)門(mén)用于求解剛性方程。計(jì)算時(shí)間大大縮短,計(jì)算的點(diǎn)數(shù)大大減少。
常微分方程數(shù)值解法的研究已發(fā)展得相當(dāng)成熟,理論上也頗為完善,小編由于能力有限,只能了解個(gè)大概,本文講解也就寫(xiě)的是比較基礎(chǔ)的一些方面,如果大家有更多需求,可以自己查閱相關(guān)資料。
關(guān)于MATLAB的學(xué)習(xí):
大家可以關(guān)注我們的知乎專(zhuān)欄——數(shù)據(jù)可視化和數(shù)據(jù)分析中matlab的使用:
https://zhuanlan.zhihu.com/c_1131568134137692160
歡迎大家加入我們的MATLAB學(xué)習(xí)交流群:
953314432
掃碼關(guān)注我們
發(fā)現(xiàn)更多精彩
總結(jié)
以上是生活随笔為你收集整理的matlab常微分方程数值求解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python—让繁琐工作自动化
- 下一篇: 微分方程求解 matlab,4MATLA