最近困惑我一週的高階微分方程求解,特意來總結一下,給有須要的同志們!spa
(特此說明,官網有紕漏, 存在問題, 須要修改, 我最後會說哪裏出問題了)code
全部 MATLAB ODE 求解器均可以解算 y′=f(t,y) 形式的方程組,或涉及質量矩陣 M(t,y)y′=f(t,y) 的問題。求解器都使用相似的語法。ode45
是一個通用型 ODE 求解器,是您解算大多數問題時的首選。可是,對於剛性問題或須要較高準確性的問題,其餘 ODE 求解器可能更適合。blog
求解幾乎能遇到的大多數微分方程, 一階,二階,三階甚至多階微分方程it
[t,y] = ode45(odefun,tspan,y0) [t,y] = ode45(odefun,tspan,y0,options) [t,y,te,ye,ie] = ode45(odefun,tspan,y0,options)
只知道語法遠遠不夠, 由於裏面各個項都不知道是什麼,先簡要介紹,下面給個demo:io
odefun就是使用代換法,將你高階方程轉化爲一階方程對應的函數;
tspan就是微分的解範圍, 儘可能縮小, 否則電腦要爆炸;function
y0是你能計算的方程解;class
MATLAB ODE 求解器僅可解算一階方程。您必須使用常規代換法,將高階 ODE 重寫爲等效的一階方程組語法
y1=y程序
y2=y′
y3=y′′
這些代換將生成一個包含 n 個一階方程的方程組
y′1=y2
y′2=y3
y′n=f(t,y1,y2,...,y**n*).
y′′′−y′′y+1=0.
使用代換法
y1=y
y2=y′
y3=y′′
生成等效的一階方程組
y′1=y2y′2=y3y′3=y1 y*3−1.
此方程組的代碼則爲
function dydt = f(t,y) dydt(1) = y(2); dydt(2) = y(3); dydt(3) = y(1)*y(3)-1;
上面demo這樣定義函數不能用; 正確作法你得先定義向量解, 畢竟高階方程化爲一階之後, 解應該是以向量的形式出現的; 因此, 這一步很是關鍵;
則以上方程組代碼應該修改成:
function dydt = f(t,y) dy = zeros(3,1); %記住這裏要添加哦; dydt(1) = y(2); dydt(2) = y(3); dydt(3) = y(1)*y(3)-1;
行吧, 其他的計算能夠去參考官網了, 能夠很方便的得到方程的各個解哦;
matlab真的是除了不能生孩子,啥都能幹;
ps: 吐槽一點,matlab太費電了。mac滿電正常續航六個小時以上,跑matlab這個程序半個多小時就會沒電, 因此你們仍是鏈接電源再去跑matlab;