1、共轭梯度法一 共轭梯度法原理对于线性方程组 ,即:Ab(1)121n212nnaxaxb其中, 为对称正定矩阵, ,如何熟练地运=ijaA1inb用最速下降法与共轭梯度法的求解线性方程组。在求解线性方程组之前,首先用内积将问题转化为函数问题。1 最速下降法最速下降法是一种运用梯度与极值的性质,综合数值计算方法寻找局部极值。基本思想:任一点的负梯度方向是函数值在该点下降最快的方向。将 维问题转化为一系列沿负梯度方向用一维搜索方法寻n优的问题,利用负梯度作为搜索方向,故称最速下降法。具体步骤:1、搜索方向: ,即最速下降方向。()kkdfx2、搜索步长: 取最优步长,即满足:k()min()kkf
2、xfxd1 给定初始点 ,允许误差 ,令 。0nR012 计算搜索方向 。()kkdfx3 若 ,则 为所求的极值点,否则,求解最优步长 ,kA k使得 。()min()kkkfxdfxd4 令 ,1kk1最速下降方向是反映了目标函数的局部性质,它只是局部目标函数值下降最快的方向。2 共轭梯度法对于 1min()2TfxAbx其中, , 是对称正定矩阵。0nR基本思想:将共轭性与最速下降法相结合利用已知迭代点的梯度方向构造一组共轭方向,并沿此方向搜索,求出函数的极小值。具体步骤:1 取初始点 ,取第一次搜索方向为 。(0)x(0)(0)dfx2 设已求得 ,若 ,令 ,则下一(1)k(1)kf
3、x(1)kg个搜索方向(1)(1)()1kkkdd由于 与 关于 共轭,所以给(1)两边同时乘以 ,(1)kd()kATkdA即: ()(1)()()()10TTTkkkgd解得: (2)()1()kkTgA3 搜索步长的确定,已知迭代点 ,和搜索方向 ,确定()kx()kd步长 ,即:k()()minkkfxd记 ,()()(kk令 ()()()0Tfxd既有: ()()()0kkTkAxdb令 ()()kgf既有: ()()kT解得:()kkTdA共轭梯度法是对最速下降法的一种改进,减少了迭代次数从而提高了程序运行效率。二 程序框图程序:%最速下降法%function x,k=fast(A
4、,b)esp=input(esp=);N=input(N=);x0=input(x0=);k=0;tol=1;while tol=espr=b-A*x0;q=dot(r,r)/dot(A*r,r);x=x0+q*r;k=k+1;tol=norm(x-x0);x0=xif k=Ndisp();return;endendxk%共轭梯度法%function k,x=C_G(A,b)esp=input(请输入最大误差= );x0=input(请输入初值 x0=);k = 0 ;r0 = b-A*x0; %dangqianwhile norm(r0)esp r0 = b -A*x0;k = k + 1 ;if k=1 p0 = r0 ;elselamda=(r0*r0)/(p0*A*p0);r1 = r0 - lamda*A*p0 ;p0=r0+(r0*r0)/(r1*r1)*p0;x1 = x0 + lamda*p0;x0=x1;r0=r1;endendx=r0;k;end