2014-10-10 153 views
1

所以我试图通过一个for循环,每次增加.1,直到另一个变量h小于或等于零。然后,我假设将这个h变量绘制在另一个变量x上。我写的代码如下所示:为什么这个for循环给我一个错误?

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);索引必须是正整数或逻辑”我不明白到底发生了什么。所以我的问题是为什么会发生这种情况,有没有办法解决这个问题,谢谢。

回答

-1

总之:

由于错误说,吨需要是一个整数或逻辑。

但是你的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

+0

这不会起作用 - 你已经使用浮点值作为索引,每次循环迭代使用向量作为索引。 – MrAzzaman 2014-10-10 04:03:15

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

+0

我是否也可以使用向量来计算x的方程,就像您对h的方程所说的那样。并且使用t的矢量可以绘制点的图形吗?或者我仍然需要使用for循环来轻松绘制这些点? – Calzone 2014-10-10 04:30:34

+0

您可以用同样的方式生成'x''',只需调用'plot(t,x)'或'plot(t,h)'就可以绘制它们。 – MrAzzaman 2014-10-10 04:32:10

+0

如果你不介意我问最后一个问题,我想知道为什么在一个例子中, for i = 1:11; (i)=(i-1)*(2 * pi/10); ysin(i)= sin(x(i)); 结束; 我能够使用(我),但我不能为我的循环。那是因为在我的循环中t的数字是小数? – Calzone 2014-10-10 04:34:58

相关问题