2013-04-09 124 views
0

我有一個ODE,y'=y^2+y;所以,我寫了一個腳本:解決在ODE45 -Matlab

[email protected](y)(y.^2+y); 
[x y]=ode45(foo,[1 4],1); 

但它返回以下錯誤:

Error using @(y)(y.^2+y) 
Too many input arguments. 

Error in odearguments (line 88) 
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} 
to yp0. 

Error in ode45 (line 114) 
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, 
odeArgs, odeFcn, ... 

我必須做出定義函數的一些錯誤。 我很欣賞任何意見和建議。

+0

頌歌求解器可以處理隨時間變化的系統。也就是說,導數是「t」和狀態「x」的函數。正如Eitan在下面所示,即使您的派生函數不使用它,您也必須**傳遞「t」參數! – Stuart 2013-04-09 15:58:05

+0

謝謝。我感謝你的幫助。 – user2178841 2013-04-09 17:13:20

回答

4

引述official documentation

All solvers solve systems of equations in the form y′ = f(t,y) or problems that involve a mass matrix, M(t,y)y′ = f(t,y).

你的函數只接受一個變量y,而它必須接受兩個:ty。所以,如果您的ODE是y′ = y2 + y,按以下方式確定foo

foo = @(t, y)(y .^ 2 + y); 

,它應該工作。