[解決済み] Matlabによる最急降下法の実装
2022-02-08 06:30:55
質問
Matlabを使って最急降下法を実装し、2変数の関数でテストする必要があります。以下は私がこれまでに行ったことです.
x_0 = [0;1.5]; %Initial guess
alpha = 1.5; %Step size
iteration_max = 10000;
tolerance = 10e-10;
% Two anonymous function to compute 1st and 2nd entry of gradient
f = @(x,y) (cos(y) * exp(-(x-pi)^2 - (y-pi)^2) * (sin(x) - 2*cos(x)*(pi-x)));
g = @(x,y) (cos(x) * exp(-(x-pi)^2 - (y-pi)^2) * (sin(y) - 2*cos(y)*(pi-y)));
%Initiliazation
iter = 0;
grad = [1; 1]; %Gradient
while (norm(grad,2) >= tolerance)
grad(1,1) = f(x_0(1), x_0(2));
grad(2,1) = g(x_0(1), x_0(2));
x_new = x_0 - alpha * grad; %New solution
x_0 = x_new %Update old solution
iter = iter + 1;
if iter > iter_max
break
end
end
問題は、例えばWolframAlphaの結果と比べて、同じ値が得られないことです。この関数では、(3.14,3.14) か (1.3,1.3) のどちらかが得られるはずですが、 (0.03, 1.4) が得られています。
どのように解決するのですか?
この方法は局所探索であるため、初期推測とステップサイズによって局所最小に留まる可能性があることを知っておく必要があります。
-
初期推測が異なれば、異なるローカルミニマムを見つけることができます。
-
ステップサイズが大きいとアルゴリズムが収束しないので、ステップサイズは重要です。 ステップサイズが小さいと、アルゴリズムが非常に遅くなる。このため、関数の値が小さくなるにつれて、ステップの大きさを調整する必要があります。
最適化したい関数をプロットして理解することは、常に良いアイデアです(可能であれば)。今回扱う関数は次のようなものです(範囲は
[-pi pi]
):
を以下のパラメータ値で設定すると、探しているローカルミニマムに到達します。
x_0 = [2;2]; %Initial guess
alpha = 0.5; %Step size
関連
-
[解決済み】MATLABの&と&&の違いは何ですか?
-
[解決済み] 部分ピボットによるガウス消去の実装【終了しました
-
[解決済み] Matlabのstrcat関数が空白を含んでいる場合のトラブル
-
[解決済み] なぜSIFTはMatlabで利用できないのですか?
-
[解決済み] グラフと関係のないカスタム凡例を追加する
-
[解決済み] MATLABでベクトルの線形スパンを求める
-
[解決済み] Matlabで3角形の行列を作るループをベクトル化する
-
[解決済み] MATLABで音を止めるには?
-
[解決済み] Matlab の imrect を用いて,新しい矩形の座標を取得します.
-
[解決済み] RGBカラーによるMATLABプロット
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MATLABエラー "このコンテキストでは関数定義は許可されていません。" [重複しています]。
-
[解決済み] MATLABで「連結される配列の次元が一致しない」というエラーをデバッグする。
-
[解決済み] Matlabのリスト理解
-
[解決済み] Matlabのstrcat関数が空白を含んでいる場合のトラブル
-
[解決済み] Matlabでcorr2関数を説明する
-
[解決済み] パーフカーブで1つの値を返す - matlab
-
[解決済み] MATLABでマシンイプシロンを計算する方法は?
-
[解決済み] Matlabでファイル名を変更する - movefileがファイルの代わりにフォルダを作成する
-
[解決済み] mnrfitを用いたmatlabでのロジスティック回帰
-
[解決済み] MatlabのA=[x; y']は何を意味するのですか?