寫在最前:
在此只是簡單在應用層面說明一下相關算法,嚴謹的數學知識,請大家參考最下面參考書目,后期有精力會進行細化,先占個坑。
基礎知識:
通常所說的最速下降法均指歐氏度量意義下的最速下降法,最速下降法用於求解無約束的非線性規划問題,
求解的問題可以描述為:
\[\begin{array}{l} \begin{array}{*{20}{c}} {}&{} \end{array}\min \quad f(x)\\ \begin{array}{*{20}{c}} {}&{} \end{array}s.t.\quad \;x \in {R^n} \end{array} \]
其中函數\(f(x)\)具有一階連續偏導數。
\(s.t.\)表示是subject to的縮寫,即約束條件的意思。集合\(R^n\)表示的是\(n\)維歐式空間。
下降最快的方向為負梯度方向:
\[{d^{(k)}} = - \nabla f({x^{(k)}}){d^{(k)}} = - \nabla f({x^{(k)}}) \]
程序框圖:
對於具體的求解過程,我一般喜歡用程序框圖的方式來呈現:
例子:
這里給大家貼一個PPT上的手動求解的例子,通過手動求解的例子學習,有助於大家理解算法,進而去編程:
Matlab代碼求解:
這里首先要說的是程序的結構:
其中,main函數為主函數去執行求解
Min_TD為最速下降算法實現,若要修改求解的函數,只需要在main函數中修改一下具體求解的表達式部分即可,
需要的可以下載下來進行學習。
(對於新手再提醒一下,main和Min_TD一定要放在同一個目錄下才能正常執行哦!)
全套下載鏈接:包含文檔、PPT、Matlab源代碼等等:https://gitee.com/a_moment_of_dodge/optimization_theory_matlab
參考書目:
最優化理論與算法(第二版) 陳寶林 編著