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

コード内に 2 回出現するコード スニペットがあるようです。これが繰り返しの意味であると仮定すると、このコードを含む関数またはスクリプトを定義し、コードをコピーペーストするのではなく、これを 2 回呼び出すことができます。この方法では、ある場所でコードを更新しても、別の場所では更新しないというリスクもありません。

入力引数と出力引数が限られている場合、通常は関数が優先されます。help function


while 1 ... break補足として、 aが本当に悪い習慣かどうかはわかりませんが、少なくとも異常だと思います。

于 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 に答える