2016-12-28 8 views
-2

は、私は、まさにこのエラーを得た:Matlabの2013aインデックスエラー

Attempted to access E(3,1); index must be a positive integer or logical. 

しかし、インデックスがE(3,1)あり、これらの数字はいずれも正です。何が起こっている? E(3,1)

for t=T:0.2:4 
    for i=1:N 
     % D = D +1 
     x = randi(Nsamples,1,1); 
     if(x==1) 
      Etemp = E(t*5,i) - S(x)*S(x+1) + (-S(x))*S(x+1); 
     elseif(x==Nsamples) 
      Etemp = E(t*5,i) - S(x)*S(x-1) + (-S(x))*S(x-1); 
     else 
      %********************* This is the error line 
      Etemp = E(t*5,i) - (S(x-1)*S(x)+S(x)*S(x+1))+ (S(x-1)*(-S(x))+(-S(x))*S(x+1)); 
     end 
    end 
end 
+3

't * 5'は整数ではありません。浮動小数点です。参照:[なぜ24.0000はMATLABの24.0000と等しくないのですか?](http://stackoverflow.com/questions/686439/why-is-24-0000-not-equal-to-24-0000-in-matlab) – excaza

+0

なぜt * 5 = 3(E(3,1))のときだけエラーが発生するのですか?値が2のときではなく(E(2,1))? – Bekromoularo

+0

それは偶然です。 – excaza

答えて

0

3指標は正確に整数でなくてもよいです。あなたの場合、t*5、すなわち0.6*5(t = 0.6の場合)を掛けてインデックスrow index 3が生成されます。整数であることを保証するものではありません。

生成されたインデックス値3の高精度チェックでは、それが最下位で正確な整数3から1ビットほどずれていることがわかります。

したがって、インデックス付けE(3,1)の間に、3は整数として認識されません。

小数点を掛けてインデックスを生成する場合は、round(t*0.5)int8(t*0.5)などのインデックス付けに使用する前に、必ずintに変換してください。

または、すべて一緒に小数点を掛けることによって生成されるインデックスを避けてください。

関連する問題