你好,你在MATLAB程式中ode都有哪些?比如odeode23 ode45,各有什麼優缺點?適用範圍有哪些

2021-03-27 15:52:17 字數 5759 閱讀 5975

1樓:山水阿銳

您好,以下這張圖來自於matlab 技術論壇,這是一個非常有價值的**,裡面高手雲集,希望你可以進去看看,裡面有非常詳細的關於ode的介紹:

2樓:

之前給你的論壇裡面已經有寫啦。剛性方程是指一個微分方程,其數值分析的解只有在時間間隔很小時才會穩定,只要時間間隔略大,其解就會不穩定

matlab 程式中 ode 都有哪些? 比如ode15、ode23 ode45,各有什麼優缺點?適用範圍有哪些?

3樓:

這張圖來自於matlab 技術論壇,這是一個非常有價值的**,裡面高手雲集,希望你可以進去看看,裡面有非常詳細的關於ode的介紹

matlab ode45和ode23有什麼區別

4樓:

引用一下matlab論壇裡大神的回答:

總得來說:二者演算法相似,只不過ode45比ode23精度要高一點,其它沒什麼差別。

具體ode是matlab專門用於解微分方程的功能函式;solver有變步長(variable-step)和定步長(fixed-step)兩種型別,不同型別有著不同的求解器。ode45求解器屬於變步長的一種,採用runge-kutta演算法;和他採用相同演算法的變步長求解器還有ode23。ode45表示採用四階,五階runge-kutta單步演算法,截斷誤差為(δx)3。

解決的是nonstiff(非剛性)的常微分方程.是解決數值解問題的首選方法,若長時間沒結果,應該就是剛性的,換用ode23來解。

5樓:匿名使用者

ode23 是 bogacki 和 shampine 的顯式 runge-kutta (2,3) 對的實現。在容

差較寬鬆且剛度適中的情況下,它可能比 ode45 更加有效。ode23 是單步求解器,是求解非剛性微分方程的低階方法。(在數學中,剛性方程是指一個微分方程,其數值分析的解只有在時間間隔很小時才會穩定,只要時間間隔略大,其解就會不穩定。

目前很難去精確地去定義哪些微分方程是剛性方程,但是大體的想法是:這個方程的解包含有快速變化的部分。)

參考其中ode23和ode45的對比網頁連結

matlab ode45 與ode15s 有什麼區別 應該怎麼選擇?

6樓:匿名使用者

以下是我個人的一些理解,供參考:

matlab提供了7個常微分方程求解器(solver),分別是ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb,其中前3個適用於求解非剛性(nonstiff)問題,後4個適用於剛性問題。所謂剛性問題,簡單點說,就是系統包含多個相互作用但變化速度相差十分懸殊的子過程。

ode45基於顯式4-5階龍格庫塔公式,其演算法屬於單步法;ode15s是一個變階求解器,用的是多步法。

對於很多問題,這些求解器都是可以使用的,儘管可能存在一些效率和精度方面的差異。

但是,這些求解器並不是可以互相取代的,它們分別適用於不同的精度要求和問題的型別。也就是說,沒有任何一個求解器在任何情況下都優於或劣於其它求解器。否則,matlab也沒必要提供這麼多求解器。

要徹底搞清楚這些求解器的差別和適用範圍是有一定難度的,需要對其背後的演算法有一定了解才行。matlab在函式參考裡對演算法做了簡要的說明,並給出了多個參考文獻,如果有興趣,可以進一步查閱。

如果對於問題的性質比較清楚,也知道什麼演算法可能比較有效,可以直接選擇適當的求解器。在沒有對於問題是否剛性的先驗知識的條件下,根據matlab的建議,ode45是大多數情況下應該嘗試的首選,如果ode45求解失敗或效率很低,次選就是ode15s。

7樓:地表最帥

matlab提供了7個常微分方程求解器(solver),分別是ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb,其中前3個適用於求解非剛性(nonstiff)問題,後4個適用於剛性問題。所謂剛性問題,簡單點說,就是系統包含多個相互作用但變化速度相差十分懸殊的子過程。

這些求解器並不是可以互相取代的,它們分別適用於不同的精度要求和問題的型別。也就是說,沒有任何一個求解器在任何情況下都優於或劣於其它求解器。否則,matlab也沒必要提供這麼多求解器。

要徹底搞清楚這些求解器的差別和適用範圍是有一定難度的,需要對其背後的演算法有一定了解才行。matlab在函式參考裡對演算法做了簡要的說明,並給出了多個參考文獻,如果有興趣,可以進一步查閱。

如果對於問題的性質比較清楚,也知道什麼演算法可能比較有效,可以直接選擇適當的求解器。在沒有對於問題是否剛性的先驗知識的條件下,根據matlab的建議,ode45是大多數情況下應該嘗試的首選,如果ode45求解失敗或效率很低,次選就是ode15s。

matlab中ode23是什麼意思?

8樓:唯我最逍遙

算微分方程的

有ode23、ode45等等好多種

都是 龍格-庫塔 方法但是ode45個精確一些用法例如

[t,y] = ode23(@f,[0 2*pi],2)第一引數是迭代函式

第二個引數是t的取值範圍

第三個引數是y的初值

9樓:匿名使用者

ode23 解非剛性微分方程,低精度,使用runge-kutta法的二三階演算法。

ode45 解非剛性微分方程,中等精度,使用runge-kutta法的四五階演算法。

ode113 解非剛性微分方程,變精度變階次adams-bashforth-moulton pece演算法。

ode23t 解中等剛性微分方程,使用自由內插法的梯形法則。

ode15s 解剛性微分方程,使用可變階次的數值微分(ndfs)演算法。

ode23s 解剛性微分方程,低階方法,使用修正的rosenbrock公式。

ode23tb 解剛性微分方程,低階方法,使用tr-bdf2方法,即runger-kutta公式的第一級採用梯形法則,第二級採用gear法。

10樓:飲水蒹葭

一種定步長的微分方程解法

11樓:百度使用者

微分方程解法器的一種,使用runge-kutta演算法

matlab中ode45,4和5分別代表什麼?

12樓:匿名使用者

matlab中求微分方

程數值解的函式有五個:ode45,ode23,ode113,ode15s,ode23s。

ode是matlab專門用於解微分方程的功能函式,他有ode23,ode45,ode23s等等,採用的是runge-kutta演算法。ode45表示採用四階,五階runge-kutta單步演算法,截斷誤差為(δx)3。解決的是nonstiff(非剛性)的常微分方程.

是解決數值解問題的首選方法,若長時間沒結果,應該就是剛性的,換用ode23來解.

matlab/simulink中,什麼叫oder45和ode23bt演算法?

13樓:匿名使用者

ode45是基於

四點法和五點法的解微分方程數值解的方法,ode23等也一樣,都是基於已知點「**」下一個點的函式值的方法,不同的演算法「**」的方法不一樣。比較著名的「**」方法有尤拉法,改進的尤拉法,龍格庫塔法,多點法等。在matlab一般使用中這些方法的差別不大,可以不予理會,會用一個即可,推薦ode4。

14樓:matlab課設**

ode45,典型的解微分方程的演算法。matlab自帶的。專門解微分方程的。ode32bt也類似,只是各自針對的微分方程型別略有不同。還有ode15s ,ode23s等等

matlab ode45用法

15樓:大野瘦子

用法:[t,y] = ode45(odefun,tspan,y0)1、odefun 是函式

控制代碼,可以是函式檔名,匿名函式控制代碼或行內函數名。

2、tspan是區間 [t0 tf] 或者一系列散點[t0,t1,...,tf]。

3、y0是初始值向量。

4、t返回列向量的時間點。

5、y返回對應t的求解列向量。

算例程式:

function testode45

tspan=[3.9 4.0]; %求解區間y0=[8 2]; %初值

[t,x]=ode45(@odefun,tspan,y0);

plot(t,x(:,1),'-o',t,x(:,2),'-*')legend('y1','y2')

title('y'' ''=-t*y + e^t*y'' +3sin2t')

xlabel('t')

ylabel('y')

function y=odefun(t,x)y=zeros(2,1); % 列向量

y(1)=x(2);

y(2)=-t*x(1)+exp(t)*x(2)+3*sin(2*t); %常微分方程公式

endend

16樓:機智的煎餅

ode45,常微分方程的數值求解。matlab提供了求常微分方程數值解的函式。當難以求得微分方程的解析解時,可以求其數值解。matlab ode45用法如下:

[t,y] = ode45(odefun,tspan,y0)

[t,y] = ode45(odefun,tspan,y0,options)

[t,y,te,ye,ie] = ode45(odefun,tspan,y0,options)

sol = ode45(odefun,[t0tf],y0...)

[t,y] = ode45(odefun,tspan,y0)

odefun 是函式控制代碼,可以是函式檔名,匿名函式控制代碼或行內函數名

tspan 是區間 [t0 tf] 或者一系列散點[t0,t1,...,tf]

y0 是初始值向量

t 返回列向量的時間點

y 返回對應t的求解列向量

[t,y] = ode45(odefun,tspan,y0,options)

options 是求解引數設定,可以用odeset在計算前設定誤差,輸出引數,事件等

[t,y,te,ye,ie] =ode45(odefun,tspan,y0,options)

在設定了事件引數後的對應輸出

te 事件發生時間

ye 事件發生時之答案

ie 事件函式消失時之指標i

sol =ode45(odefun,[t0 tf],y0...)

sol 結構體輸出結果

ode的作用

ode是matlab專門用於解微分方程的功能函式。該求解器有變步長(variable-step)和定步長(fixed-step)兩種型別。

不同型別有著不同的求解器,其中ode45求解器屬於變步長的一種,採用runge-kutta演算法;其他採用相同演算法的變步長求解器還有ode23。

ode45表示採用四階-五階runge-kutta演算法,它用4階方法提供候選解,5階方法控制誤差,是一種自適應步長(變步長)的常微分方程數值解法,其整體截斷誤差為(δx)^5。

解決的是nonstiff(非剛性)常微分方程。ode45是解決數值解問題的首選方法,若長時間沒結果,應該就是剛性的,可換用ode15s試試。

在matlab中polyintA,C引數為什麼

可以用polyder p 求導,可以用polyint p 求積分,可以用polyint p,n 求n次積分。大家好!matlab中函式polyder 又是幹什麼用的?謝謝!該函式用於求特徵多項式 poly a 當a是一個n n矩陣式,poly a 命令求出a的特徵多項式det lambda eye ...

請問,在MATLAB中,有一條程式語句寫著是a 1,1257 0表示的是什麼意思呢?MATLAB裡面區分大小寫的

a 1,1257 0 表示a矩陣中第1行第1257列元素賦值為0 a 0 1 這個在matlab裡面是什麼意思 b end 表示矩陣b的最後一列,所以這句命令的意思就是把向量a中與b矩陣最後一列元素等於零的相同位置元素置為1 表明事件 將0賦值給元素a 為真 matlab中x ones 1,n 以及...

在MATLAB環境下設計帶阻濾波器的程式除錯問題

1 4.設計一巴特沃斯帶阻數字濾波器,要求通帶上下截至頻率為0.8 pi 0.2 pi,通帶衰減不大於1db,阻帶上下截至頻率0.7 pi 0.4 pi 阻帶衰減不小於30db,wp1 0.8 pi wp2 0.2 pi ws1 0.7 pi ws2 0.4 pi ap 0.5 as 40 fs 1...