1. ホーム
  2. matlab

[解決済み】「Index exceeds the number of array elements (1)」というエラーを修正するにはどうすればよいですか?

2022-02-08 10:18:20

質問内容

私はMatlabの初心者で、ある微分方程式の解を近似するために修正オイラー法を適用するMatlab関数を作ろうと思っています。コマンドウィンドウでその関数を呼び出すと、以下のエラーが表示されます。

Index exceeds the number of array elements (1).
Error in modified_euler2 (line 10)
y(i+1)=y(i)+0.5*(k1(i)+k2(i));

このように、以下のような入力で関数を呼び出しています。 modified_euler2(60,1000,9.8,0.1125,1.125,25)

この関数の完全なコードは以下のとおりです。

function output = modified_euler2(T,n,g,C,K,L)
f = @(v,y) (g - C*abs(v)*v -max(0, K*(y - L))); 
 h = T / n; 
t = 0:h:T;        
y = zeros(1,n+1); 
v = zeros(1,n+1);
k1 = zeros(1,n+1); 
k2 = zeros(1,n+1);
 for i = 1:n+1
  y(i+1)=y(i)+0.5*(k1(i)+k2(i));
  k1 = h*f(v(i),y(i));
  k2=h*f(v(i)+h,y(i)+k1(i));

 end
 output = t,y,v,h
 figure
 plot(y)
end

このエラーを修正する方法について、何かアドバイスがあれば、ぜひお願いします。

解決方法は?

index exceeds the number of array elements"は、配列のインデックスをある数で指定していることを意味します。 n の要素を要求していますが m -番目の要素で、ここで m>n . つまり、ベクトルがあったとして

x = [2 4 6]

では x(1)=2 が、しかし x(6) は、例えば x は3つの要素しか持っていません。

あなたの場合,Matlabはエラーが発生した場所を正確に教えてくれています.

y(i+1)=y(i)+0.5*(k1(i)+k2(i))

ここでは、いくつかのインデックス操作を行っていますね( y(i+1) , y(i) , k1(i) および k2(i) ) があり、そのうちの1つ (またはそれ以上) がエラーの原因になっています。問題は,インデックスを作ろうとしている変数が1つの要素しか持っていない(Matlabはそれを教えてくれます)にもかかわらず,その変数に対して i -th (または i+1 -要素でなければできません。 i=1 .

ですから、どのインデックス作成操作が存在しない要素にアクセスしようとしているのかを特定する必要があります。