該命令中可以用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 (t = 0)= 1, y (t =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 |
非剛性 | 中 | 大多數情況下,您應當首先嘗試求解器 |
ode23 |
低 | 對於容差較寬松的問題或在剛度適中的情況下, |
|
ode113 |
低到高 | 對於具有嚴格誤差容限的問題或在 ODE 函數需要大量計算開銷的情況下, |
|
ode15s |
剛性 | 低到中 | 若 |
ode23s |
低 | 對於誤差容限較寬松的問題,
如果存在質量矩陣,則它必須為常量矩陣。 |
|
ode23t |
低 | 對於僅僅是剛度適中的問題,並且您需要沒有數值阻尼的解,請使用
|
|
ode23tb |
低 | 與 |
|
ode15i |
完全隱式 | 低 | 對於完全隱式問題 f(t,y,y’) = 0 和微分指數為 1 的微分代數方程 (DAE),請使用 |
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