西京学院数学软件实验任务书课程名称数学软件实验班级数0901学号0912020107姓名李亚强实验课题线性方程组的最速下降法与共轭梯度法实验目的熟悉线性方程组的最速下降法与共轭梯度法实验要求运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成实验内容线性方程组的最速下降法线性方程组的共轭梯度法成绩教师-1-实验五实验报告一、实验名称:最速下降法与共轭梯度法解线性方程组。二、实验目的:进一步熟悉理解掌握最速下降法与共轭梯度法解法思路,提高matlab编程能力。三、实验要求:已知线性方程矩阵,应用最速下降与共轭梯度法在相关软件编程求解线性方程组的解。四、实验原理:1.最速下降法:从某个初始点)0(X出发,沿)(Xf在点)0(X处的负梯度方向)0()0()0()(AXbXfr求得)(Xf的极小值点)1(X,即)(min)0()0(0rXf然后从)1(X出发,重复上面的过程得到)2(X。如此下去,得到序列{)(kX})(...)()()()1()0(kXfXfXf可以证明,从任一初始点)0(X出发,用最速下降法所得到的序列{)(kX}均收敛于问题使X最小化)(Xf的解,也就是方程组bAX的解。其收敛速度取决于11nn,其中1,n分别-2-为A的最小,最大特征值。最速下降法迭代格式:给定初值)0(X,)(kX按如下方法决定:)()(1)(k)()()()(k)()(X,,)(kkkkTkkTkkkkrXArrrrAXbXfr2.共轭梯度法其基本步骤是在点)(kX处选取搜索方向)(kd,使其与前一次的搜索方向)1(kd关于A共轭,即(1)()(1),0kkkddAd然后从点)(kX出发,沿方向)(kd求得)(Xf的极小值点)1(kX,即)(min)()()(0)1(kdXfXfkk如此下去,得到序列{)(kX}。不难求得0,)1()(kkAdd的解为)()1()1()()()()1(,,kkkkkkkdAdddAXbXX注意到)(kd的选取不唯一,我们可取-3-)1(1)()()(kkkkdXfd由共轭的定义0,)1()(kkAdd可得:)1()1()1()(1,,kkkkkAddAdr共轭梯度法的计算过程如下:第一步:取初始向量)0(X,计算(0)0(0)(1))0()0()0()0(0(0)(0)(0)(0)dXX,,X)X(rdAddAdrAbf第1k步:计算(k)0(k)1)(k)()()()()1(1(k))()1()1()1()(1(k)(k)(k)dXX,,r,,X)X(rkkkkkkkkkkkkkAddAdrddAddAdrAbf五、实验内容:%最速下降法function[x,k]=fastest(A,b,eps);-4-x0=zeros(size(b),1);x=x0;k=0;m=1000;tol=1;whiletol=epsr=b-A*x0;q=dot(r,r)/dot(A*r,r);x=x0+q*r;k=k+1;tol=norm(x-x0);x0=x;ifk=mdisp('迭代次数太多,可能不收敛!');return;endendxk-5-%共轭梯度法function[k,x]=gong_e(A,b)esp=input('请输入允许误差esp=');x0=input('请输入初始值x0=');k=0;r0=b-A*x0;%求出dangqian梯度whilenorm(r0)espr0=b-A*x0;k=k+1;ifk==1p0=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;-6-endendx=r0;k;end六、实验结果:A=[520;641;125];b=[1018-14]';eps=1.0e-6;x=-0.87507.1875-5.5000k=60