資源描述:
《實驗六用matlab求解常微分方程》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、實驗六?用matlab求解常微分方程????????1.微分方程的概念未知的函數(shù)以及它的某些階的導數(shù)連同自變量都由一已知方程聯(lián)系在一起的方程稱為微分方程。如果未知函數(shù)是一元函數(shù),稱為常微分方程。常微分方程的一般形式為如果未知函數(shù)是多元函數(shù),成為偏微分方程。聯(lián)系一些未知函數(shù)的一組微分方程組稱為微分方程組。微分方程中出現(xiàn)的未知函數(shù)的導數(shù)的最高階解數(shù)稱為微分方程的階。若方程中未知函數(shù)及其各階導數(shù)都是一次的,稱為線性常微分方程,一般表示為若上式中的系數(shù)均與無關(guān),稱之為常系數(shù)。???????2.常微分方程的解析解有
2、些微分方程可直接通過積分求解.例如,一解常系數(shù)常微分方程可化為,兩邊積分可得通解為.其中為任意常數(shù).有些常微分方程可用一些技巧,如分離變量法,積分因子法,常數(shù)變異法,降階法等可化為可積分的方程而求得解析解.線性常微分方程的解滿足疊加原理,從而他們的求解可歸結(jié)為求一個特解和相應齊次微分方程的通解.一階變系數(shù)線性微分方程總可用這一思路求得顯式解。高階線性常系數(shù)微分方程可用特征根法求得相應齊次微分方程的基本解,再用常數(shù)變異法求特解。一階常微分方程與高階微分方程可以互化,已給一個階方程設,可將上式化為一階方程組反
3、過來,在許多情況下,一階微分方程組也可化為高階方程。所以一階微分方程組與高階常微分方程的理論與方法在許多方面是相通的,一階常系數(shù)線性微分方程組也可用特征根法求解。3.微分方程的數(shù)值解法除常系數(shù)線性微分方程可用特征根法求解,少數(shù)特殊方程可用初等積分法求解外,大部分微分方程無限世界,應用中主要依靠數(shù)值解法。考慮一階常微分方程初值問題其中所謂數(shù)值解法,就是尋求在一系列離散節(jié)點上的近似值稱為步長,通常取為常量。最簡單的數(shù)值解法是Euler法。Euler法的思路極其簡單:在節(jié)點出用差商近似代替導數(shù)這樣導出計算公式(
4、稱為Euler格式)他能求解各種形式的微分方程。Euler法也稱折線法。Euler方法只有一階精度,改進方法有二階Runge-Kutta法、四階Runge-Kutta法、五階Runge-Kutta-Felhberg法和先行多步法等,這些方法可用于解高階常微分方程(組)初值問題。邊值問題采用不同方法,如差分法、有限元法等。數(shù)值算法的主要缺點是它缺乏物理理解。???????4.解微分方程的MATLAB命令MATLAB中主要用dsolve求符號解析解,ode45,ode23,ode15s求數(shù)值解。??s=dso
5、lve(‘方程1’,‘方程2’,…,’初始條件1’,’初始條件2’…,’自變量’)?用字符串方程表示,自變量缺省值為t。導數(shù)用D表示,2階導數(shù)用D2表示,以此類推。S返回解析解。在方程組情形,s為一個符號結(jié)構(gòu)。[tout,yout]=ode45(‘yprime’,[t0,tf],y0)采用變步長四階Runge-Kutta法和五階Runge-Kutta-Felhberg法求數(shù)值解,yprime是用以表示f(t,y)的M文件名,t0表示自變量的初始值,tf表示自變量的終值,y0表示初始向量值。輸出向量tout
6、表示節(jié)點(t0,t1,…,tn)T,輸出矩陣yout表示數(shù)值解,每一列對應y的一個分量。若無輸出參數(shù),則自動作出圖形。ode45是最常用的求解微分方程數(shù)值解的命令,對于剛性方程組不宜采用。ode23與ode45類似,只是精度低一些。ode12s用來求解剛性方程組,是用格式同ode45??梢杂胔elpdsolve,helpode45查閱有關(guān)這些命令的詳細信息.????例1?求下列微分方程的解析解(1)(2)(3)方程(1)求解的MATLAB代碼為:>>clear;>>s=dsolve('Dy=a*y+b')
7、結(jié)果為s=-b/a+exp(a*t)*C1方程(2)求解的MATLAB代碼為:>>clear;>>s=dsolve('D2y=sin(2*x)-y','y(0)=0','Dy(0)=1','x')>>simplify(s)?%以最簡形式顯示s結(jié)果為s=(-1/6*cos(3*x)-1/2*cos(x))*sin(x)+(-1/2*sin(x)+1/6*sin(3*x))*cos(x)+5/3*sin(x)ans=-2/3*sin(x)*cos(x)+5/3*sin(x)方程(3)求解的MATLAB代碼為:
8、>>clear;>>s=dsolve('Df=f+g','Dg=g-f','f(0)=1','g(0)=1')>>simplify(s.f)??%s是一個結(jié)構(gòu)>>simplify(s.g)結(jié)果為ans=exp(t)*cos(t)+exp(t)*sin(t)ans=-exp(t)*sin(t)+exp(t)*cos(t)???例2求解微分方程先求解析解,再求數(shù)值解,并進行比較。由>>clear;>>s=dsolve('Dy=-y