インデックスが配列要素数 (1) を超えています。というエラーが出てしまう。

67 visualizaciones (últimos 30 días)
KAITO NAKAJIMA
KAITO NAKAJIMA el 2 de Oct. de 2020
Comentada: KAITO NAKAJIMA el 12 de Oct. de 2020
インデックスが配列要素数 (1) を超えています。というエラーが出てしまいます。ode45を用いた微分方程式についてのプログラムです。
コードは以下となります。
function du = arm(u,tau,f)
du = zeros(4,1);
du(1) = u(2);
du(2) = (tau-2*u(3)*u(1)*u(4)-9.8*0.5*cos(u(1))-9.8*u(3)*cos(u(1)))/(1+((u(3))^2));
du(3) = u(4);
du(4) = (f+u(3)*((u(2))^2)-9.8*sin(u(1)));
To=5;
for tau = taumin:tauh:taumax
for f = fmin:fh:fmax
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-4])
[t,u] = ode45(@arm,(0:h:To),[0;0;1;0],options);
X = (u(3)+1)*cos(u(1));
Y = (u(3)+1)*sin(u(1));
end
end

Respuestas (2)

Toshinobu Shintai
Toshinobu Shintai el 2 de Oct. de 2020
入力引数の"u"は、u(4)という記述があることから、少なくとも4要素以上の配列でなければなりません。
例えば、以下のように記述すると、「インデックスが配列要素数 (1) を超えています。」というエラーはなくなります。
a = arm([1; 1; 1; 1],1,1)

KAITO NAKAJIMA
KAITO NAKAJIMA el 3 de Oct. de 2020
回答ありがとうございます。具体的にどこにa = arm([1; 1; 1; 1],1,1)を加えるべきなのでしょうか。また、初期値はuの[0;0;1;0]で与えたいのですが、なぜ[1;1;1;1]としたのでしょうか。
  2 comentarios
Toshinobu Shintai
Toshinobu Shintai el 3 de Oct. de 2020
少しずれた回答をしておりまして申し訳ありません。添付のように「arm」関数の引数を設定する必要があります。ode45の引数は「test.m」内のような記述をする必要があります。
詳細については以下のドキュメントを参照してください。
KAITO NAKAJIMA
KAITO NAKAJIMA el 12 de Oct. de 2020
回答ありがとうございます。実行してみたのですがこれでもやはりエラーが出てしまいます。まずarm関数の引数のyとtをduの中に現れないことが原因だと思います。そして、なぜyを使わなければならないのかわかりません。yの初期値が全て0なのかも理解ができませんでした。

Iniciar sesión para comentar.

Categorías

Más información sobre プログラミング en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!