2D関数の最小化のための最急降下アルゴリズムを実装しようとしています。例を挙げて説明しましょう。最急降下アルゴリズムを実装する関数を作成する
私は機能f1(x1,x2) = 2*x1^2 + x2^2 - 5*x1*x2
を持っており、最初の推測点p0 = [1,0]
で始まります。
ステップ1:初期推定点p0 = [1,0]
、収束パラメータe=0.1
ステップ2:p0
でf1
の勾配c1
を計算します。 c1=[4,-5]
私はそのために中央差分法を使用しています。
ステップ3:ノルムがc1>e
の場合はステップ4に進み、そうでない場合は停止します。
手順4:検索の方向はd1 = - c1
です。したがって、d1 = [-4,5]
。
ステップ5:検索のステップサイズa
f1(a) = f1(p0 + a*d1) = f1(1-4a,5a)
ステップ6最小限にする:p1
に更新p0
p1 = p0 + a * d1
として、私はMathWorks社のMATLABでこの例を実装しようとしていると知らない2.
をステップにしますどのように5ステップを実装する。私は二分法などの蟻1D検索アルゴリズムが動作することができます知っている。しかし、問題は 'f1(1-4a,5a)
'を関数に変換することです。つまり、(1-4a,5a)
をf1
に置き換えます。私はここで象徴的な定数a
に遭遇します。それはどう対処するのか分かりません。最小化関数を書くと値を渡すことができますが、記号変数a
についてはわかりません。シンボリックや一般的なレベルでのコードの維持など、MATLABの特別な機能を使いたくないので、問題なく他のプログラミング言語に変換することができます。あなたの提案は大歓迎です。
これまでのコードをお見せください。 –