複数の入力を使用して MATLAB でダフィング オシレーターを評価しようとしていますが、奇妙なエラーが発生します。
コードは次のとおりです。
% file duffing.m
function dy=duffing(t,y,a,b,d,g,w)
dy=[y(2); -a*y(1)^3-b*y(1)-d*y(2)+g*cos(w*t)];
end
ダフィング関数を呼び出すファイル:
t=0:0.01:100;
%duffing oscillator
y0=[2,0];
a=1;
b=-1;
d=0.2;
w=1;
g=0.1;
% duffing oscillator
[t,y]=ode45('duffing',t,y0,a,b,d,g,w);
実行すると、次のエラーが表示されます。
引数の使用エラー (92 行目) DUFFING は長さ 1 のベクトルを返しますが、初期条件ベクトルの長さは 2 です。DUFFING によって返されるベクトルと初期条件ベクトルは、同じ数の要素を持つ必要があります。
しかし、関数 duffing を次のように定義すると
function dy=duffing(t,y)
a=1;
b=-1;
d=0.2;
w=1;
dy=[y(2); -a*y(1)^3-b*y(1)-d*y(2)+g*cos(w*t)];
end
そして通過
[t y]=ode45('duffing',t,y0);
上記と同じでy0
、正常に動作し、プロットできます。
私は何を間違っていますか?