为什么这个for循环给我一个错误?

时间:2014-10-10 03:25:22

标签: matlab

所以我试图通过一个for循环,每次都会递增.1,直到另一个变量h小于或等于零为止。然后我想要沿着另一个变量x绘制这个h变量。我写的代码如下:

O = 20;

v = 200;

g = 32.2;

for t = 0:.1:12

   % Calculate the height

   h(t) = (v)*(t)*(sin(O))-(1/2)*(g)*(t^2);

   % Calculate the horizontal location

   x(t) = (v)*(t)*cos(O);

   if t > 0 && h <= 0
       break
   end

运行此代码时我遇到的错误说“尝试访问h(0);索引必须是正整数或逻辑。”我不明白究竟发生了什么才能实现这一目标。所以我的问题是为什么会发生这种情况,并且我有办法解决它,提前谢谢你。

2 个答案:

答案 0 :(得分:1)

您使用t作为循环变量以及索引变量。这不起作用,因为你会尝试访问h(0),h(0.1),h(0.2)等,这是没有意义的。如错误所示,您只能使用整数访问变量。您可以使用以下代码替换您的代码:

t = 0:0.1:12;

for i = 1:length(t)
    % use t(i) instead of t now
end

我还要指出,您不需要使用for循环来执行此操作。 MATLAB针对矩阵(和向量)进行了优化,通常在矢量化函数上运行得更快,而不是循环。例如,h的等式可以替换为以下内容:

O = 20;
v = 200;
g = 32.2;
t = 0:0.1:12;
h = v * t * sin(O) - 0.5 * g * t.^2;

唯一的区别是你必须使用元素方形(.^2)而不是普通方(^2)。这意味着MATLAB将向量t的每个元素求平方,而不是将向量t乘以它。

答案 1 :(得分:-1)

简而言之:

如错误所示,t必须是整数或逻辑。

但是你的t是t = 0:0.1:12,因此是十进制值。

O = 20;
v = 200;
g = 32.2;

for t = 0:.1:12

   % Calculate the height

   idx_t = 1:numel(t);

   h(idx_t) = (v)*(t)*(sin(O))-(1/2)*(g)*(t^2);

   % Calculate the horizontal location

   x(idx_t) = (v)*(t)*cos(O);

   if t > 0 && h <= 0
       break
   end
end

查看此问题的答案,了解更多选项:Subscript indices must either be real positive integers or logical error