我试图为随机数量的出现“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
答案 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。然后,我们将结果存储在第二行。如果运行上面的代码,您应该能够产生相同的结果。