0

给定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

任何帮助表示赞赏。

4

2 回答 2

1

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

当输入和输出参数有限时,通常首选函数,检查help function


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

于 2013-02-05T08:58:42.933 回答
0

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

您可以通过在条件下定义它来在循环本身内添加 Dij 更新if

所以而不是

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);
于 2013-02-05T11:35:58.683 回答