文档介绍:共轭梯度法
一、实验目的
(1)。熟悉使用共轭梯度法求解无约束非线性规划问题的原理;
(2).在掌握原理的基础上熟练运用此方法解决问题;
(3)。学会利用计算机语言编写程序来辅助解决数学问题;
(4)。解决问题的同时分析问题,力求达到理论与实践的相统一;
(5).编写规范的实验报告。
二、问题描述
minfx=x12+x22-x1x2+2x1-4x2
自选初始点开始迭代
三、算法介绍
<算法原理〉:
共轭梯度法为求解线性方程组而提出。后来,人们把这种方法用于求解无约束最优化问题,使之成为一种重要的最优化方法。
共轭梯度法的基本思想是把共轭性与最速下降方法相结合,利用已知点处的梯度构造一组共轭方向,并沿这组方向进行搜索,,这种方法具有二次终止性。在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。
共轭方向
,我们运用基于共轭方向的一种算法—共轭梯度法
<算法流程图>:
给定初始点(0,0),k=1,最大迭代次数n
确定搜索方向
进退法确定搜索区间
分割法确定最优步长
四、程序
%¾«È·ÏßËÑË÷,ÌݶÈÖÕÖ¹×¼Ôò
function [ m,k,d,a,X,g1,fv] = GETD( G,b,c,X,e,method)
if nargin<6
error(’ÊäÈë²ÎÊý±ØÐëΪ6’);
end
n=length(G);
if n==2
format long e %rat
syms x1 x2
f=1/2*[x1,x2]*G*[x1;x2]+b’*[x1;x2]+c;
g=[diff(f,x1);diff(f,x2)];
g1=subs(subs(g,x1,X(1,1)),x2,X(2,1));
d=—g1;
a=-(d'*g1)/(d’*G*d);% a=-((X(:,1)’*G*d+b'*d)/(d’*G*d)); a=g1(:,1)’*g1(:,1)/(d(:,1)’*G*d(:,1));
X(:,2)=X(:,1)+a*d;
g1=[g1 subs(subs(g,x1,X(1,2)),x2,X(2,2))];
m1=norm(g1(:,1));
m=norm(g1(:,2));
i=2;
k=zeros(1);
switch method
case ’FR’
while m>=e
k(i—1)=(m/m1)^2;
d(:,i)=—g1(:,i)+k(i-1)*d(:,i—1);
a(i)=—(d(:,i)’*g1(:,i))/(d(:,i)’*G*d(:,i));
%a1(i)=-((X(:,i)'*G*d(:,i)+b'*d(:,i))/(d(:,i)’*G*d(:,i)));a(i)=g1(:,i)'*g1(:,i)/(d(:,i)'*G*d(:,i));