2013-11-24 58 views
0

我有一個快速的問題,我希望有一個相當簡單的解決方案。我有一個函數,如下所示:Matlab的ode45不發送初始條件到函數

function [dx] = myFunction(x) 

x是用含有的結構的系統的(位置和動量)四個元素的列向量。我試圖用ode45幾個粒子在這個配置空間數值積分,就像這樣:

[Tout,Yout] = ode45(@(x,t)myFunction(x),[t0 tfinal],x0); 

每次我嘗試這個我失敗了,收到以下錯誤:

Index exceeds matrix dimensions 
Error in myFunction (line 9) 
x2 = x(2); 

ode45在流逝單個元素x=0分成myFunction,而不是myFunction期望的四個元素的向量。這是造成索引錯誤。爲什麼會發生這種情況,我該如何解決?這似乎是我沒有正確使用ode45

+0

你如何初始化變量'x0'? –

回答

0

ODE集成函數are of the form y' = f(t,y),即它們必須花費時間作爲它們的第一輸入參數並且狀態向量作爲它們的第二個(在ODE僅僅依賴於時間的情況下,可能省略狀態向量)。你沒有這樣做。你的myFunction只接受狀態向量作爲輸入。但是,您已經錯誤地定義了您的匿名功能,因此它正在及時傳遞xmyFunction。你需要扭轉tx

[Tout,Yout] = ode45(@(t,x)myFunction(x),[t0 tfinal],x0); 

希望這將解決一切。

+0

@JGSuw:你能夠讓你的代碼工作嗎?如果我的回答是幫助,請接受它。謝謝。 – horchler