如果条件未分层,我试图强制for循环重新启动。因为我希望循环运行一定数量的迭代,所以我可以使用它。我试图在iter=iter-1
语句中设置if
,但是它不起作用。有什么建议吗?
R=2*10^3;
lamda= 0.00001;
h=100;
a = 9.6117;
b = 0.1581;
for iter=1:10
M=poissrnd(lamda*R^2);
xx=R*rand(1,M);
yy=R*rand(1,M);
zz=ones(1,M)*h;
BS=[xx' yy' zz'];
user=[0,0, 0];
s=pdist2(BS(:,1:2),user(1,1:2));
anga=atand(h./s);
PL=1./(1+(a*exp(b*(a-anga))));
berRV=binornd(1,PL);
if berRV(1)==1
% do something
else
% repeat
end
end
答案 0 :(得分:1)
您可以使用while循环来完成此操作,并与是否已确定所需结果的数量进行比较。请参阅有关保存找到的值的注释,因为您没有指定要满足搜索条件时需要执行的操作。
R=2*10^3;
lamda= 0.00001;
h=100;
a = 9.6117;
b = 0.1581;
total_results_found = 0;
needed_results_found = 10;
while total_results_found < needed_results_found
M=poissrnd(lamda*R^2);
xx=R*rand(1,M);
yy=R*rand(1,M);
zz=ones(1,M)*h;
BS=[xx' yy' zz'];
user=[0,0, 0];
s=pdist2(BS(:,1:2),user(1,1:2));
anga=atand(h./s);
PL=1./(1+(a*exp(b*(a-anga))));
berRV=binornd(1,PL);
if berRV(1)==1
% save the result here
% iterate the counter
total_results_found = total_results_found + 1;
end
end
答案 1 :(得分:1)
这里最简单的方法是在while
循环内使用for
循环:
for iter=1:10
berRV(1) = 0
while berRV(1)~=1
% original loop code here
end
% do something
end
[可悲的是,MATLAB没有do...while
循环,可以使上面的内容更简洁。]
答案 2 :(得分:1)
虽然其他两种解决方案都非常有效,但我想为您提供另一种解决方案,我认为这与您在问题中提供的逻辑最接近。
for iter=1:10
while 1
% loop code here
if berRV(1) == 1
break
end
end
end
这个想法类似于Cris提出的想法,即您重复for循环的主体直到满足某些条件。区别仅在于您如何终止while循环