共轭梯度法求解线性方程组_第1页
共轭梯度法求解线性方程组_第2页
共轭梯度法求解线性方程组_第3页
共轭梯度法求解线性方程组_第4页
共轭梯度法求解线性方程组_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

共轭梯度法求解线性方程组闫凡晓3111054017(数学与统计学院,应用数学)摘要本实验研究了用共轭梯度法求解线性方程组的思想及实现方法,并通过编写Matlab程序对随机生成的一个线性方程组求解,通过程序的运行调试分析共轭梯度法对不同精度的实际性能,并针对误差进行分析。关键字共轭梯度法误差容限对称正定矩阵一、实验题目运用共轭梯度法求解一个系数矩阵为对称正定矩阵的线性方程组Ax二b.二、算法思想共轭梯度法是把求解线性方程组的问题转化为求解一个等价的严格凸二次函数的极小化问题。从任意给定的初始点x(°)出发,沿一组关于A共轭的方向进行线性搜索,在不考虑舍入误差的情况下,最多迭代n步(n是线性方程组的阶数),便可求得二次函数的极小点,也即求得了线性方程组Ax二b的解.对于某些大型稀疏线性方程组,通常该法只经过比方程组阶数n小得多的迭代次数就能获得所要求精度的近似解.三、算法实现(1)共轭梯度法的简化的计算公式d(°)=r(°)=b—Ax(°),r(k)Td(k)TOC\o"1-5"\h\za=,kd(k)TAd(k)x(k+1)=x(k)+ad(k),<kr(k+i)=b—Ax(k+i),r(k+i)TAd(k)\o"CurrentDocument"P=—,kd(k)TAd(k)d(k+i)=r(k+i)+Pd(k).k(2)基于Matlab程序的共轭梯度算法实现步骤1)给定初始近似向量x(0)及精度要求*vl.0e-4;2)计算r(0)=b—Ax(0),取d(°)=r(°);3)Fork=°ton—idorr(k)Td(k)(i)d(k)TAd(k)x(k+1)=x(k)+ad(k),

(ii)k(iii)r(k+i)=b-Ax(k+i),(iv)若卜(k创或k+1=n,贝y输出近似解x(k+1),停止;否则转(v).r(k+i)v)/.、d(k+1)=r(k+1)+0d(k).vi)kEnddo四、实验平台MATLAB7.6.0五、算法设计%用共轭梯度法求解对称正定线性方程组Ax=b的解clearallA=randint(10,10,[-10,10]);A=A'*A;A=A+A';正定矩阵Ay=eig(A);fori=1:10ify(i)<0disp'随机生成的矩阵不是正定矩阵')break;endendb=randint(10,1,[-10,10]);x=randint(10,1,[-10,10]);iter=10;tol=1.0e-4;d=b-A*x;r=b-A*x;forcnt=1:itera=(norm(r))入2/(d'*A*d);%随机生成一个10*10对称%求入的特征值%判断A的正定性%随机生成一10*1列向量%随机生成方程初始值%最大迭代次数-1%误差容限%开始迭代x=x+a*d;r=b-A*x;if(norm(r)/norm(b))<=toldisp'恭喜您,收敛于误差容限')break;endc=(norm(r)/norm(b-A*(x-a*d)))入2;d=r+c*d;cnt=cnt+1;endz=A\b;y=norm(x-z);%计算方程组的精确解yxcnt%精确解与数值解的误差%数值解%迭代次数六、实验结果y=1.1417e-004x=1.0e+004*-0.6383-0.3289-0.42850.0773-1.39880.3944-1.47841.08641.5021-0.5389cnt=11恭喜您,收敛于误差容限1.3975e-009-0.20720.7229-0.1594-0.20360.23370.38010.17830.0894-0.6825-0.4136cnt=10七、实验分析通过以上程序的编写及运行,从获得的数据来说,共轭梯度法基本成功,理论上计算中若无计算误差,则至多迭代n次就求得了方程组的准确解。但实际计算中存在舍入误差,受舍入误差的影响,残向量r(k)间不能精确满足正交关系,搜索方向d(k)也不可能精确满足共轭关系,因而迭代n次不一定就能求得方程组的准确解.一般来说,若r(")丰°(方程组的系数矩阵越病态,r(n)就偏离零越远),这时,仍继续进行迭代,函数f(X)的值将继续减少,总能求得一个更好的近似解•在大多数情况下,方程组的系数矩阵不是十分病态的,往往不必迭代n次卜⑷"就充分小,这时可以终止迭代,取x(k)作为方程组的近似解.计算经验表明,对于不是十分病态的问题,共轭梯度法收敛较快,迭代次数远小于系数矩阵的阶数n.对于病态问题,只要进行足够多次迭代(迭代次数大约为矩阵阶数n的3〜5倍)后,一般也能得到满意的结果.因而共轭梯度法是求解高阶稀疏线性方程组的一个有效常用的方法.八、实验心得在本次实验中,我在理解了用共轭梯度法求解线性方程组的原理的前提下,根据共轭梯度算法流程编写了matlab程序,再一次深刻体会了共轭梯度法的实现方法.从变量的设定、赋值以及运算,共轭梯度法的每一步都体现在了程序中。编程中我也遇到了诸如矩阵运算等很多棘手的问题,通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论