0
k_1=100;

while (abs(k_1-k)>0.0001) 

k=k_1;
y_hat=x*b;
r=(y-y_hat);
s_squared=norm(r)/(n-p-1);

k_1=p*s_squared/(b'*b);
pseudo = sqrt(k_1) * eye(p);
x_ridge  = [x;pseudo];
y_ridge  = [y;zeros(p,1)];

b = x_ridge\y_ridge;


end

収束するまで k 値を反復しようとするコードがあります (つまり、後続の反復が特定の距離未満になるまで)。while ループは少なくとも 1 回実行する必要があります。最初の k_{t} 値はすでに計算されており、while ループの最初の繰り返しで最初の k_{t+1} が提供され、理論的には、これはwhile ループ。

上記のコードは機能しますが、非効率的です。だから私は本当にベストプラクティス/効率の向上を探しています。

現在、k は 1 行目の k_1 に設定されています。より多くの反復が必要な場合はこれで問題ありませんが、最初の k_1 が収束している場合、コードをこのように設定すると、保証されていない追加のループが必要になります。

理想的には、Matlab で設定されているため、while_do ではなく do_while である構造が必要です。そうすれば、初期 k_{t+1} が計算され、条件がテストされます。そのため、最初のループで収束している場合 (実際、多くのループが収束しているように見えます)、ループは 1 回だけになります。

これを回避するには、if 構造を使用して、収束基準が満たされている場合はブレークアウトするように指示し、それ以外の場合は k_t=k_{t+1} を設定します。しかし、これは実際には計算負荷を増加させる可能性があり、収束のテストがループごとに 2 回実行されることは言うまでもありません。

この状況で最適な matlab ソリューションは何ですか?

4

1 に答える 1