尝试在Matlab中绘制图形时出错
当我试图执行这段代码时,我采用了“数组索引必须是正整数或逻辑值。”错误尝试在Matlab中绘制图形时出错,matlab,graph,error-handling,Matlab,Graph,Error Handling,当我试图执行这段代码时,我采用了“数组索引必须是正整数或逻辑值。”错误 v(1)=0; g=9.81; m=68.1; c=12.5; t=0:0.5:8; for i=1:0.5:8 v(i+1)=v(i)+([g-((c/m)*v(i))].*(i+1-i)); end plot(t,v); xlabel('Time (s)'); ylabel('Velocity (m/s)'); 当MATLAB遇到v(1.5),其中v是一个向量(一个数组)时,我们希望它做什么?正如您刚刚发现的,M
v(1)=0;
g=9.81;
m=68.1;
c=12.5;
t=0:0.5:8;
for i=1:0.5:8
v(i+1)=v(i)+([g-((c/m)*v(i))].*(i+1-i));
end
plot(t,v);
xlabel('Time (s)');
ylabel('Velocity (m/s)');
当MATLAB遇到
v(1.5)
,其中v
是一个向量(一个数组)时,我们希望它做什么?正如您刚刚发现的,MATLAB要求数组索引始终为整数,从1开始(或逻辑数组,但这里不是这种情况),否则会抛出错误。你可以把这些索引看作是计算机内存中的离散位置,或者是一个巨大的梳妆台中的小抽屉(梳妆台如此巨大,以至于它有数百万个,不,数十亿个抽屉)。试图在两个抽屉之间的某处存放物品是没有任何意义的。如果有人命令你在现实生活中这样做,你会如何反应?好吧,现在你像MATLAB一样思考。因此,您应该能够意识到您的代码需要修改,以使其如下所示:
v(1)=0;
%[...]
t=0:0.5:8;
for i=2:17
v(i)=v(i-1)+([g-((c/m)*v(i-1))].*( 0.5*(i-1)+1-0.5*(i-1) ));
%was the `.*(i+1-i)' (i.e. the multiplicative identity) in the original code a typo?
end
注意,与原始程序不同,上面的代码还计算与t==0.5
相关的v