最速下降法 and 共軛梯度法

2021-05-26 00:56:58 字數 2113 閱讀 4673

註明:程式中呼叫的函式jintuifa.m golddiv.m我在之前的筆記中已貼出

最速下降法

%最速下降法求解f = 1/2*x1*x1+9/2*x2*x2的最小值,起始點為x0=[9 1]

%演算法根據最優化方法(天津大學出版社)97頁演算法3.2.1編寫

%v1.0 author: liuxi bit

%format long

syms  x1 x2 alpha;

f = 1/2*x1*x1+9/2*x2*x2;%要最小化的函式

df=jacobian(f,[x1 x2]);%函式f的偏導

epsilon=1e-6;%0.000001k=0;

x0=[9 1];%起始點

xk=x0;

gk=subs(df,[x1 x2],xk);%起始點的梯度

gk=double(gk);

while(norm(gk)>epsilon)%迭代終止條件||gk||<=epsilon

pk=-gk;%負梯度方向

f_alpha=subs(f,[x1 x2],xk+alpha*pk);%關於alpha的函式

[left right] = jintuifa(f_alpha,alpha);%進退法求下單峰區間

[best_alpha best_f_alpha]=golddiv(f_alpha,alpha,left,right);%**分割法求最優步長

xk=xk+best_alpha*pk;

k=k+1;

gk=subs(df,[x1 x2],xk);

gk=double(gk);

endbest_x=xk;%最優點

best_fx=subs(f,[x1 x2],best_x);%最優值

共軛梯度法

%共軛梯度法求解f = 3/2*x1*x1+1/2*x2*x2-x1*x2-2*x1的最小值,起始點為x0=[0 0]

%演算法根據最優化方法(天津大學出版社)111頁演算法3.4.2編寫

%v1.0 author: liuxi bit

%format long

syms  x1 x2 alpha;

f = 3/2*x1*x1+1/2*x2*x2-x1*x2-2*x1;%要最小化的函式

df=jacobian(f,[x1 x2]);%函式f的偏導

epsilon=1e-6;%0.000001

k=1;

x0=[0 0];%起始點

xk=x0;

gk=subs(df,[x1 x2],xk);%起始點的梯度

gk=double(gk);

while(norm(gk)>epsilon)%迭代終止條件||gk||<=epsilon

%*****====begin*****這段是與梯度向量法不同的地方***************==

if k==1

pk=-gk;%負梯度方向

else

beta=gk*gk'/(gk0*gk0');

pk=-gk+beta*pk0;%pk0代表p(k-1)

end 

%*****===end*****=這段是與梯度向量法不同的地方***************==

f_alpha=subs(f,[x1 x2],xk+alpha*pk);%關於alpha的函式

[left right] = jintuifa(f_alpha,alpha);%進退法求下單峰區間

[best_alpha best_f_alpha]=golddiv(f_alpha,alpha,left,right);%**分割法求最優步長

xk=xk+best_alpha*pk;

%*****====begin*****這段是與梯度向量法不同的地方***************==

gk0=gk;%gk0代表g(k-1)

pk0=pk;%pk0代表p(k-1)

% *****====end*****這段是與梯度向量法不同的地方***************==

gk=subs(df,[x1 x2],xk);

gk=double(gk);

k=k+1;

endbest_x=xk;%最優點

best_fx=subs(f,[x1 x2],best_x);%最優值

Matlab實現 最速下降法 共軛梯度法

盲人下山法 在山頂上,小盲人拿著小拐棍,先確定方向,再確定步長,尋找下山的最優辦法 即最短路徑 上圖偽碼來自某 數值線性代數 教科書,非原創 下述 是原創 最速下降法 function er,k fastdown a 定義最速下降法函式檔案 er 表示停機時實際絕對誤差 k 表示停機時實際迭代次數 ...

Python 共軛梯度法與最速下降法之間的比較

在一般問題的優化中,最速下降法和共軛梯度法都是非常有用的經典方法,但最速下降法往往以 之 字形下降,速度較慢,不能很快的達到最優值,共軛梯度法則優於最速下降法,在前面的某個文章中,我們給出了牛頓法和最速下降法的比較,牛頓法需要初值點在最優點附近,條件較為苛刻。我們選用了64維的二次函式來作為驗證函式...

最速下降法與Newton法

乙個簡單的最優化問題如下 在二維空間上尋找函式的最大值。一般我們常見的解析法,是求導,得極值點。這裡不再討論。很多情況下解析法很難求解,常會用到一種迭代慢慢逼近的方法,就是迭代法。如下圖。迭代法由乙個基本的可行點出發,依次產生乙個可行點列,x1,x2,xk,f xk 1 迭代法基本步驟如下 1.乙個...