1. 程式人生 > >matlab求解器區別

matlab求解器區別

在工程實踐中,我們經常遇到一些ODEs,其中某些解變換緩慢,另一些變化很快,且相差懸殊的微分方程,這就是所謂的剛性問題(Stiff),對於所有解的變化相當我們則稱為非剛性問題(Nonstiff)。
變步長模式解法器有:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb和discrete。

a) ode45:預設值,四/五階龍格-庫塔法,適用於大多數連續或離散系統,但不適用於剛性(stiff)系統。它是單步解法器,也就是,在計算y(tn)時,它僅需要最近處理時刻的結果y(tn-1)。一般來說,面對一個模擬問題最好是首先試試ode45。
b) ode23:二/三階龍格-庫塔法,它在誤差限要求不高和求解的問題不太難的情況下,可能會比ode45更有效。也是一個單步解法器。
c) ode113:是一種階數可變的解法器,它在誤差容許要求嚴格的情況下通常比ode45有效。ode113是一種多步解法器,也就是在計算當前時刻輸出時,它需要以前多個時刻的解。
d) ode15s:是一種基於數字微分公式的解法器(NDFs)。也是一種多步解法器。適用於剛性系統,當用戶估計要解決的問題是比較困難的,或者不能使用ode45,或者即使使用效果也不好,就可以用ode15s。
e) ode23s:它是一種單步解法器,專門應用於剛性系統,在弱誤差允許下的效果好於ode15s。它能解決某些ode15s所不能有效解決的stiff問題。
f) ode23t:是梯形規則的一種自由插值實現。這種解法器適用於求解適度stiff的問題而使用者又需要一個無數字振盪的解法器的情況。
g)ode23tb:是TR-BDF2的一種實現, TR-BDF2 是具有兩個階段的隱式龍格-庫塔公式。 
h)discrtet:當Simulink檢查到模型沒有連續狀態時使用它。
固定步長模式解法器有:ode5,ode4,ode3,ode2,ode1和discrete。
a) ode5:預設值,是ode45的固定步長版本,適用於大多數連續或離散系統,不適用於剛性系統。
b) ode4:四階龍格-庫塔法,具有一定的計算精度。
c) ode3:固定步長的二/三階龍格-庫塔法。
d) ode2:改進的尤拉法。
e) ode1:尤拉法。
f) discrete:是一個實現積分的固定步長解法器,它適合於離散無連續狀態的系統。

表2-3

函式指令
含  義
函  數
含    義
求解器
  
Solver
ode23
普通2-3階法解ODE
odefile
包含ODE的檔案
ode23s
低階法解剛性ODE
選項
odeset
建立、更改Solver選項
ode23t
解適度剛性ODE
odeget
讀取Solver的設定值
ode23tb
低階法解剛性ODE
輸出
odeplot
ODE的時間序列圖
ode45
普通4-5階法解ODE
odephas2
ODE的二維相平面圖
ode15s
變階法解剛性ODE
odephas3
ODE的三維相平面圖
ode113
普通變階法解ODE
odeprint
在命令視窗輸出結果

3.因為沒有一種演算法可以有效地解決所有的ODE問題,為此,MATLAB提供了多種求解器Solver,對於不同的ODE問題,採用不同的Solver。

表2-4  不同求解器Solver的特點

求解器Solver
ODE型別
特點
說明
ode45
非剛性
一步演算法;4,5階Runge-Kutta方程;累計截斷誤差達(△x)3
大部分場合的首選演算法
ode23
非剛性
一步演算法;2,3階Runge-Kutta方程;累計截斷誤差達(△x)3
使用於精度較低的情形
ode113
非剛性
多步法;Adams演算法;高低精度均可到10-3~10-6
計算時間比ode45短
ode23t
適度剛性
採用梯形演算法
適度剛性情形
ode15s
剛性
多步法;Gear’s反向數值微分;精度中等
若ode45失效時,可嘗試使用
ode23s
剛性
一步法;2階Rosebrock演算法;低精度
當精度較低時,計算時間比ode15s短
ode23tb
剛性
梯形演算法;低精度
當精度較低時,計算時間比ode15s短

4.在計算過程中,使用者可以對求解指令solver中的具體執行引數進行設定(如絕對誤差、相對誤差、步長等)。

表2-5  Solver中options的屬性

屬性名
取值
含義
AbsTol
有效值:正實數或向量
  
預設值:1e-6
絕對誤差對應於解向量中的所有元素;向量則分別對應於解向量中的每一分量
RelTol
有效值:正實數
  
預設值:1e-3
相對誤差對應於解向量中的所有元素。在每步(第k步)計算過程中,誤差估計為:
  
e(k)<=max(RelTol*abs(y(k)),AbsTol(k))
NormControl
有效值:on、off
  
預設值:off
為‘on’時,控制解向量範數的相對誤差,使每步計算中,滿足:norm(e)<=max(RelTol*norm(y),AbsTol)
Events
有效值:on、off
為‘on’時,返回相應的事件記錄
OutputFcn
有效值:odeplot、odephas2、odephas3、odeprint
  
預設值:odeplot
若無輸出參量,則solver將執行下面操作之一:
  
畫出解向量中各元素隨時間的變化;
  
畫出解向量中前兩個分量構成的相平面圖;
  
畫出解向量中前三個分量構成的三維相空間圖;
  
隨計算過程,顯示解向量
OutputSel
有效值:正整數向量
  
預設值:[]
若不使用預設設定,則OutputFcn所表現的是那些正整數指定的解向量中的分量的曲線或資料。若為預設值時,則預設地按上面情形進行操作
Refine
有效值:正整數k>1
  
預設值:k = 1
若k>1,則增加每個積分步中的資料點記錄,使解曲線更加的光滑
Jacobian
有效值:on、off
  
預設值:off
若為‘on’時,返回相應的ode函式的Jacobi矩陣
Jpattern
有效值:on、off
  
預設值:off
為‘on’時,返回相應的ode函式的稀疏Jacobi矩陣
Mass
有效值:none、M、
  
M(t)、M(t,y)
  
預設值:none
M:不隨時間變化的常數矩陣
  
M(t):隨時間變化的矩陣
  
M(t,y):隨時間、地點變化的矩陣
MaxStep
有效值:正實數
  
預設值:tspans/10
最大積分步長

例2-45  求解描述振盪器的經典的Ver der Pol微分方程file:///C:/Users/lx/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png

y(0)=1,y’(0)=0

令x1=y,x2=dy/dx,則

dx1/dt = x2

dx2/dt = μ(1-x2)-x1

編寫函式檔案verderpol.m:

function xprime = verderpol(t,x)

global MU

xprime = [x(2);MU*(1-x(1)^2)*x(2)-x(1)];

再在命令視窗中執行:

>>global MU

>>MU = 7;

>>Y0=[1;0]

>>[t,x] = ode45(‘verderpol’,0,40,Y0);

>>x1=x(:,1);x2=x(:,2);

>>plot(t,x1,t,x2)

圖形結果為圖2-20。


圖2-20  Ver der Pol微分方程圖
--------------------- 
作者:dengken145 
來源:CSDN 
原文:https://blog.csdn.net/dengken145/article/details/80113508 
版權宣告:本文為博主原創文章,轉載請附上博文連結!