ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:138.73KB ,
资源ID:2282272      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2282272.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Jacobi 迭代法与GaussSeidel迭代法算法比较.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Jacobi 迭代法与GaussSeidel迭代法算法比较.docx

1、Jacobi 迭代法与GaussSeidel迭代法算法比较Jacobi 迭代法与Gauss-Seidel迭代法算法比较 Jacobi 迭代法与Gauss-Seidel迭代法比较1 引言 解线性方程组的方法分为直接法和迭代法,直接法是在没有舍入误差的假设下,能在预定的运算次数内求得精确解,而迭代法是构造一定的递推格式,产生逼近精确值的序列。这两种方法各有优缺点,直接法普遍适用,但要求计算机有较大的存储量,迭代法要求的存储量较小,但必须在收敛性得以保证的情况下才能使用。对于高阶方程组,如一些偏微分方程数值求解中出现的方程组,采用直接法计算代价比较高,迭代法则简单又实用,所以比较受工程人员青睐。迭代

2、法求解方程组就是构造一个无限的向量序列,使它的极限是方程组的解向量。即使计算机过程是精确的,迭代法也不能通过有限次算术运算求得方程组的精确解,而只能逐步逼近它。因此迭代法存在收敛性与精度控制的问题。迭代法是常用于求解大型稀疏线性方程组(系数矩阵阶数较高且0元素较多),特别是某些偏微分方程离散化后得到的大型稀疏方程组的重要方法。设n元线性微分方程组 (1) 的系数矩阵A非奇异,右端向量,因而方程组有唯一的非零解向量。而对于这种线性方程组的近似解,前辈们发展研究了许多种有效的方法,有Jacobi迭代法、GaussSeidel迭代法,逐次超松弛迭代法(SOR法),这几种迭代方法均属一阶线性定常迭代法

3、,即若系数矩阵A分解成两个矩阵N和P的差,即;其中N为可逆矩阵,线性方程组(1)化为:可得到迭代方法的一般公式: (2)其中:,对任取一向量作为方程组的初始近似解,按递推公式产生一个向量序列,.,.,当足够大时,此序列就可以作为线性方程组的近似解。 一阶定常迭代法收敛的充分必要条件是: 迭代矩阵G的谱半径小于1,即;又因为对于任何矩阵范数恒有G,故又可得到收敛的一个充分条件为:G 1。1.1 Jacobi迭代法若D为A的对角素构成的对角矩阵,且对角线元素全不为零。可以将系数矩阵A分解为: 其中,D为系数矩阵A的对角元素构成的对角阵,L为严格下三角阵,U为严格上三角阵。在迭代法一般形式中,取,形

4、成新的迭代公式,其中任取,则Jacobi迭代的迭代公式为: (3)式中: ; , 称为Jacobi迭代矩阵. 其计算公式为: , (4) 如果迭代矩阵的谱半径,则对于任意迭代初值,Jacobi迭代法收敛;如果GJ1,则Jacobi迭代法收敛;如果方程组的系数矩阵是主对角线按行或按列严格占优阵,则用Jacobi迭代法求解线性方程组必收敛。1.2 Gauss-Seidel迭代法从Jacobi迭代可以看出,用计算时,需要同时保留这两个向量。事实上如果每次获得的分量能够在计算下一个分量时及时更新的话,既节省了存储单元,又能使迭代加速,这就是Gauss-Seidel方法。对于非奇异方程组,若D为A的对角

5、素构成的对角矩阵,且对角线元素全不为零;系数矩阵A的一个分解: (5)在迭代法一般形式中,取,形成新的迭代公式,其中任取,则Gauss-Seidel迭代法的迭代公式为: (6)上式中: 是其右端常数项;为Gauss-Seidel迭代法的迭代矩阵,其计算公式为:, (7)若GS法收敛的充分必要条件是;如果GG0称为松弛因子。在迭代法一般形式中,取, 得到迭代公式 , (9)其中任取。这就是逐次超松弛迭代法,当=1时该式就是高斯法。SOR法迭代矩阵是整理后得到SOR迭代法的实际计算公式为: ;(10) SOR方法收敛的充分必要条件是;如果GS1,则SOR方法收敛;SOR方法收敛的必要条件是;如果方

6、程组的系数矩阵A是主对角线按行或者列严格占优阵,则用的SOR方法求解必收敛;如果方程组的系数矩阵是正定矩阵,则用的SOR方法求解必收敛。2 算法分析例1 用雅可比迭代法求解下列方程组解 将方程组按雅可比方法写成取初始值按迭代公式进行迭代,其计算结果如表1所示 。表1 01234567 00.720.9711.0571.08531.09511.098300.831.0701.15711.18531.19511.198300.841.1501.24821.28281.29411.2980例2 用高斯塞德尔迭代法求解例1.解 取初始值,按迭代公式进行迭代,其计算结果如下表2表2 0123456700

7、.721.043081.093131.099131.099891.099991.100.9021.167191.195721.199471.199931.199991.201.16441.282051.297771.299721.299961.31.33 结论使用Gauss-Seidel迭代法迭代法,7次就可以求出方程的解,收敛速度要比Jacobi迭代法收敛快(达到同样的精度所需迭代次数少);但是这个结论,在一定条件下才是对的,甚至有这样的方程组,雅可比方法收敛,而高斯塞德尔迭代法却是发散的.4 附录程序/* 求解线性方程组-Gauss-Seidel迭代法 */#include #includ

8、e using namespace std;/* 二维数组动态分配模板 */template T* Allocation2D(int m, int n) T *a; a = new T*m; for (int i=0; im; i+) ai = new Tn; return a;/* 一维数组动态分配模板 */template T* Allocation1D(int n) T *a; a = new Tn; return a;/* 求矩阵的一范数 */float matrix_category(float* x, int n) float temp = 0; for(int i=0; in;

9、i+) temp = temp + fabs(xi); return temp;int main() const int MAX = 1000; / 最大迭代次数 int i,j,k; / 循环变量 int n; / 矩阵阶数 float* a; / 增广矩阵 float* x_0; / 初始向量 float* x_k; / 迭代向量 float precision; / 精度 coutprecision; /* 动态生成增广矩阵 */ coutendln; a = Allocation2D(n, n+1); /* 输入增广矩阵的各值 */ coutendl输入增广矩阵的各值:n; for(i

10、=0; in; i+) for(j=0; jaij; /* 生成并初始化初始向量 */ x_0 = Allocation1D(n); coutendl输入初始向量:n; for(i=0; ix_0i; /* 生成迭代向量 */ x_k = Allocation1D(n); float temp; /* 迭代过程 */ for(k=0; kMAX; k+) for(i=0; in; i+) temp = 0; for(j=0; ji; j+) temp = temp + aij * x_kj; x_ki = ain - temp; temp = 0; for(j=i+1; jn; j+) tem

11、p = temp + aij * x_0j; x_ki = (x_ki - temp) / aii; /* 求两解向量的差的范数 */ for(i=0; in; i+) x_0i = x_ki - x_0i; if(matrix_category(x_0,n) precision) break; else for(i=0; in; i+) x_0i = x_ki; /* 输出过程 */ if(MAX = k) cout迭代不收敛n; cout迭代次数为:kendl; cout解向量为:n; for(i=0; in; i+) coutxi: x_kiendl; return 0;参考文献1颜庆津. 数值分析M. 北京:航空航天大学出版社,1999.2黎建玲,简金宝,李群宏.数值分析与实验M.北京:科学出版社,20123宋叶志MATLAB数值分析与应用M北京:机械工业出版社,2013

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1