在Matlab中无限循环

时间:2013-04-21 15:32:46

标签: matlab loops recursion while-loop infinite

我正在尝试在Matlab中编写一个脚本文件,用于绘制以特定角度(a),速度(v)和初始高度(y0)投掷的球的轨迹。我有这个等式,并希望Matlab绘制飞行中球的路径。但是,我希望它只绘制它直到撞到地面(y = 0)。

为了做到这一点,我使用了一个while循环,但它似乎永远不会满足条件,只是永远运行。我确信在x经过多次迭代后可以满足条件,但它只持续几分钟,出了什么问题?

代码如下。

    % 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 /编程的新手。

感谢。

2 个答案:

答案 0 :(得分:1)

确实,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  

答案 1 :(得分:0)

确实你确实需要在while循环中更新循环控制变量y,但这并不是你的代码所有的错误。

由于您正在寻找绘制轨迹,因此您需要保留xy计算的值;在这里,他们只是被覆盖了。

以下内容将实现您的需求:

% 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');

此处,在覆盖xy之前,它们的值会分别附加到XY,因此会保留在这些变量中。