我不是Matlab的新手,但我有一个非常奇怪的错误,我以前没有遇到过这种情况。我试图制作我的代码的简化版本来演示我得到的错误。基本上,我有索引错误,但正在访问的索引是一个正整数。
我想知道它是否与索引号的格式有关。无论如何,任何帮助或建议将不胜感激。
t=(0:0.00001:2*pi);
Cir(1,1:length(t)) = 0;
Cir(2,1:length(t)) = 0;
Cir(3,1:length(t)) = 0;
D0(1:length(t)) = 0;
% Search for the first minimum
[min1D0,t1Found] = min(abs(D0(1:length(t)/2)));
% Search for the second minimum
[min2D0,t2Found] = min(abs(D0(length(t)/2:length(t))));
t2Found = t2Found + length(t)./2; % Add tIndex/2 to correct the index
C1 = [Cir(1,t1Found),Cir(2,t1Found),Cir(3,t1Found)];
C2 = [Cir(1,t2Found),Cir(2,t2Found),Cir(3,t2Found)];
输出结果为:
Warning: Integer operands are required for colon operator when used as index
Warning: Integer operands are required for colon operator when used as index
??? Attempted to access Cir(1,314161); index must be a positive integer or logical.
注意:我使用的是R2009b。
答案 0 :(得分:2)
length(t)
是628319,这是一个奇数。
您正在尝试访问
DO(length(t)/2)
其中length(t)/2
是314159.5。
数组索引必须是整数,这就是你收到警告的原因。
同样的事情发生在t2Found
上。它不是整数。
t2Found = t2Found + length(t)./2;
结果为314160.5。
作为旁注,您可以使用zeros
函数进行预分配。
Cir = zeros(3, length(t));
会给你相同的结果。