2017-06-08 4 views
0

私は方程式Y = DXを持っています。 Yはn×k、Dはn×m、Xはm×kである。各反復では、私はYの列を使用し、アルゴリズムの実行とDのいくつかの列が更新されます。反復1アルゴリズムではYの列1が使用され、辞書は更新され、反復2ではYの列2が使用されます。whileループの収束基準

各反復Dが更新されたとき、アルゴリズムk回実行する必要がない基準[(norm(D-D1)、 'fro')^ 2 < 0.0001]を使用します。 Dは更新される現在の辞書を意味し、D1は以前の反復で更新された辞書を意味する。

D1=D1+0.05*randn(n,m); % initializing D1 for first iteration to calculate d 
d=D-D1; 
delta= norm(d,'fro')^2; 
k1=0; 

while delta>0.0001 
    D1=D; 

    for i=1:k 
    Y(:,i) = .. 
    ... 
    algorithm 
     ... 
    end 
    d=D-D1; 
    delta= norm(d,'fro')^2; 
end 

私はこの形でそれを書くが、それはk回反復し、それ以来、正しくありませんが、私は収束基準を満たすjの< k回反復します。

あなたの注意に感謝します

+0

私はそのアルゴリズムは、別の方法として、K – Masoud

答えて

0

これはあなたが探しているものですか?コンバージェンスが達成されると、ループを終了したいと思っています。コンバージェンスが達成されれば、あなたはただ戻ります。

for i=1:k 
    D1=D; 
    Y(:,i) = .. 
    ... 
    algorithm 
    ... 
    d=D-D1; 
    delta= norm(d,'fro')^2; 
    if delta>.0001 
     return 
    end 
end 
+0

よりも少ないJ(不明)の反復を実行し、あなたは 'for'後にいくつかのコードを実行できるようにする代わりにreturn''の 'break'使用することができ、私は意味私の文章を修正ループ。 – m7913d

関連する問題