所以我试图通过一个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);索引必须是正整数或逻辑。”我不明白究竟发生了什么才能实现这一目标。所以我的问题是为什么会发生这种情况,并且我有办法解决它,提前谢谢你。
答案 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