問題:編寫fr共軛梯度法用於求解min x2
1−x1
x2+x
22+2
x1−4
x2初始點取為 x0
=(2,
2)t
frcg.m
function
[x,val,k]=frcg
(fun,funs,x0)
% 功能: 用fr共軛梯度法求解無約束問題: min f(x)
%輸入: x0是初始點, fun, gfun分別是目標函式和梯度
%輸出: x, val分別是近似最優點和最優值, k是迭代次數.
maxk=5000; %最大迭代次數
rho=0.6;sigma=0.4;
k=0; epsilon=1e-4;
n=length(x0);
while(k%計算梯度
itern=k-(n+1)*floor(k/(n+1));
itern=itern+1;
%計算搜尋方向
if(itern==1)
d=-g;
else
beta=(g'*g)/(g0'*g0);
d=-g+beta*d0; gd=g'*d;
if(gd>=0.0)
d=-g;
endendif(norm(g)break; end
%檢驗終止條件
m=0; mk=0;
while(m<20) %armijo搜尋
if(feval(fun,x0+rho^m*d)g'*d)
mk=m; break;
endm=m+1;
endx0=x0+rho^mk*d;
val=feval(fun,x0);
g0=g; d0=d;
k=k+1;
endx=x0;
val=feval(fun,x);
fun.m
function
f=fun
(x)f=x
(1)^2-x
(1)*x
(2)+x
(2)^2+2*x
(1)-4*x
(2);
funs.m
function
fs=funs
(x)fs=[2*x
(1)-x
(2)+2,2*x
(2)-x
(1)-4]';
命令列視窗
x0=[2,2]';
[x,val,k]=frcg('
fun','funs',x0)
執行結果:
x =
-0.0000
2.0000
val =
-4.0000
k = 8
即x1
=0,x
2=2 時,最優值va
l=−4
,迭代次數為8.
python實現共軛梯度法
共軛梯度法 conjugate gradient 是介於最速下降法與牛頓法之間的乙個方法,它僅需利用一階導數資訊,但克服了最速下降法收斂慢的缺點,又避免了牛頓法需要儲存和計算hesse矩陣並求逆的缺點,共軛梯度法不僅是解決大型線性方程組最有用的方法之一,也是解大型非線性最優化最有效的演算法之一。這裡...
python實現共軛梯度法
共軛梯度法是介於最速下降法與牛頓法之間的乙個方法,它僅需利用一階導數資訊,但克服了最速下降法收斂慢的缺點,又避免了牛頓法需要儲存和計算hesse矩陣並求逆的缺點,共軛梯度法不僅是解決大型線性方程組最www.cppcns.com有用的方法之一,也是解大型非線性最優化最有效的演算法之一。在各種優化演算法...
Matlab實現 最速下降法 共軛梯度法
盲人下山法 在山頂上,小盲人拿著小拐棍,先確定方向,再確定步長,尋找下山的最優辦法 即最短路徑 上圖偽碼來自某 數值線性代數 教科書,非原創 下述 是原創 最速下降法 function er,k fastdown a 定義最速下降法函式檔案 er 表示停機時實際絕對誤差 k 表示停機時實際迭代次數 ...