0

MATLAB で 2 つの方程式の ODE 系を解こうとすると、少し問題が発生します。

私が使用しているコードは次のとおりです。

x0=-1;              %Initial condition for variable x
y0=-10;             %Initial condition for variable y
dx=@(t,x,y) y+2.*t; %First ODE
dy=@(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

このコードを実行すると、次のエラーが発生します。

タイプ 'cell' の入力引数に対して未定義の関数 'exist' があります。

スタイルの関数を作成したくない

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

このコードは関数コードに入れ子にすることを意図しているため、Simulink ファイル内の他のブロックの出力を入力として使用する必要がある Simulink の MATLAB Function ブロックに挿入されます。

Simulink で直接実行することはできません。そのコードは、実際には、独立変数が時間ではなく距離である、解決する必要があるより大きな方程式のセットの練習であるためです。

どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

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])

残された唯一のことは、出力を適切に分離することです。

于 2014-01-20T15:11:28.150 に答える