为什么这个for循环给我一个错误?
所以我试图通过一个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);索引必须是正整数或逻辑”我不明白到底发生了什么。所以我的问题是为什么会发生这种情况,有没有办法解决这个问题,谢谢。
总之:
由于错误说,吨需要是一个整数或逻辑。
但是你的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
您使用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
。
我是否也可以使用向量来计算x的方程,就像您对h的方程所说的那样。并且使用t的矢量可以绘制点的图形吗?或者我仍然需要使用for循环来轻松绘制这些点? – Calzone 2014-10-10 04:30:34
您可以用同样的方式生成'x''',只需调用'plot(t,x)'或'plot(t,h)'就可以绘制它们。 – MrAzzaman 2014-10-10 04:32:10
如果你不介意我问最后一个问题,我想知道为什么在一个例子中, for i = 1:11; (i)=(i-1)*(2 * pi/10); ysin(i)= sin(x(i)); 结束; 我能够使用(我),但我不能为我的循环。那是因为在我的循环中t的数字是小数? – Calzone 2014-10-10 04:34:58
这不会起作用 - 你已经使用浮点值作为索引,每次循环迭代使用向量作为索引。 – MrAzzaman 2014-10-10 04:03:15