共轭梯度下降及matlab简单实现

来源:互联网 发布:line聊天软件 编辑:程序博客网 时间:2024/06/05 16:30

考虑问题:

min f(x)=12xTAx+bTx+c

具体求解的方法如下:
首先,任意给定一个初始点x(1),计算出目标函数f(x)在这个点的梯度,若||g1||=0,则停止计算,否则,令
d(1)=(x(1))=g1

沿着d(1)的搜索,得到x(2),计算x(2)处的梯度,若||g2||=0,则停止计算,否则利用若g2d(1)构造第二个搜索方向d(2),再沿着d(2)搜索。
一般地,若已知x(k)d(k),则从x(k)出发,沿d(k)进行搜索,可得:
x(k+1)=x(k)+λkd(k)

令:
ϕ(λ)=f(x(k)+λd(k))

ϕ(λ)的极小值点:
ϕ(λ)=f(x(k+1))Td(k)=0

f(x(k+1))=Ax(k+1)+b
(Ax(k+1)+b)Td(k)=0

x(k+1)=x(k)+λkd(k),并展开得:
(gk+λkAd(k))Td(k)=0

求得:
λk=gTkd(k)d(k)TAd(k)

如果还没有满足终止条件:
d(k+1)=gk+1+βkd(k)

左乘d(k)TA
d(k)TAd(k+1)=d(k)TAgk+1+βkd(k)TAd(k)=0

得:
βk=d(k)TAgk+1d(k)TAd(k)

min x21+12x22+12x23

A = [2 0 0; 0 1 0; 0 0 1];x(:,1) = [1;1;1];g(:,1)=A*x(:,1);d(:,1) = [-1;-2;0];n = 1;lambda = [];beta = [];while norm(g(:,n)) > 0.01    lambda(n) = -(g(:,n)'*d(:,n))/(d(:,n)'*A*d(:,n));    x(:,n+1) = x(:,n)+lambda(n)*d(:,n);    g(:,n+1) = A*x(:,n+1);    beta(n) = (d(:,n)'*A*g(:,n+1))/(d(:,n)'*A*d(:,n));    d(:,n+1) = -g(:,n+1)+beta(n)*d(:,n);    n = n+1;end
0 0
原创粉丝点击