虽然循环不保存结果

时间:2015-01-29 02:54:28

标签: matlab

我试图为随机数量的出现“y”做一段时间。但是,while循环不显示“结果”或在提示时显示任何内容。我只得到最初生成的随机数作为我的结果。我想在结果向量中添加第二列,显示循环条件下每个X值的计算,由于某种原因,第二列未保存。而我只是得到一个列向量“X”。

y = round(rand*10);

x = randi([-5,5],1,y);
X = x';
result=[X];

while isempty(result)==1
    disp('Nothing')

    if result > 2
        disp('A')
        result=[result,result+5];
    else
        disp('B')
        result=[result,result*0];
    end
end

1 个答案:

答案 0 :(得分:1)

您的代码无效的原因是由于您的while条件。具体来说,请查看while语句中的逻辑:

while isempty(result)==1

while循环只会在result为空时执行。情况并非如此,因为result = X位于代码的开头。因此,您的while循环永远不会执行。


根据您在下面的评论中的解释,您希望生成一个随机数,每次执行此操作时,您都要检查结果是否大于2。如果是,请将5添加到此元素,并将其作为元素添加到新列。如果没有,只需将其替换为0.

我建议您使用for循环而不是while循环,因为您可能希望矩阵在某个点之后停止增长。

因此,请做这样的事情:

y = round(rand*10);
result = [];
x = randi([-5,5],1,y);

for idx = 1 : y
    if x(idx) > 2
        result = [result [x(idx); x(idx)+5]];
    else
        result = [result [x(idx); 0]];
    end
end

您首先要做的是确定一个随机数,用于定义您想要生成的随机数的限制。然后我们声明一个存储结果的空数组。之后,我们生成随机数,然后我们使用for循环遍历x的每个元素,并检查它们的值是什么。如果值为> 2,那么我们将此数字添加到我们的2D矩阵中,其值将被添加5到新列。如果没有,我们只需将此值设置为0.

当我使用此操作时,这就是我为result所获得的:

result =

     5     2    -5     4     5
    10     0     0     9    10

但是,您可以轻松地执行此不带 for循环,并完全向量化。您只需将以上代码替换为:

y = round(rand*10);
x = randi([-5,5],1,y);

%// NEW
result = [x; zeros(1,y)];
ind = x > 2;
result(2,ind) = result(1,ind) + 5;

上面的代码所做的是我们已经将result初始化为2D数组,其中第一行包含随机生成的数字,第二行包含一堆零。我们搜索任意随机生成的> 2值,然后使用这些位置更新第二行,我们在这里获取满足此条件的值并为每个值添加5。然后,我们将结果存储在第二行。如果运行上面的代码,您应该能够产生相同的结果。