2014-01-20 28 views
0

當我試圖解決ODE系統中的兩個方程時,我遇到了一些困難MATLAB。嘗試在MATLAB中解決ODE系統時會產生以下錯誤:「未定義的函數'存在',用於'cell'類型的輸入參數」

我使用的代碼如下:

x0=-1;    %Initial condition for variable x 
y0=-10;    %Initial condition for variable y 
[email protected](t,x,y) y+2.*t; %First ODE 
[email protected](t,y) y;  %Second ODE 
f={dx;dy};   %Array that contains the first and second ODE's 

[t,g]=ode15s(f,[0 1],[x0 y0]); %Call for ode15s solver 

當我執行這個代碼,我得到以下錯誤:

Undefined function 'exist' for input arguments of type 'cell'.

我不希望創建的一個功能風格

function f=myodes(t,x,y) 
etc etc 
end 

因爲這段代碼是嵌套在一個函數代碼中,然後它將被嵌入在Simulink的MATLAB功能塊中,需要使用Simulink文件中其他塊的輸出作爲輸入。

我不能直接在Simulink上做它,因爲該代碼實際上是我需要解決的一組更大的方程的練習,其中自變量不是時間而是距離。

任何幫助,將不勝感激。

謝謝!

+1

什麼讓你覺得你不能使用你建議的形式的功能?看看[本地函數]上的文檔(http://www.mathworks.nl/help/matlab/matlab_prog/local-functions.html)。 –

+0

請注意,Simulink解決了系統在每個時間步所表示的微分方程,因此不需要(也不應該)調用'ode15s'並嘗試求解MATLAB函數塊中的微分方程。 – am304

+0

@Rody Oldenhuis:我看了一下MATLAB幫助的嵌套函數部分,但我相信這可以在不需要嵌套函數和更少代碼行的情況下完成。你的回答證明了我的觀點。 – elporsche

回答

1

z ≣ [x; y] 

這樣

dz ≣ [dx; dy] 

你會實現這個作爲

x0 = -1; %// Initial condition for variable x 
y0 = -10; %// Initial condition for variable y 

%// The ODEs. Note that z ≣ [x; y] 
f = @(t,z) [ 
    z(2)  %// First ODE 
    z(2)+2*t]; %// Second ODE 

%// Call for ode15s solver 
[t,g] = ode15s(f, [0 1], [x0 y0]) 

唯一剩下要做的就是正確的解複用輸出替換。

相關問題