標籤:

MATLAB 學習筆記 第二章

  • 用 MATLAB 解ODE

對於一個常微分方程(ODE),通常可以利用積分來找到其答案。但是我們遇到的大多數的微分方程很難求出解析解,特別是實際應用中的數學建模。MATLAB提供豐富的微分方程的數值解函數,如 ode23 、ode45、ode15s。MATLAB的通過無限逼近來求數值解,精度也由於計算機的性能的不斷提升在不斷提高。以 ode23 為例去解 frac{dy}{dx}=frac{2x}{y} 初始值 y(0)=10

>> function dydx = odefun(x,y); %寫出這個微分方程n>> dydx = 2*x/y;n>> [x,y] = ode23(odefun,[0,0.5],10); %括弧內第一項為函數名,第二項x的積分範圍,第三 項y的初始值(即x取0時的初始值)。n>> plot(x,y) ; xlabel(x) ; ylabel(y);n

結果如下:

可以手算比較一下已經非常精確了,看一下工作區生成的X,Y矩陣,可以看到MATLAB是在區間

[0,0.5]之間取11個點,並算出值來擬合曲線的。雖然很精確了,但精度不是很高。

如果我們來試一試ode45來解決呢?在上面代碼下加入以下代碼:

>> hold on;n>> [x,y] = ode45(odefun,[0,0.5],10);n>> plot(x,y);n

可以看出兩個解差不多,曲線幾乎重合。

放大看一下,還是有區別的。

看一下工作區,ode45取了41個點來擬合曲線,明顯ode45ode23精度高。

實際上,事實卻是如此,只是本例比較簡單,差別比較小,特別是運算時間上。一般,當我們需要快速得出結果而不太在乎精度時,我們可以選擇ode23,而當我們在乎結果的精確度,而不在乎花費時間時,可以用ode45。一般簡單微分方程在時間上兩個函數幾乎感覺不到差別,這得益於計算機計算能力的不斷增強。

推薦閱讀:

學術論文中用什麼軟體可以繪製這樣的圖?
有正整數1~10,出現的概率分布給定,如何利用MATLAB按照各數字出現的概率輸出一個數字?
用matlab實現樂曲演奏的難度?在網上聽到一首用matlab編寫的卡農,求分析一下實現及難度所在?
MATLAB神經網路(四):基於Adaboost的強分類器設計
推崇Mathematica的那些人,理由是什麼?

TAG:MATLAB |