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

조회 수: 10 (최근 30일)
KAITO NAKAJIMA
KAITO NAKAJIMA 2020년 10월 2일
댓글: KAITO NAKAJIMA 2020년 10월 12일
インデックスが配列要素数 (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

답변 (2개)

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

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

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!