一、寫在最前:
本教程只是簡單在應用層面說明一下相關算法,嚴謹的數學知識,請你們參考最下面參考書目,後期有精力會進行細化,先佔個坑,你們有問題能夠留言聯繫。html
二、基本知識:
泰勒展開式爲:git
\[\begin{aligned} f(x) &=\frac{1}{0 !} f\left(x_{0}\right) \\ &+\frac{1}{1 !}\left(x-x_{0}\right) f^{\prime}\left(x_{0}\right) \\ &+\frac{1}{2 !}\left(x-x_{0}\right)^{2} f^{\prime \prime}\left(x_{0}\right) \\ &+\cdots \\ &+\frac{1}{n !}\left(x-x_{0}\right)^{n} f^{(n)}\left(x_{0}\right) \\ &+R_{n} \end{aligned}\tag{1} \]
牛頓法的基本思想是,在極小點附件用二階 Taylor多項式:算法
\[\begin{aligned} f(x) &=\frac{1}{0 !} f\left(x_{0}\right) +\frac{1}{1 !}\left(x-x_{0}\right) f^{\prime}\left(x_{0}\right) +\frac{1}{2 !}\left(x-x_{0}\right)^{2} f^{\prime \prime}\left(x_{0}\right) \end{aligned} \tag{2} \]
近似目標函數\(f(x)\),進而求出極小點的估計值。函數
牛頓法實現的動圖以下所示:優化
爲了便於如下討論時符號的統一,重寫公式(2)以下所示:spa
\[\varphi(x)=f\left(x^{(k)}\right)+f^{\prime}\left(x^{(k)}\right)\left(x-x^{(k)}\right)+\frac{1}{2} f^{\prime \prime}\left(x^{(k)}\right)\left(x-x^{(k)}\right)^{2} \tag{3} \]
對(3)式求導:3d
\[\varphi^{\prime}(x)=f^{\prime}\left(x^{(k)}\right)+f^{\prime \prime}\left(x^{(k)}\right)\left(x-x^{(k)}\right)=0 \tag{4} \]
令(4)式爲0,既能夠獲得切線與\(x\)軸交點:調試
\[x^{(k+1)}=x^{(k)}-\frac{f^{\prime}\left(x^{(k)}\right)}{f^{\prime \prime}\left(x^{(k)}\right)} \]
由此能夠獲得一系類的\(x^{(k)}\),逐漸逼近真實最小值。htm
三、程序框圖:
![程序流程圖](http://static.javashuo.com/static/loading.gif)
四、算例:
求 \(\min \;f(x) = 4x_1^2 + x_2^2 - x_1^2{x_2}\)blog
初始點:\({x_A} = {(1,1)^T}\),
精度要求:\(\varepsilon = {10^{ - 3}}\)
\[\begin{array}{l}f(x) = 4x_1^2 + x_2^2 - x_1^2{x_2}\\\nabla f(x) = {\left( {8{x_1} - 2{x_1}{x_2},\;2{x_2} - x_1^2} \right)^T}\\{\nabla ^2}f(x) = \left( \begin{array}{l}8 - 2{x_2}\quad - 2{x_1}\\\; - 2{x_1}\quad \quad 2\end{array} \right)\end{array} \]
進行迭代計算:
![表格](http://static.javashuo.com/static/loading.gif)
五、Matlab求解(調試環境2016a):
如算例4要求所示:
求得:
\[\begin{array}{l}x = {[ - 0.1586 \times e - 4, - 0.1631 \times e - 4]^T}\\result = 1.2719e - 6\end{array} \]
結果與手算的吻合。
全套下載連接:包含文檔、PPT、Matlab源代碼等等:
https://gitee.com/a_moment_of_dodge/optimization_theory_matlab
六、優缺點:
優勢:
•Newton法產生的點列\(x^k\)若收斂,則收斂速度快,具備至少二階收斂速率
•Newton法具備二次終止性
缺點:
•可能會出如今某步迭代時,目標函數值上升
•當初始點遠離極小點時,牛頓法產生的點列可能不收斂,或者收斂到鞍點,或者Hesse矩陣不可逆,沒法計算
•須要計算Hesse矩陣的逆矩陣,計算量大
七、參考:
常見的幾種最優化方法(梯度降低法、牛頓法、擬牛頓法、共軛梯度法等)http://www.javashuo.com/article/p-wxhlukmx-n.html
最優化理論與算法(第二版) 陳寶林 編著