您的位置:首页 > 编程语言 > MATLAB

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

2016-08-26 17:32 706 查看
考虑问题:

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

具体求解的方法如下:

首先,任意给定一个初始点x(1),计算出目标函数f(x)在这个点的梯度,若||g1||=0,则停止计算,否则,令

d(1)=−▽f(x(1))=−g1

沿着d(1)的搜索,得到x(2),计算x(2)处的梯度,若||g2||=0,则停止计算,否则利用若-g2和d(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: