ODE45 求解高階微分方程
最近困惑我一周的高階微分方程求解,特地來總結一下,給有需要的同志們!
(特此說明,官網有紕漏, 存在問題, 需要修改, 我最后會說哪里出問題了)
ode45是什么
所有 MATLAB ODE 求解器都可以解算 y′=f(t,y) 形式的方程組,或涉及質量矩陣 M(t,y)y′=f(t,y) 的問題。求解器都使用類似的語法。ode45
是一個通用型 ODE 求解器,是您解算大多數問題時的首選。但是,對於剛性問題或需要較高准確性的問題,其他 ODE 求解器可能更適合。
ode45能干什么
求解幾乎能遇到的大多數微分方程, 一階,二階,三階甚至多階微分方程
ode45怎么用
語法
[t,y] = ode45(odefun,tspan,y0)
[t,y] = ode45(odefun,tspan,y0,options)
[t,y,te,ye,ie] = ode45(odefun,tspan,y0,options)
只知道語法遠遠不夠, 因為里面各個項都不知道是什么,先簡要介紹,下面給個demo:
odefun就是使用代換法,將你高階方程轉化為一階方程對應的函數;
tspan就是微分的解范圍, 盡量縮小, 不然電腦要爆炸;
y0是你能計算的方程解;
高階 ODE通用解法
MATLAB ODE 求解器僅可解算一階方程。您必須使用常規代換法,將高階 ODE 重寫為等效的一階方程組
y1=y
y2=y′
y3=y′′
這些代換將生成一個包含 n 個一階方程的方程組
y′1=y2
y′2=*y3 *
y′n=f(t,y1,y2,...,y**n*).
Demo1
考慮三階 ODE
y′′′−y′′y+1=0.
使用代換法
y1=y
y2=y′
y3=y′′
生成等效的一階方程組
y′1=y2y′2=y3y′3=y*1 y3−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;