如何在matlab中重复循环

时间:2013-02-04 23:17:16

标签: matlab

给定的for loop计算新的转换矩阵。我正在尝试

我想巧妙地重复给定的循环,但是它一次又一次地复制/粘贴循环是可疑的。请帮忙。

 %% generate some weights vector i.e. the probability matrix
 Transition = 
[              
               0.06    0.47   0      0.47   0      0      0;
               0.47    0.06   0.47   0      0      0      0;
               0       0.47   0.06   0.47   0      0      0;
               0.47    0      0.47   0.037  0.023  0      0;
               0       0      0      0.023  0.037  0.47   0.47;
               0       0      0      0      0.47   0.06   0.47;
               0       0      0      0      0.47   0.47   0.06
];

tolerance= 0.01

Dij= Transition;
len=length(Transition);
enter code here

%% copying the status
for i=1:7 

    while(1)
        sel=randi(7);
        if((Dij(i,sel) ~= 0))
            show(i)=sel;
            break;
        end
    end

    Dij(i,sel)=Dij(i,sel)-tolerance*(i ~= sel);
    for i=1:7
     while(1)
        sel=randi(7);
        if((NewDij(i,sel) ~= 0))
            show(i)=sel;
            break;
        end
    end

    NewDij(i,sel)=NewDij(i,sel)-tolerance*(i ~= sel);
    newnew=NewDij;
end

 for i=1:7
     while(1)
        sel=randi(7);
        if((newnew(i,sel) ~= 0))
            show(i)=sel;
            break;
        end
    end

    newnew(i,sel)=NewDij(i,sel)-tolerance*(i ~= sel);

end

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我看到你的代码片段中出现了两次代码片段。 假设这是重复的意思,您可以定义包含此代码的函数或脚本,然后调用它两次而不是复制代码。这样,也不存在在一个位置更新代码而在第二个位置更新代码的风险。

如果输入和输出参数有限,通常首选函数,请检查help function


作为旁注,我不知道while 1 ... break是否真的是不好的做法,但我认为这至少是不寻常的。

答案 1 :(得分:0)

首先,您是否有任何终止条件:何时停止更新Dij。

您可以通过在if条件下定义Dij更新,在循环内添加Dij更新。

所以而不是

if((Dij(i,sel) ~= 0))
    show(i)=sel;
    break;

你可以写

if((Dij(i,sel) ~= 0))
    show(i)=sel;
    Dij(i,sel)=Dij(i,sel)-tolerance*(i ~= sel);