2010-03-30 47 views
4

我正在使用Matlab來求解一個微分方程。我想迫使ode45採取恆定的步驟,所以在解決方程時,它總是在T軸上增加0.01。我該怎麼做呢?如何強制ode45在T軸上精確地採取0.01的步驟?

ode45一直在採取優化的隨機步驟,而我似乎無法弄清楚如何使它保持0.01的一致的小步驟。下面是代碼:基於the documentation for the ode functions

options= odeset('Reltol',0.001,'Stats','on'); 

%figure(1); 
%clf; 
init=[xo yo zo]'; 
tspan=[to tf]; 
%tspan = t0:0.01:tf; 

[T,Y]=ode45(name,tspan,init,options); 

回答

11

,你應該能夠做你的註釋掉的行均表示:

tspan = to:0.01:tf; %# Obtain solutions at specific times 
[T,Y] = ode45(name,tspan,init,options); 

編輯:

對於到使用固定步長時的解決方案的準確性,請參考以上鍊接的摘錄:

指定tspan具有多於兩個 元件不影響內部 時間步長,該解算器使用到 橫向間隔從tspan(1)tspan(end)。 ODE 套件中的所有求解器通過 連續擴展的基本公式獲得輸出值。雖然求解器不 必要精確步驟在tspan指定 點的時間,在指定的 時間點產生的 解決方案是 精度在 計算的內部時間點的解相同的量級。

所以,即使您指定要在特定時間點的解決方案,該解決者仍在內部採取了一些適應性的步驟,你表示,即將接近值在這些時間點之間固定的時間點。

+0

你說得對,該文檔確實表明,可以指定每個值,即使我的文章鏈接表明,它不能。不幸的是,由於我離開大學網絡(和許可證服務器!),我目前無法打開我的解釋器來嘗試此操作 – Brendan 2010-03-30 23:21:26

+0

@Brenden:您鏈接到的文檔實際上並不表示您不能ODE45在特定時間點返回解決方案的值。請注意我從文檔中添加的其他信息。 – gnovice 2010-03-30 23:47:48

5

ode45總是採用自適應步長,the documentation addresses this issue並建議其他求解器代替固定步長 - 見ode4(四階龍格 - 庫塔),其是用於解決大多數賦一個相當安全的賭注 - 至少根據數字食譜

4

這可以完成只需要使用一些更多的命令。

新:

options= odeset('Reltol',0.001,'Stats','on'); 

%figure(1); 
%clf; 
init=[xo yo zo]'; 
to=some number; 
tf= some number; 
nsteps= number of points you want function evaluated on. 
tspan = linspace(t0,tf, nsteps); 

[T,Y]=ode45(@function,tspan,init,options); 

你可以驗證它把你想要使用命令大小(變量)的點數。

1

您的腳本不會指示固定步長,它只會顯示將根據所提供的時間步驟打印解決方案。嘗試檢查ODE的解決方案結構,您會發現實際上它使用不同的時間步。

讓它使用固定時間步的最好方法是確保RelTol和AbsTol都足夠大。

2

嗯,你不能確保它只會計算這些步驟,但你可以確保最大的步長(如果你做得足夠小,你幾乎可以確定你有所有期望的時間,只取這些樣本):

options= odeset('MaxStep',1); 
[t,s] = ode45(@myode,tspan,[0;0],options); 

知道更多,你可以去here

1

ODE45(說四種五不四十五)計算最佳步長,甚至可以追溯到中如果誤差大時,查龍 - 如果你有興趣作爲用戶,您不會注意到這一點,因爲ODE的輸出將被內插,因此適合tspan向量。所以,如果你將tspan設置爲0:1E-5:1,並且你想集成一個簡單的ODE,比如dydt = -y ODE45將會做出幾步,但是你得到的vektor將會在tspan中聲明的時間步中即1E-5。如果你想整合剛性方程dydt = 1E2 *(1-y)* y ODE45會做出很大很小的步驟,但輸出將是相同的,因爲以後你應該使用ode15s,因爲ODE45不能處理僵硬的系統。

希望這有助於

歡呼 馬爾科

+0

歡迎來到Stack Overflow。請閱讀[堆棧溢出:如何回答](http://stackoverflow.com/questions/how-to-answer) – 2014-07-04 11:28:21

+0

好的答案。謝謝(你的)信息! – Contango 2014-07-07 04:47:55

相關問題