0

以下のようにコードを実行すると、変数yが 2*2 から 4*1 に変わるのはなぜでしょうか?

function testforleader()   
    %tspan=[0 10];
    %y0=[[10 10];[3 3]];
    y = zeros(2)
    [t,y] = ode45('leadermove',[0 10],[10 10;3 3]);

function ydotr=leadermove(t,y)
    y
    ydotr = [y(2,:);[sin(t) cos(t)]];

コマンド ウィンドウのメッセージは次のように表示されます。

y =

 0     0
 0     0

y =

10
 3
10
 3

関数 ode45 は、変数の1 つの列ベクトルのみを受け取るようyです。

4

2 に答える 2

0

あなたのリーダームーブ機能は私にはうまくいかないので、これをテストすることはできません. ode45の 3 番目の引数はベクトルであるべきだと思うので、おそらく次のように変更します。

[t,y]=ode45('leadermove',[0 10],[10 10 3 3]);

それを修正します。また、マークが言うように、

y = zeros(2);

ode45 は出力を返すときにそれを上書きするため、何もしません。次の方法でこれを修正できる場合があります。

y = zeros(2);
[t,y(:)]=ode45('leadermove',[0 10],[10 10 3 3]);

しかし、それが機能するかどうかはわかりません。また、ode45 を呼び出す方法は、とにかく間違った答えを与えているのではないかと思います。

于 2012-04-10T09:58:00.367 に答える
0

への呼び出しにはrhsode45がありません:y

[t,y]=ode45('leadermove',[0 10],[10 10;3 3]);

しかし、lhsで。呼び出し前に存在する場合は、呼び出しによって上書きされます。おそらく、lhs の変数の名前を次のように変更する必要がありますyout

于 2012-04-10T09:50:56.587 に答える