考虑问题:
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版权声明:本文为u012235274原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。