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 ソリューションは何ですか?