无限循环在Matlab中
问题描述:
我想在Matlab中编写一个脚本文件,它将绘制以特定角度(a),速度(v)和从初始高度(y0)抛出的球的轨迹。我有公式,并希望Matlab绘制飞行中的球的路径。但是,我希望它只能绘制它直到碰到地面(y = 0)。无限循环在Matlab中
要做到这一点,我用了一个while循环,但它似乎永远不会满足条件,只是永远运行。我确信这个条件可以在经过多次迭代之后得到满足,但它只会持续几分钟,怎么了?
代码如下。
% Trajectory Plotter with cutoff
clear all
close all
clc
y0 = input('Enter a value for y0 in meters: ');
if y0 < 0
disp('Please enter a positive value for y0')
end
a = input('Enter a value for theta in degrees: ');
g = 9.81;
v = input('Enter a value for initial velocity in m/s: ');
x = 0;
y = y0 + x*tand(a) - (g*x.^2)/(2*(v*cosd(a))^2)
while y >= 0
x = x+0.2
end
plot(x,y);
道歉,如果这是一个微不足道的问题,我是新来的Matlab /编程。
谢谢。
答
这是真的,你确实需要更新循环控制变量y
以及内while循环,但是这还不是全部这是不对劲与您的代码。
由于您要绘制轨迹,因此需要保留x
和y
的计算值;在这里他们只是被覆盖。
以下将实现你似乎什么需要:
% Trajectory Plotter with cutoff
clear all
close all
clc
y0 = input('Enter a value for y0 in meters: ');
if y0 < 0
disp('Please enter a positive value for y0')
end
a = input('Enter a value for theta in degrees: ');
g = 9.81;
v = input('Enter a value for initial velocity in m/s: ');
x = 0;
y = y0 + x*tand(a) - (g*x.^2)/(2*(v*cosd(a))^2);
X = x;
Y = y0;
while y >= 0
x = x+0.2;
y = y0 + x*tand(a) - (g*x.^2)/(2*(v*cosd(a))^2);
X = [X x];
Y = [Y y];
end
plot(X,Y,'--o');
这里,覆盖x
和y
之前,它们的值被附加到分别X
和Y
,并因此保存在这些变量。
答
确实,while
循环是问题所在。如果您的条件(在这种情况下为y >= 0
)不受循环执行的影响,那么条件的真值永远不会改变。这就像在墙上画画笔,并等待对面的墙上画...
现在,对于这个特定的问题,你可能想要更新y
的值,在更新x
的值:
while y >= 0
x = x+0.2;
y = y0 + x*tand(a) - (g*x.^2)/(2*(v*cosd(a))^2);
end
在你的while循环中,你只能改变x,你需要对y做些什么。 – 2013-04-21 15:38:04