如何在MATLAB中重新启动for循环迭代?

时间:2018-10-30 12:37:14

标签: matlab for-loop

如果条件未分层,我试图强制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

3 个答案:

答案 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循环