解微分方程+ode求解器


 

該命令中可以用D表示微分符號,其中D2表示二階微分,D3表示三階微分,以此類推。

求精確解

1.微分方程

r=dsolve('eqn1','eqn2',...,'cond1','cond2',...,'var').

解釋如下:eqni表示第i個微分方程,condi表示第i個初始條件,var表示微分方程中的自變量,默認為t。

>> dsolve('Dy=3*x^2','y(0)=2','x')
 
ans = 

x^3 + 2

 2.微分方程組

>> [x,y]=dsolve('Dx=y','D2y-Dy=0','x(0)=2','y(0)=1','Dy(0)=1')
 
x =
 
exp(t) + 1
 
 
y =
 
exp(t)

3.求解微分方程組在初始條件x (= 0)= 1, y (=0 )= 0 下的特解,並畫出解函數的圖像。

>> [x,y]=dsolve('Dx+5*x+y=exp(t)','Dy-x-3*y=0','x(0)=1','y(0)=0','t')
 
x =
 
exp(t*(15^(1/2) - 1))*(15^(1/2) - 4)*((13*15^(1/2))/330 - exp(2*t - 15^(1/2)*t)*(15^(1/2)/165 + 1/22) + 1/22) - exp(-t*(15^(1/2) + 1))*(exp(2*t + 15^(1/2)*t)*(15^(1/2)/165 - 1/22) + (15^(1/2)*(15^(1/2) - 13))/330)*(15^(1/2) + 4)
 
 
y =
 
exp(-t*(15^(1/2) + 1))*(exp(2*t + 15^(1/2)*t)*(15^(1/2)/165 - 1/22) + (15^(1/2)*(15^(1/2) - 13))/330) + exp(t*(15^(1/2) - 1))*((13*15^(1/2))/330 - exp(2*t - 15^(1/2)*t)*(15^(1/2)/165 + 1/22) + 1/22)
 
>> ezplot(x,y)

 ezplot與plot的區別

plot(x,y)以x為橫坐標,y為縱坐標繪制曲線

plot(x,y1,x,y2,...)以x為橫坐標值,以y1,y2...元素為縱坐標值繪制多條曲線

plot中x,y的表達式是已知的或者是形如y=f(x)的表達式

而ezplot是畫出隱函數圖形,是形如f(x,y)=0這種不能寫出像y=f(x)這種函數的圖形,explot無需數據准備,直接畫出函數圖形

 

 

 

求近似解

ode求解器

求解器 問題類型 精度 何時使用
ode45 非剛性

大多數情況下,您應當首先嘗試求解器 ode45

ode23

對於容差較寬松的問題或在剛度適中的情況下,ode23 可能比 ode45 更加高效。

ode113 低到高

對於具有嚴格誤差容限的問題或在 ODE 函數需要大量計算開銷的情況下,ode113 可能比 ode45 更加高效。

ode15s 剛性 低到中

ode45 失敗或效率低下並且您懷疑面臨剛性問題,請嘗試 ode15s。此外,當解算微分代數方程 (DAE) 時,請使用 ode15s

ode23s

對於誤差容限較寬松的問題,ode23s 可能比 ode15s 更加高效。它可以解算一些剛性問題,而使用 ode15s 解算這些問題的效率不高。

ode23s 會在每一步計算 Jacobian,因此通過 odeset 提供 Jacobian 有利於最大限度地提高效率和精度。

如果存在質量矩陣,則它必須為常量矩陣。

ode23t

對於僅僅是剛度適中的問題,並且您需要沒有數值阻尼的解,請使用 ode23t。 

ode23t 可解算微分代數方程 (DAE)。

ode23tb

ode23s 一樣,對於誤差容限較寬松的問題,ode23tb 求解器可能比 ode15s 更加高效。

ode15i 完全隱式

對於完全隱式問題 f(t,y,y’) = 0 和微分指數為 1 的微分代數方程 (DAE),請使用 ode15i

 

 

 

1. 求解微分方程初值問題的數值解,求解范圍為區間 [0,0.5] 。

inline()通俗的來說就是用於定義函數,使用inline定義一個函數

給a,b,x賦值即可得到y

>> f=inline('a*x+b','a','b','x');
>> f(1,2,3)

ans =

     5

 

 求常微分方程的數值解,MATLAB的命令格式為:

[t,y]=solver('odefun',tspan,y0,options)

其中solver選擇ode45等函數名,odefun為根據待解方程或方程組編寫的m文件名,tspan為自變量的區間[t0,tf],即准備在那個區間上求解,y0表示初始值,options用於設定誤差限制。命令格式為:

options=odeset('reltol',rt,'abstol',at)

rt輸入相對誤差,at輸入絕對誤差。

 

參考:https://wenku.baidu.com/view/b4a6fecc6aec0975f46527d3240c844768eaa06f.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM