2015-04-04 124 views
0

我有如下的使用情況:如何通過ode45接受兩個參數的odefun?

裏面F.m我有一個函數F是作爲其參數一2 x 1矩陣xF需要將矩陣乘以kmat乘以xkmat是由腳本生成的變量。

所以,我所做的就是設置kmat是在腳本全球:

global kmat; 
kmat = rand(2); 

F.m

function result = F(x) 
    global kmat; 
    result = kmat*x; 
end 

於是最後,在腳本我有(x_0已經被定義作爲適當的2 x 1矩陣,並且tstarttend是正整數):

xs = ode45(F, [tstart, tend], x_0);

然而,這會導致錯誤:

Error using F (line 3) 
Not enough input arguments. 

Error in script (line 12) 
xs = ode45(F, [tstart, tend], x_0); 

這到底是怎麼回事,我能做些什麼來解決這個問題?或者,通過kmatF的正確方法是什麼?

回答

1

首先,處理kmat適當的方式是使它的輸入自變量F.m

function result = F(x,kmat) 
    result = kmat*x; 
end 

其次,輸入功能ode45必須與輸入tx(可能向量的函數,t是因變量和x是相關的)。由於您F功能沒有t作爲輸入參數,和你有一個額外的參數kmat,你必須做出當你調用ode45

ode45(@(t,x) F(x,kmat),[tstart tend],x_0) 

如果你的導函數是function result=derivative(t,x)小匿名函數,那麼你正如Erik所說的那樣,簡單地做ode45(@derivative,[tstart tend],x_0)