求解高階微分方程


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;

結果圖展示

image-20200306224911284


免責聲明!

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



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