求解高階微分方程

ODE45 求解高階微分方程

最近困惑我一週的高階微分方程求解,特意來總結一下,給有須要的同志們!spa

(特此說明,官網有紕漏, 存在問題, 須要修改, 我最後會說哪裏出問題了)code

ode45是什麼

​ 全部 MATLAB ODE 求解器均可以解算 y′=f(t,y) 形式的方程組,或涉及質量矩陣 M(t,y)y′=f(t,y) 的問題。求解器都使用相似的語法。ode45 是一個通用型 ODE 求解器,是您解算大多數問題時的首選。可是,對於剛性問題或須要較高準確性的問題,其餘 ODE 求解器可能更適合。blog

ode45能幹什麼

​ 求解幾乎能遇到的大多數微分方程, 一階,二階,三階甚至多階微分方程it

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:io

odefun就是使用代換法,將你高階方程轉化爲一階方程對應的函數;
tspan就是微分的解範圍, 儘可能縮小, 否則電腦要爆炸;function

y0是你能計算的方程解;class

高階 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=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;

結果圖展現

image-20200306224911284

相關文章
相關標籤/搜索