matlab 极限环,ODE in MATLAB
寫此文的目的是要想要以最簡單易懂的語言來總結一下MATLAB中求解微分方程的思路和步驟。固然,網上很多關于此類的技術型文章,但往往一看下來發現,文章中的友情鏈接比文章字數還多,要了解這一篇文章,你要先了解那個;要了解那個,你又要了解那個那個;以此類推。了解完了,花都謝了。我在這里要寫的是娛樂型文章,即試圖用最少的字數陳述出MATLAB的求解微分方程方法,看完后可以記得清楚且不亦樂乎。其實個人十分推薦MATLAB中的幫助文件,內容實在是特別給力,簡明的不能再簡明了。可惜了是英文寫的,即使是天天要面對英語的我,也頗為頭疼。那么以下我將結合我對MATLAB中幫助文檔的理解,提出我對求解最簡單微分方程的方法的總結。以求解一個經典的非線性方程為例。
做一個最基本的假設:你們都看過高數。
一。老濕發話了:童鞋們,求解一下這個方程,判斷她是否穩定。要是穩定,那么她是否存在極限環:
一看明白了,這不就是傳說中的范德普方程。地球人都知道她穩定并有極限環。現在我們就看看如何用MATLAB求解她的軌跡。
二。一般的計算機求解方程的方法無外乎是這樣:首先把該方程改寫成一個規范的形式,一般使用狀態空間表示法;而后調用已有的算法進行求解;最后對得出的結果進行處理,比如畫圖之類的。接下來就對這三大步分別作出解釋。
三。輸入待求解的方程。
首先我們知道,狀態空間的標準形式(自由系統)是:
這里X是列向量,F是作用于列向量的函數,可以是線性也可以是非線性。范德普方程可以改寫成這樣的標準形式:
MATLAB中關于輸入輸入待解方程的語句特別簡單。需要先定義一個普通函數,函數名任意,姑且叫做myFcn,格式如下
function xdot = myFcn (t,
x)
需要注意的是,函數必須含有t,
x兩個參數,名稱可以自己任意定。xdot是這個函數本身的返回值,只出現在這個函數內部,因此也可以任意定。
定義中的x被視為是一個列向量,x(i)表示列向量中的第i個分量。那么F函數的每一個分量即簡單地用表達時給出即可。其中的自變量可以引用x(i)。以范德普方程為例:
xdot = [x(2) ;
u(1-x(1)^2)*x(2)-x(1)]
于是,這兩句話便構成了待解函數。
四。調用MATLAB函數進行求解
通常人工求解微分方程需要知道初始值,計算機求解也不例外。另外,由于非線性方程一般只有數值解,故計算精度也可以調整。這些都是可以自己調整的參數。
調用MATLAB計算求解常微分方程的模式很簡單,格式為:
[t, x] = ode45(@myFcn, [開始時間結束時間],
[初始值列向量],
options)
注意到求解出來的結果是[t,
x]即一堆數,所以需要我們進行后處理比如畫圖之類的。
ode45表示了MATLAB中的一種內置計算微分方程的算法,最為常用,出于娛樂目的,就先用這個。
@表示待求解的方程,如myFcn。
[開始時間結束時間]表示求解的時間段,不必定義間隔。
[初始值列向量]就不用多說了。通常在求解之前定義一個變量x0列向量表示初始值,然后輸入起來就方便多了。
options本身是一個變量。注意,她的名稱不固定,但是他是一個以結構體為類型的變量。options很重要,稍后討論。
五。進行后處理。在得到[t,
x]后可以自己用plot神馬的進行畫圖。不過我一般不這樣,各位看官不必驚慌。
六。options的用法。
options在MATLAB幫助中是這樣定義格式的:
options
= odeset (“Name”, Value, “Name”, Value, …)
意思是,options這個變量要用到odeset這個函數來對他進行賦值。而odeset這個函數的參數必須是成對出現的:一個名稱對應一個數值。
我們要用到的是這樣的:
options=
odeset(“OutputFcn”, @odephas2, “reltol”, 1e-5);
注意,odeset中的參數名稱不可任意定,因為都是預定義好的。”OutputFcn”使用預定義的函數進行輸出,而與定義的函數有好幾種,使用@進行選擇,我們選odephas2即畫相平面圖(phase
portrait)。之后的那個參數表示相對誤差的最大允許值,不說也明白。
有一個問題,用odephas2畫出的圖圖不好看,因為上面打了好多圈圈。解決辦法是找到該文件,修改其中所有的plot語句即可,把那個”-o”去掉就行了。
七。就是這個樣了。總結一下,求解范德普方程可以用如下語句:
首先是函數定義:
function xdot = myFcn (t, x)
xdot = [x(2) ; u(1-x(1)^2)*x(2)-x(1)]
其次是主程序:
% Solving options predetermined
options=odeset('OutputFcn',@odephas2,'reltol',1e-5);
% Solving vdp equation withdifferent ini
conditions
for a = -3 : 0.1 :
3
b1=sqrt(25-a^2);
b2=-sqrt(25-a^2);
%
Solve the problem
[t,y]=ode45(@myFcn,
[0 20], [a b1], options);
hold
on
[t,y]=ode45(@myFcn,
[0 20] ,[a b2], options);
hold
on
end
grid on
附一張圖圖,即范德普方程求解曲線:
總結
以上是生活随笔為你收集整理的matlab 极限环,ODE in MATLAB的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线性代数感悟之2
- 下一篇: 光谱测量数据处理(matlab)