Fletcher-Reevers Conjugate Descent和Steepest Descent两种算法中伪代码的区别
生活随笔
收集整理的這篇文章主要介紹了
Fletcher-Reevers Conjugate Descent和Steepest Descent两种算法中伪代码的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文主要用來比較兩個算法到底差別在哪里
| 1st1st1st | 選擇初始點x(1)選擇初始點x^{(1)}選擇初始點x(1), 設定?\epsilon?,k=1 | 選擇初始點x(1)選擇初始點x^{(1)}選擇初始點x(1), 設定?\epsilon?,k=1 |
| 2nd2_{nd}2nd? | 令g1=▽f(x(1))g_1=\triangledown f(x^{(1)})g1?=▽f(x(1)), 若g1<?g_1<\epsilong1?<?, 則x(1)x^{(1)}x(1)是所求極小值點; 否則,令d(1)=?g1d^{(1)}=-g_1d(1)=?g1?,計算λk\lambda_kλk?, 令x(2)=x(1)+λ1d(1)x^{(2)}=x^{(1)}+\lambda_1 d^{(1)}x(2)=x(1)+λ1?d(1) | 令g1=▽f(x(1))g_1=\triangledown f(x^{(1)})g1?=▽f(x(1)), 若g1<?g_1<\epsilong1?<?, 則x(1)x^{(1)}x(1)是所求極小值點; 否則,令d(1)=?g1d^{(1)}=-g_1d(1)=?g1?,計算λ1\lambda_1λ1?, 令x(2)=x(1)+λ1d(1)x^{(2)}=x^{(1)}+\lambda_1 d^{(1)}x(2)=x(1)+λ1?d(1) |
| 其中λk其中\lambda_k其中λk? | λk=?gkTd(k)d(k)TAd(k)\lambda_k=-\frac{g_k^Td^{(k)}}{d^{(k)^T}Ad^{(k)}}λk?=?d(k)TAd(k)gkT?d(k)? | λk=?gkTd(k)d(k)TAd(k)\lambda_k=-\frac{g_k^Td^{(k)}}{d^{(k)^T}Ad^{(k)}}λk?=?d(k)TAd(k)gkT?d(k)? |
| 3th3_{th}3th? | 令gk+1=▽f(x(k+1))令g_{k+1}=\triangledown f(x^{(k+1)})令gk+1?=▽f(x(k+1)), 若gk+1<?g_{k+1}<\epsilongk+1?<?, 則x(k+1)x^{(k+1)}x(k+1)是所求極小值點; 否則,令d(k+1)=?gk+1+βkd(k)d^{(k+1)}=-g_{k+1}+\beta_k d^{(k)}d(k+1)=?gk+1?+βk?d(k), k:=k+1 | 令gk+1=▽f(x(k+1))令g_{k+1}=\triangledown f(x^{(k+1)})令gk+1?=▽f(x(k+1)), 若gk+1<?g_{k+1}<\epsilongk+1?<?, 則x(k+1)x^{(k+1)}x(k+1)是所求極小值點; 否則,令d(k+1)=?gk+1d^{(k+1)}=-g_{k+1}d(k+1)=?gk+1?, k:=k+1 |
| 其中βk其中\beta_k其中βk? | βk=d(k)TAgk+1d(k)TAd(k)\beta_k=\frac{d^{(k)^T}Ag_{k+1}}{d^{(k)^T}Ad^{(k)}}βk?=d(k)TAd(k)d(k)TAgk+1?? | N/A |
| 4th4_{th}4th? | 令x(k+1)=x(k)+λkd(k)x^{(k+1)}=x^{(k)}+\lambda_k d^{(k)}x(k+1)=x(k)+λk?d(k),轉3th3_{th}3th? step | 令x(k+1)=x(k)+λkd(k)x^{(k+1)}=x^{(k)}+\lambda_k d^{(k)}x(k+1)=x(k)+λk?d(k),轉3th3_{th}3th? step |
可以看到,兩種算法的差別其實就是第3th步驟可以看到,兩種算法的差別其實就是第3_{th}步驟可以看到,兩種算法的差別其實就是第3th?步驟
steepest descent的算法示意圖如下:
Fletcher-Reevers Conjugate Descent的算法示意圖如下:
上圖中,注意基本概念:
梯度與等高線垂直;
兩次搜索方向是垂直的;
共軛梯度體現在βk\beta_kβk?的計算中,
谷底最低點不一定和x(3),x(2)x^{(3)},x^{(2)}x(3),x(2)共線.
############################################
另外注意[2]和[3]的βk\beta_kβk?略微有所不同.
Reference:
[1]最優化共軛梯度法-第十一頁
[2]最速下降法-第十八頁
[3]http://www.cs.cmu.edu/~pradeepr/convexopt/Lecture_Slides/conjugate_direction_methods.pdf
總結
以上是生活随笔為你收集整理的Fletcher-Reevers Conjugate Descent和Steepest Descent两种算法中伪代码的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最速下降法steepest descen
- 下一篇: scipy实现的共轭梯度法以及相关原理图