1樓:江湖做任務
t>=0即可用ode45,它的物理意義類似時間,但也不侷限於時間。你的問題比較模糊。
滿意請採納。
matlab ode45用法
2樓:大野瘦子
用法:[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
3樓:機智的煎餅
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試試。
4樓:ieio啊
ode45表示採用四階-五階runge-kutta演算法,它用4階方法提供候選解,5階方法控制誤差,是一種自適應步長(變步長)的常微分方程數值解法,其整體截斷誤差為(δx)^5。解決的是nonstiff(非剛性)常微分方程。
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 結構體輸出結果
如何在function裡使用ode45輸出值
(1) 主程式 (test.m)
邊界值為 y(1/1.5)=alpha=0 y(1)=beta=0
用 shooting method 去解二階 ode 的邊界值問題,
解 ode 使用的指令為 ode45
(2)function (funtest1.m)
解4 條first-order initial value problems
但a 的值是要從判斷解出來的值運算後,是否有大於 1 來設定
h=0.25;
m=1.2;
si=((y/x)^2-y*y'/x+(y')^2)^0.5
if si>1
a=(si.^m-1)/(h*si)
elseif si<=1
a=0end
5樓:子衿悠你心
ode45可以用來解微分方程,基本用法如下:
一、常用格式:[t,y]=ode45(odefun,tspan,y0)
引數說明:
odefun:用以表示f(t,y)的函式控制代碼或inline函式,t是標量,y是標量或向量。
tspan:如果是二維向量[t0,tf],表示自變數初值t0和終值tf;如果是高維向量[t0,t1,…,tn],則表示輸出節點列向量。
y0:表示初始向量y0。
t:表示節點列向量(t0,t1,…,tn)t。
y: 表示數值解矩陣,每一列對應y的一個分量。
若無輸出引數,則作出圖形。
二、完整格式:[t,y]=ode45(odefun,tspan,y0,options,p1,p1,…)
options: 為計算引數(如精度要求)設定,預設可用空矩陣表示。
p1,p2,…: 為附加傳遞引數,這時的odefun表示f(t,y,p1,p2,…)。
注:ode45是最常用的求解微分方程的指令。它採用變步長
四、五階runge-kutta-felhberg法,適合高精度問題。
例項:拓展說明:
ode23 解非剛性微分方程,低精度,使用runge-kutta法的二三階演算法。
ode45 解非剛性微分方程,中等精度,使用runge-kutta法的四五階演算法。
ode113 解非剛性微分方程,變精度變階次adams-bashforth-moulton pece演算法。
ode23t 解中等剛性微分方程,使用自由內插法的梯形法則。
ode15s 解剛性微分方程,使用可變階次的數值微分(ndfs)演算法。
ode23s 解剛性微分方程,低階方法,使用修正的rosenbrock公式。
ode23tb 解剛性微分方程,低階方法,使用tr-bdf2方法,即runger-kutta公式的第一級採用梯形法則,第二級採用gear法。
6樓:匿名使用者
3.6.2 龍格- 庫塔方法
改進的尤拉法比尤拉法精度高的原因在於,它在確定平均斜率時,多取了一個點的斜
率值。這樣,如果我們在[xi,x(i+1)]上多取幾個點的斜率值,然後對它們作線性組合得到平均
斜率,則有可能構造出精度更高的計算方法。這就是龍格-庫塔法的基本思想。龍格-庫塔
法可看作是尤拉法思想的提高,屬於精度較高的單步法。
龍格-庫塔法是求解常微分方程初值問題的最重要的方法之一。matlab中提供了幾
個採用龍格-庫塔法來求解常微分方程的函式,即ode23,ode45,ode113 ,ode23s ,ode15s
等,其中最常用的函式是 ode23( 二三階龍格-庫塔函式)和ode45( 四五階龍格-庫塔函式),
下面分別對它們進行介紹。
1 .二三階龍格- 庫塔函式(ode23)
函式 ode23 的呼叫格式如下:
(1) [t,y]=ode23('f',tspan,y0) 輸入引數中的'f' 是一個字串,表示微分方程的形
式,也可以是 f (x , y )的m 檔案。tspan=[t0 tfinal]表示積分割槽間,y0表示初始條件。
函式 ode23 表示在初始條件 y0下從 t0到tfinal 對微分方程 '(,) yfty = 進行積分。函式
f(t, y) 必須返回一列向量,兩個輸出引數是列向量 t 與矩陣 y,其中向量 t 包含估計響應
的積分點,而矩陣 y 的行數與向量 t 的長度相等。向量 t 中的積分點不是等間距的,這是
為了保持所需的相對精度,而改變了積分演算法的步長。為了獲得在確定點t0,t1, "的解,
tspan=[t0 t1 tfinal] 。需要注意的是:tspan中的點必須是單調遞增或單調遞減的。
(2) [t,y]=ode23('f',tspan,y0,options) 其中,引數 options 為積分引數,它可由函
數odeset 來設定。options引數最常用的是相對誤差『reltol』( 預設值是 1e-3)和絕對誤差
『abstol』(預設值是 1e-6),其他引數同上。
(3) [t,y]=ode23('f',tspan,y0,options,p1,p2,…) 引數p1,p2, …可直接輸入到函式
f 中去.如 f(t,y,flag,p1,p2,…)。如果引數 options為空,則輸入 options=[ ]。也可
以在 ode檔案中(可參閱 odefile函式)指明引數 tspan、y0和options的值。如果參
數tspan 或y0 是空,則ode23函式通過呼叫ode檔案[tspan, y0, options] =
f([ ],[ ], 'init ')來獲得 ode23函式沒有被提供的自變數值。如果獲得的自變數表示空,則函
數ode23會忽略,此時為 ode23('f')。
(4) [t,y,te,ye,ie]=ode23('f',tspan,y0,options) 此時要求在引數 options 中的事
件屬性設為'on' ,ode檔案必須被標記,以便 p(t,y,'events') 能返回合適的資訊,詳細可參
閱函式 odefile。輸出引數中的 te是一個列向量,矩陣 ye的行與列向量 te中元素相
對應,向量 ie 表示解的索引。
2 .四五階龍格- 庫塔函式(ode45)
函式 ode45 的呼叫格式同 ode23 相同,其差別在於內部演算法不同。如果'f' 為向量函式,
則ode23 和ode45 也可用來解微分方程組。
【例3.47 】 分別用二三階龍格-庫塔法和四五階龍格-庫塔法解常微分方程的初值問題:
解:先將微分方程寫成自定義函式 exam2fun.m
function f=exam2fun (x,y)
f=-y-x*y.^2;
f=f(:);
然後在命令視窗輸入以下語句:
>> [x1,y1]=ode23('exam2fun',[0:0.1:1],1)
x1 =
0 0.1000
0.2000
0.3000
0.4000
0.5000
0.6000
0.7000
0.8000
0.9000
1.0000
y1 =
1.0000
0.9006
0.8046
0.7144
0.6314
0.5563
0.4892
0.4296
0.3772
0.3312
0.2910
>> [x2,y2]=ode45('exam2fun',[0:0.1:1],1)
x2 =
0 0.1000
0.2000
0.3000
0.4000
0.5000
0.6000
0.7000
0.8000
0.9000
1.0000
y2 =
1.0000
0.9006
0.8046
0.7144
0.6315
0.5563
0.4892
0.4296
0.3772
0.3312
0.2910
您好我在使用ode45時也出現了類似的警告請問
你計算的公式應該是變數不只一個,然後兩個變數的數值差的比較大,導致經過相同的時間,兩引數數值變化過大。比如說如下式子 dx t,x x 1 123 x 2 x 2 1234 x 1 a,x ode45 dx,0 36000 80 3000 x x end,t1 t v t 150000 v t 是計...
matlab怎麼畫複數函式,matlab 中複數如何表示?我i前面已經有 就是表示不出來 不知到為什麼
1 雙擊matlab軟體圖示,開啟matlab軟體,可以看到matlab軟體的介面。2 建立一個陣列u u 0 0.2 6 表示從0到6,每個0.2取一個數字。3 建立一個複數v,v 0.02 i。4 使用u和v建立一個複數函式z z exp v u 5 使用函式feather z 繪製複數函式的影...
MATLAB中datenum函式的問題
命令格式 datestr d,form 顯示序列數d表示的 form表示形式的日期。form引數從0 18,共19個整數,各代表0 dd mmm yyyy,1 dd mmm yyyy,2 mm dd yy 3 mmm 月的前三個字母 4 m 月的首寫字母 5 m 月的阿拉伯數字 6 mm dd,7 ...