- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 解线性方程组的迭代解法
本章小结 本章介绍了解线性方程组 迭代法的 一些基本理论和具体方法。迭代法是一种逐次逼 近的方法,即对任意给定的初始近似解向量,按 照某种方法逐步生成近似解序列,使解序列的极 限为方程组的解。注意到在使用迭代法 解方程组时,其迭代矩阵B和迭代向量f在计算过 程中始终不变,迭代法具有循环的计算公式,方法 简单,程序实现方便,它的优点是能充分利用系 数的稀疏性,适宜解大型稀疏系数矩阵的方程组。 迭代法不存在误差累积问题。使用迭代法的 关键问题是其收敛性与收敛速度,收敛性与迭代 初值的选取无关,这是比一般非线性方程求根的 优越之处。在实际计算中,判断一种迭代格式收 敛性较麻烦,由于求迭代的谱半径时需要求特征 值,当矩阵的阶数较大时,特征值不易求出,通 常采用矩阵的任一种范数都小于1或对角占优来判 断收敛性。有时也可边计算边观察其收敛性。如 何加快迭代过程的收敛速度是一个很重要的问题 ,实用中更多的采用SOR法,选择适当的松驰因子 ω有赖于实际经验。我们应针对不同的实际问题 ,采用适当的数值算法。 例4.15 设求解线性方程组Ax=b的简单迭代法 x(k+1)=Bx(k)+g ( k=0,1, 2, ……) 收敛, 求证: 对0?1, 迭代公式 x(k+1)=[(1- ?)I+ ?B]x(k)+ ?g ( k=0,1, 2, …) 收敛。 证: 设C=(1-?)I+?B, ?(C)和?(B)分别为C和B 的特征值,则显然 ?(C) =(1- ?)+ ? ?(B) 因为0?1, ?(C) 是1和?(B) 的加权平均, 且由迭代法 x(k+1) =Bx(k) +g ( k=0,1, 2, …,) 收敛知|?(B)|1, 故|?(C)|1, 从而?(C)1, 即 x(k+1)=[(1-?)I+?B]x(k)+?g ( k=0,1,2, … ) 收敛 Carl Jacobi雅可比(1804.12.10-1851.2.18) Jacobi出生在德国Potsdam一个犹太家庭,逝世于柏林。他对数学主要的贡献是在椭圆函数及椭圆积分上,并把这些理论应用在数论上而得到很好的结果。 Jacobi很具有数学天份。他从欧拉及Lagrange 的著作中学习代数及微积分,并被吸引到数论的领域。他处理代数问题的手法只有Euler可以相提并论。年轻的时候,Jacobi有许多发现都跟Gauss的结果重迭。高斯很看重Jacobi,1849年45岁的时候,除了Gauss之外,Jacobi已经是欧洲最有名的数学家了。1834年Jacobi证明:如果一个单变量单值函数有两个周期,则其比值为虚数。 他证明:如果n个自变量为n个的函数是相关的,那么其Jacobian恒为0,如果是独立的,那么Jacobian不恒为0。他在数学物理上也有建树,在量子力学中他的Hamilton-Jacobi方程扮演了一个革命性的角色。1851年1月Jacobi感染了流感,后来又感染了天花病毒。几天后的1851年2月18日,Jacobi因天花而死去。享年47岁! Jacobi在一阶偏微分方程的研究中做出了许多工作,并把他们应用到了微分动态方程中。他还研究了函数的判定,发现了函数判定的Jacobi行列式(Jacobian)。 雅可比迭代法的流程图描述 例 4.5 用雅可比迭代法求解线性方程组 ,式中 #include stdio.h #include math.h #define N 3 /* N为方程组系数矩阵的阶数 */ #define MAX_N 100 /* 最大迭代次数 */ #define epsilon 1e-6 /* 容许误差 */ int yacobi(float a[N][N],float b[N],float x[N]) { float d,s,max,y[N]; int i,j,k,flag; k=0; for(i=0;iN;i++) x[i]=0.0; while(1) { max=0.0; k++; for(i=0;iN;i++) { s=0.0; for(j=0;jN;j++) if(j!=i) s=s+a[i][j]*x[j]; y[i]=(b[i]-s)/a[i][i]; d=fabs(y[i]-x[i]); if(maxd) ma
原创力文档


文档评论(0)