文档库 最新最全的文档下载
当前位置:文档库 › 线性方程组的迭代法及程序实现

线性方程组的迭代法及程序实现

线性方程组的迭代法及程序实现
线性方程组的迭代法及程序实现

线性方程组的迭代法及程序实现

学校代码:11517 学号:200810111217 HENAN INSTITUTE OF ENGINEERING 毕业论文

题目线性方程组的迭代法及程序实现

学生姓名

专业班级

学号

系 (部)数理科学系

指导教师职称

完成时间 2012年5月20日河南工程学院

毕业设计(论文)任务书

题目:线性方程组的迭代法及程序实现专业:信息与计算科学学号 : 姓名一、主要内容:

通过本课题的研究,学会如何运用有限元方法来解决线性代数方程组问题,特别是Gaussie-Seidel迭代法和Jacobi迭代法来求解线性方程组。进一步学会迭代方法的数学思想,并对程序代码进行解析与改进,这对于我们以后学习和研究实际问题具有重要的意义。本课题运用所学的数学专业知识来研究,有助于我们进一步掌握大学数学方面的知识,特别是迭代方法。通过这个课题的研究,我进一步掌握了迭代方法的思想,以及程序的解析与改进,对于今后类似实际问题的解决具有重要的意义。

二、基本要求:

学会编写规范论文,独立自主完成。

运用所学知识发现问题并分析、解决。

3.通过对相关资料的收集、整理,最终形成一篇具有自己观点的学术论文,以期能对线性方程组迭代法的研究发展有一定的实践指导意义。

4.在毕业论文工作中强化英语、计算机应用能力。

完成期限: 2012年月指导教师签名:专业负责人签名:

年月日

目录

中文摘要....................................................................................Ⅰ英文摘要 (Ⅱ)

1 综述 1

2 经典迭代法概述

3 2.1 Jacobi迭代法 3 2.2 Gauss?Seidel迭代法

4 2.3 SOR(successive over relaxation)迭代法 4 2.4 SSOR迭代法

5 2.5 收敛性分析5 2.

6 数值试验 6

3 matlab实现的两个例题8 3.1 例1 迭代法的收敛速度8 3.2 例 2 SOR迭代法松弛因子的选取 12致谢16参考文献17附录19

线性方程组的迭代法及程序实现

摘要线性代数方程组的迭代方法是一种极限方法是解大型稀疏矩阵方程组的有效方法。它的基本思想是用某种极限过程去逐步逼近线性方程组的精确解,是一种逐步逼近的方法。迭代法将n阶线性方程组变形为某种迭代公式。对于任意给定的迭代初始值,由某一迭代格式便可生成一向量序列,我们的目的是求解方程组的解,因此我们会希望向量序列的极限逼近方程组的解。本文首先介绍了求解大型线性方程组的主要迭代算法,对一些经典迭代法Jacobi方法、Gauss?Seidel方法、SOR方法和SSOR方法进行了详细的讨论,其次着重讨论了经典迭代法的收敛性,详细总结并给出了各种迭代方法的收敛性定理,并通过举例及其Matlab程序实现进一步阐述了迭代法的收敛性。

关键字线性方程组/Jacobi迭代法/Gauss-Seidel方法/SOR方法/收敛性Iterative method and procedures

for implementation

of the linear equations

ABSTRACT The iterative method of linear algebraic equations is an extreme method is an effective method for the solution of large sparse matrix equations. The basic idea is to a certain limit process to gradually approach the exact solution of linear equations, a step-by-step approximation method. The iterative method will be iterative formula for a deformation of n linear equations. For any given iteration of the initial value, by an iterative scheme can generate a vector sequence, our aim is the solution to solving the equations, so we will want to limit

approximation the solution of equations of vector sequences. This paper first introduces the main iterative algorithm for solving large linear equations, a detailed discussion of some classical iterative method Jacobi method, Gauss-Seidel method, SOR and SSOR methods, followed focused on the classical iterative convergence of the method, summarized in detail and gives a variety of iterative methods convergence theorem, and further elaborated by example and Matlab program iterative methods.

KEYWORDS linear equations , Jacobi iterative method , Gauss-Seidel method ,the SOR method,convergence

1 综述

在科学研究和大型工程设计中出现了越来越多的数学问题,而这些问题往往需要求数值解。在进行数值求解时,经离散后,常常归结为求解行如Axb的大型线性方程组。20世纪50年代至70年代,由于电子计算机的发展,人们开始考虑和研究在计算机上用迭代法求线性方程组Axb的近似解,用某种极限过程去逐渐逼近精确解,并发现了许多非常有效的迭代方法。迭代法是按照某种规则构造一个向量序列{x},使其极限向量x是Axb的精确解。因此,对迭代法来说一般有下面几个问题:(1)如何构造迭代序列?(2)构造的迭代序列是否收敛?在什么情况下收敛?(3)如果收敛,收敛的速度如何?我们应该给予量的刻划,用以比较各种迭代法收敛的快慢。(4)因为计算总是有限次的,所以总要讨论近似解的误差估计和迭代过程的中端处理问题,这又和舍入误差的分析有关。迭代法具有需要计算机存储单元少、程序设计简单、原始系数矩阵在计算过程中始终不变等优点。例如Jacobi方法、Gauss-Seidel方法、SOR方法、SSOR方法,这几张迭代方法是最常

用的一阶线性定常迭代法。

大量偏微分方程的离散形式是大规模线性代数方程组,其数值计算是科学工程计算的核心,占有绝大部分的总体运算时间,解大规模稀疏线性方程组的Krylov子空间方法显示出与众不同的有效性。当矩阵是对称正定时,常用的方法是具有短递推的共轭度方法CG。系数矩阵不对称时,常用的方法中有完全正交化方法(FOM)和广义最小参量方法(GMRES)。

还有很多迭代方法正在被人们发现和研究,新的有效的方法层出不穷,其中基于大型稀疏非Bermitian的正定阵的系数矩阵的Bermitian和Skew-Bermitian分裂的BSS方法,IBSS方法等具有非常好的实用性。

但没有一种算法是通用的,对于具体问题必须根据所得到的线性方程组和算法的特点进行选择。 MATLAB是Mathworks公司的产品,MATLAB的产生是与数学计算紧密联系在一起的,其基本数据结构是矩阵,它的表达式与数学工程计算中使用的形式十分相似,便于用户学习和使用.系统包括5个部分:MATLAB语言、MATLAB工作环境、MATLAB图形处理系统、MATLAB数学函数库和MATLAB应用程序接口.其主要功能包括:数值计算;符号计算;数据分析和可视化;文字处理;Simulink动态仿真.在数值计算中,线性方程组的求解是一个很重要的问题.用MATLAB来求解线性方程组,有几种方法,非常简单,通过对一些矩阵和函数的操作可以轻松地得到线性方程组的解,不需要使用者掌握任何程序设计语言,对迭代法只需编写简单的程序

2 经典迭代法概述

20世纪50年代至70年代,人们开始考虑和研究用迭代法求解线性方程组(2-1)

的近似解,发展了许多有效的方法,其中有Jacobi方法、Gauss-Seidel方法、SOR方法、SSOR方法,这几种迭代方法均属一阶线性定常迭代法,即若系数矩阵A 的一个分裂:;M为可逆矩阵,线性方程组(2-1)化为:

;

得到迭代方法的一般公式:(2-2)

其中:,。

2.1 Jacobi迭代法

若D为A的对角素构成的对角矩阵,且对角线元素全不为零。

系数矩阵A的一个分解:AD-E+F;这里D为A的对角矩阵,E为严格下三角阵,F 为严格上三角阵。其中:

Jacobi迭代的矩阵形式为: (2-3)

2-3式中:;,称为Jacobi迭代矩阵。其计算公式为: (2-4)

2.2 Gauss?Seidel迭代法

对于非奇异方程组,若D为A的对角素构成的对角矩阵,且对角线元素全不为零;系数矩阵A的一个分解: 2-5

Gauss?Seidel迭代矩阵形式为 2-6

其计算公式为: (2-7)

2.3 SOR(successive over relaxation)迭代法

对于非奇异方程组,若D为A的对角素构成的对角矩阵,且对角线元素全不为零;系数矩阵A的一个分解: (2-8)

这里D为A的对角素构成的对角矩阵,E为严格下三角形,F为严格上三角形。

SOR迭代法的矩阵形式为:(2-9)

计算公式为: (2-10)

式中:为实数,称为松弛因子,02。

2.4 SSOR迭代法

SSOR(symmetric successive over relaxation)迭代法的矩阵形式为: 2-11

SSOR迭代矩阵为:(2-12)

计算公式分为以下两步:

先按自然次序(i1,2,…,n)用向前的SOR法逐点计算。 2-13

然后按相反的次序(in,n-1,…,1)用向后的SOR方法逐点计算。 2-14

2.5 收敛性分析

综合上面前三种迭代格式,它们可以统一表示为下面形式: (2-15)

对Jacobi方法来说,,;

对Gauss-Seidel方法来说,,;

对SOR方法来说,,。

定理1:简单迭代法(2-15)收敛的充分必要条件是迭代矩阵B的谱半径.

定理2:若迭代矩阵B的范数,则迭代公式(2-15)收敛,且有误差估计式(2-16)(2-17)

定理3:设对于方程组,若系数矩阵A是严格对角占优矩阵,则Jacobi迭代法和Gauss-Seidel迭代法都收敛。

定理4:设A为n阶非奇异方阵,则的解总能通过Gauss-Seidel方法得到。

定理5:设是二阶矩阵,,且,则有: (1)方程组若用J方法与G-S方法解之,敛散性相同; (2)方程组若发散,总可以通过交换两行的方法得到解(当时)。

定理6:若系数矩阵A对称正定,则G-S迭代公式收敛。

定理7:若系数矩阵A对称正定,且也为对称正定阵,则Jacobi迭代收敛。

定理8:若系数矩阵A为对称正定阵,则当时,SOR迭代法收敛。

定理9:若系数矩阵A为严格对角占优阵,则当时,SOR迭代法收敛。

定理10:若系数矩阵A为是正定的,则当时,SSOR迭代法收敛。

简单迭代法的比较:

一般情况下,J方法与G-S方法比较并无优劣。收敛情况与速度均不一定。

但是,具有相容次序的矩阵,在相同精确要求下,G-S法比J方法快一倍,而SOR法的收敛速度可提高一个数量级。

2.6 数值试验

下面通过一个数值实例来比较Jacobi方法、Gauss-Seidel方法、SOR 方法的收敛速度。

数值实验:我们取一个系数为64阶的线性方程组:AXb。其中: 精确解:X(1 1 1 … 1 1);取X(0 0 0 … 0 0);精度为:0.0001。

执行c语言程序interator method.c见附录得到result.txt文件。

从中可以得到三种方法的迭代性能对比如

表2-1

Method IT CPU Time/msInfo

Jacobi 18 3.00000 8.19628

Gauss-Seidel 10 2.00000 1.68024 几乎比Jacobi速度快一倍

SOR

with 1.0 10 2.00000 1.68024 退化成G-S迭代

SOR

with 6 1.00000 5.47552 是SOR迭代达到最快

SOR

with 1.5 17 3.00000 2.09836 的取值对于SOR迭代的收敛速度影响很大

3 matlab实现的两个例题

3.1 例1 迭代法的收敛速度

用迭代法分别对n20,n200解方程组Axb,其中

(1)选取不同的初值和不同的右端向量b,给定迭代误差,用两种迭代法计算,观测得到的迭代向量并分析计算结果给出结论;

(2)取定初值和右端向量b,给定迭代误差,将A的主对角元成倍放大,其余元素不变,用Jacobi迭代法计算多次,比较收敛速度,分析计算结果并给出结论。

原理解析:

运用了Jacobi迭代,Gauss-Seidel迭代

1)Jacobi迭代算法:

取初始点,精度要求ε,最大迭代次数N,置;

由(3-1)

计算出;

若,则停算,输出作为方程组的近似解;

若kN,则停算,输出迭代失败信息;否则置,转步2。

2)Gauss-Seidel迭代算法: (3-2)

3.若,则停算,输出x作为方程组的近似解;

4. 若kN,则停算,输出迭代失败信息;否则置x,kk+1,转步骤2。

解:(1)打开matlab软件,新建一个M文件,编写程序(见附录二),运行程序,记录结果;

(2)把程序中onesn,1改为eyen,1,运行程序,记录结果;

(3)把程序中Ai,im改为Ai,i2*m,注释掉majacobiA,b;后面的部分,运行程序,记录结果;

(4)仿照(3)再把主对角元成倍放大,运行程序,记录结果。

运行结果为:

(1)对于n20时:

n 20

Columns 1 through 124.0000-0.3333-0.2000000000000 -0.3333 4.0000-0.3333-0.200000000000 -0.2000-0.3333 4.0000-0.3333-0.20000000000 0-0.2000-0.3333 4.0000-0.3333-0.2000000000 00-0.2000-0.3333 4.0000-0.3333-0.200000000 000-0.2000-0.3333 4.0000-0.3333-0.20000000 0000-0.2000-0.3333 4.0000-0.3333-0.2000000 00000-0.2000-0.3333 4.0000-0.3333-0.200000 000000-0.2000-0.3333 4.0000-0.3333-0.20000 0000000-0.2000-0.3333 4.0000-0.3333-0.2000 00000000-0.2000-0.3333 4.0000-0.3333 000000000-0.2000-0.3333 4.0000 0000000000-0.2000-0.3333 00000000000-0.2000 000000000000 000000000000 000000000000 000000000000 000000000000 000000000000

Columns 13 through 20 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 -0.20000000000

-0.3333-0.2000000000 4.0000-0.3333-0.200000000 -0.3333 4.0000-0.3333-0.20000000

-0.2000-0.3333 4.0000-0.3333-0.2000000 0-0.2000-0.3333 4.0000-0.3333-0.200000

00-0.2000-0.3333 4.0000-0.3333-0.20000

000-0.2000-0.3333 4.0000-0.3333-0.2000

0000-0.2000-0.3333 4.0000-0.3333 00000-0.2000-0.3333 4.0000

k 11

x1 1.0000…… 1.0000 //有20个1.0000

k 8

x2 1.0000…… 1.0000 //有20个1.0000

ans 3.3039e-007

(2)当n200时:

A由于阶数太大省略;

k 11

x11.0000

…… 1.0000 //有200个1.0000

k 8

x21.0000

…… 1.0000 //有200个1.0000

ans 1.1368e-006

(2)k 4

x1 1.0000 …… 1.0000(20阶)

k 4

x2 1.0000 …… 1.0000(20阶)

ans 4.8999e-008

结果分析:

比较结果可知,选取不同的初值和不同的右端向量b,所求得的结果也会不同,Jacobi迭代和Seidel迭代的误差也会随之改变,说明初值对结果有影响,由迭代误差可知Seidel迭代优于Jacobi迭代。再比较结果,由k6与k5可知,主对角元越大,Jacobi迭代收敛越快。

3.2 例2 SOR迭代法松弛因子的选取

(1)给定迭代误差,选取不同的超松弛因子,从1.00到2.00,观察不同的松弛因子对解得影响。然后利用雅可比迭代求的的解与它们比较;

(2)给定迭代误差,选取不同的低松弛因子,从1.00到2.00,观察不同的松弛因子对解得影响。然后利用雅可比迭代求的的解与它们比较。

原理解析:

(1)逐次超松弛迭代法是Gauss-Seidel迭代法的加速。

Gauss-Seidel迭代格式为: (3-3)

(2)SOR迭代格式为 (3-4)

其中,叫做松弛因子,当1时叫超松弛,当10时叫低松弛。1是Gauss-Seidel 迭代法;

(3)SOR迭代法的算法:输入矩阵A,向量b,初始点,精确度,最大迭代次数N,松弛因子的选取;进行迭代;判断迭代的情况。

解:(1) 数据准备:A12*eye200,200;

for i1:199 Ai,i+1-2; Ai+1,i-2;

end

for j1:198 Aj,j+21; Aj+2,j1;

end

b5*ones200,1;

(2)给定迭代误差1e-6,取1.00,1.10,1.20,1.30,1.40,1.50,1.60,1.70,1.80,1.90,

1.91,1.92,1.95,1.97,1.98,1.99,

2.00,代入xmasorA,b,,x20majacobiA,b

并利用normx-x20分别分析与雅可比迭代求的解的误差;

3 给定迭代误差1e-6,取0.02,0.03,0.040.10,0.20,0.30,0.40,0.50,0.60,0.70,0.80,

0.90,0.97.0.98,0.99,代入xmasorA,b,,majacobiA,b并利用分别分析与雅可比迭代求的解的误差。

运行结果为:

表3-1 1的情况

k

1.00 8 9.7346e-007

1.10 10 9.6821e-007

1.20 12 1.0307e-006

1.30 16 1.0200e-006

1.40 20 1.1434e-006

1.60 36 1.2272e-006 1.70 51 1.4364e-006 1.80 83 1.4657e-006 1.90 177 1.7205e-006 1.91 198 1.7542e-006 1.92 224

2.2548e-006 1.95 321 1.5060e-006 1.97 471 1.8146e-006 1.98 500

1.99 500

表3-2 1的情况

k

0.00

0.02 500

0.03 386 3.8618e-004 0.04 297 2.8217e-004 0.10 126 1.0286e-004 0.20 64 4.0889e-005 0.30 42 2.1010e-005 0,40 30 1.4555e-005 0.50 23 8.1655e-006

0.70 14 3.7920e-006

0.80 11 2.3675e-006

0.90 9 1.0772e-006

0.97 8 9.7786e-007

0.98 8 9.7481e-007

0.99 8 9.7361e-007

结果分析:

(1)由表1-1可以看出,在其它条件不变的情况下,改变的值,会改变解得值,且越接近于1,误差越小,越接近于2,误差越大,而且当的值越大,它的迭代次数越大,就本例而言,当为1.98时,就因迭代次数过大,跳出程序;

(2)由表1-2可以看出,在其它条件不变的情况下,改变的值,会改变解得值,且越接近于1,误差越小,越接近于0,误差越大,且迭代次数也越大,就本例而言,当为0.02时,就因迭代次数过大,跳出程序,且不能取值为0;

(3)综上(1)(2)所述,的取值范围为02,且越接近1,误差值越小,迭代次数也越小。

致谢

毕业设计是对我们知识能力的一次全面考核,也是对我们科学研究基本功的训练,培养我们综合运用所学知识独立的分析问题和解决问题的能力,为以后撰写专业学术论文和工作打下良好基础。

本次设计能够顺利完成,首先要感谢我的母校??河南工程学院。是她为我们提供了学习知识的土壤,使我们在这里茁壮成长,其次要感谢赵恒军老师在设

计工程中给予我的悉心指导,她认真负责的态度,严谨的治学精神和深厚的理论水平都是我受益匪浅。她无论在理论上还是实践中,都给予我很大的帮助,感谢她耐心的辅导,谨向赵老师致以真诚的谢意!在今后的人生道路上,我一定谨遵恩师的教诲,发挥自己的潜能。同时,同学们的热心帮助也使我获益菲浅,没有他们我不会取得如此大的进步,在此一并感谢!最后要感谢相关资料的编著者和给予我们支持的社会各界人士,感谢您们为我提供一个良好的环境,使这次设计圆满完成。

由于知识有限,论文还有很多欠缺之处,请各位审阅老师指正,多提宝贵意见,特此感谢!

参考文献

[1]陈桂秀,方程求解中迭代法的使用[N],青海师范大学学报自然科学版,2009 年第 1 期 .

[2]曹志浩.数值线性代数[M].复旦大学出版社,1996

[3]G.E.福赛斯,C.B.莫勒.线性代数方程组的计算机解法[M],徐树荣译.科学出版社,1976 [4]蒋尔雄等.数值逼近[M].复旦大学出版社,1996.

[5]王能超.计算方法简明教程,高等教育出版社[M], 2004,01.

[6]石东洋.计算方法.郑州大学出版社[M],2007,(05).

[7]李庆杨,王能超,易大义.数值分析.华中工学院出版社[M],1982

[8]袁慰平,张令敏,黄新芹.计算方法与实习.东南大学出版设[M],1992

[9]姚敬之.计算方法.河南大学出版设[M],1993.

[10]陈兰平,王凤等.数值分析.科学出版设[M],2000,08.

[11]田学全,朱世建.有无穷解的线性方程组的迭代法[N],塔里木农垦大学学报,

第16卷第2 期,2004,6.

[12]花威,线性方程组的迭代解法及其 Matlab实现程序[N],长江工程职业技术学院学报,第2 6卷第4期,2009,12.

[13]张传文.新预条件下矩阵的收敛性分析及其比较[D].扬州大学,2010,4.

[14]陈丽红,周志刚,万立.求解线性方程组的一种迭代法的改进.武汉科技学院学报, 第23卷第2期,2010,4.

[15]朱莉, 预处理HSS方法和模糊线性方程组的迭代解法,南京:南京师范大学,

2007,4.

[16]常双领, 张传林. 求解线性方程组的一种迭代解法[J]. 暨南大学学报,

20043: 06.

[17]葛学滨.线性方程组节结构的历史研究.山东:山东大学,2009.

[18]韩丹夫,吴庆标. 数值计算方法.浙江大学出版社,2006,(06).

[19]胡家赣,线性方程组的迭代解法[M].北京,科学出版社,1999.

[20]白红梅 .Jacobi迭代法与Gauss-Seidel迭代法的收敛性比较分析[J].呼伦贝尔

学院学报,第 17 卷第 6 期 2009,12附录

附录一

%--------------CG_Method

%Adlmreadfilename',\t';

%bdlmreadfilename',\t';

clear

tic%开始记录cpu时间

Aeye128

IA;

A20.A;

Fzeros1,128;

for i1:128

ifi1&i128

Fi-1;

end

end

A1,:A1,:+F;

A:,1A:,1+F';

A128,:A128,:+F;

A:,128A:,128+F';

A1,1280;

A128,10; %以上几步取得A为128阶对称正定矩阵。若要取阶数64则将本文中128全替换成64

for i1:128Xi1; %设定精确解X{1,1,1,,1},以便与迭代得出的解向量比较end

delta0.0001;

bAX';

for i1:128 uii;

end

xu'; %设定初始解向量为向量{1,2,3,,128}

iteratorNum0; %iteratorNum用来记录迭代次数

rb-Ax;

qr'r;

whilesqrtqdelta&&iteratorNum1000 iteratorNumiteratorNum+1;

if iteratorNum 1 pr;

else 1q/q1; pr+1p;

end

wAp;

jq/p'w;

rr-jw;

q1q;

qr'r;

end

x%显示迭代结果

iteratorNum%显示迭代次数

disp('x-X');

dispx-X' %显示迭代结果误差

toc %结束记录cpu时间并输出程序执行时间。附录二

clc

n20;

Azerosn;

m4;

for i1:n Ai,im;

end

for i1:n-1 Ai,i+1-1/3; Ai+1,i-1/3;

end

for i1:n-2 Ai,i+2-1/5; Ai+2,i-1/5;

end

x0onesn,1;

迭代法求解线性方程组的研究

迭代法求解线性方程组的研究 【摘要】:本文总结了解线性方程组的三个迭代法,Jacobi 迭代法,Gauss-seidel 迭代法,SOR 迭代法,并且介绍了现代数值计算软件MATLAB 在这方面的应用,即分别给出三个迭代法的数值实验。 【关键字】:Jacobi 迭代法 Gauss-seidel 迭代法 SOR 迭代法 数值实验 一. 引言 迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,它是解高阶稀疏方程组的重 要方法。 迭代法的基本思想是用逐次逼近的方法求解线性方程组。 设有方程组 b Ax = …① 将其转化为等价的,便于迭代的形式 f Bx x += …② (这种转化总能实现,如令b f A I B =-=,), 并由此构造迭代公式 f Bx x k k +=+)() 1( …③ 式中B 称为迭代矩阵,f 称为迭代向量。对任意的初始向量) 0(x ,由式③可求得向量序列 ∞0)(}{k x ,若*) (lim x x k k =∞ →,则*x 就是方程①或方程②的解。此时迭代公式②是收敛的,否则称为发散的。构造的迭代公式③是否收敛,取决于迭代矩阵B 的性质。 本文介绍三种解线性方程组的最主要的三种迭代法:Jacobi 迭代法,Gauss-Seidel 迭代法和SOR 迭代法。本文结构如下:第二部分介绍Jacobi 迭代法及其数值实验,第三部分介绍Gauss-Seidel 迭代法及其数值实验,第四部分介绍SOR 迭代法及其数值实验,第五部分总结。 二. 雅克比(Jacobi )迭代法 1. 雅克比迭代法的格式 设有方程组

),,3,2,1(1 n i b x a j j n j ij ==∑= …① 矩阵形式为b Ax =,设系数矩阵A 为非奇异矩阵,且),,3,2,1(,0n i a ii =≠ 从式①中第i 个方程中解出x ,得其等价形式 )(1 1 1j n j j ij ii i x a b a x ∑≠=-= …② 取初始向量),,,() 0()0(2)0(1) 0(n x x x x =,对式②应用迭代法,可建立相应的迭代公式: )(11 1)() 1(∑≠=++-=n j j i k j ij ii k i b x a a x …③ 也可记为矩阵形式: J x J k F B x k +==) () 1( …④ 若将系数矩阵A 分解为A=D-L-U ,式中 ???? ? ? ? ??=nn a a a D 2211, ?? ? ?? ?? ? ??=--00 00121323121nn n n a a a a a a L , ?? ? ??? ? ? ? ?=--00 00122311312n n n n a a a a a a D 。 则方程Ax=b 变为 b x U L D =--)( 得 b x U L Dx ++=)( 于是 b D x U L D x 1 1 )(--++=

常微分方程的解线性方程组的迭代法

实验五 解线性方程组的迭代法 【实验内容】 对1、设线性方程组 ?? ? ? ?? ? ? ?? ? ? ?? ? ? ??-=???????????????? ?????????????????? ? ?--------------------------211938134632312513682438100412029137264 2212341791110161035243120 536217758683233761624491131512 013012312240010563568 0000121324 10987654321x x x x x x x x x x ()T x 2,1,1,3,0,2,1,0,1,1*--= 2、设对称正定系数阵线性方程组 ?? ? ????? ??? ? ? ??---=????????????? ??????????????? ??---------------------4515229 23206019243360021411035204111443343104221812334161 2065381141402312122 00240424 87654321x x x x x x x x ()T x 2,0,1,1,2,0,1,1*--= 3、三对角形线性方程组

?? ? ?? ? ????? ??? ? ? ??----=???????????????? ?????????????????? ??------------------5541412621357410000000014100000000141000000001410000000014100000000141000000001410000000014100000000 14100000000 1410987654321x x x x x x x x x x ()T x 1,1,0,3,2,1,0,3,1,2*---= 试分别选用Jacobi 迭代法,Gauss-Seidol 迭代法和SOR 方法计算其解。 【实验方法或步骤】 1、体会迭代法求解线性方程组,并能与消去法加以比较; 2、分别对不同精度要求,如54310,10,10---=ε由迭代次数体会该迭代法的收敛快慢; 3、对方程组2,3使用SOR 方法时,选取松弛因子ω=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者; 4、给出各种算法的设计程序和计算结果。 程序: 用雅可比方法求的程序: function [x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200;

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

第六章解线性方程组的迭代法

第五章 解线性方程组的迭代法 本章主要内容: 迭代法收敛定义,矩阵序列收敛定义,迭代法基本定理,雅可比迭代法,高斯-塞德尔迭代法,系数矩阵为严格对角占优阵的采用雅可比迭代、高斯-塞德尔迭代的收敛性。 教学目的及要求: 使学生了解迭代法收敛定义,迭代法基本定理,掌握雅可比迭代法、高斯-塞德尔迭代法。 教学重点: 雅可比迭代法,高斯-塞德尔迭代法。 教学难点: 迭代法基本定理的证明以及作用。 教学方法及手段: 应用严格的高等代数、数学分析知识,完整地证明迭代法基本定理,讲清雅可比迭代法与高斯-塞德尔迭代法的关系,介绍雅可比迭代法与高斯-塞德尔迭代法在编程中的具体实现方法。 在实验教学中,通过一个具体实例,让学生掌握雅可比迭代法与高斯-塞德尔迭代法的具体实现,并能通过数值计算实验,揭示高斯-塞德尔迭代法是对雅可比迭代法的一种改进这一事实。 教学时间: 本章的教学的讲授时间为6学时,实验学时4学时。 教学内容: 一 迭代法定义 对于给定的线性方程组x Bx f =+,设它有唯一解*x ,则 **x Bx f =+ (6.1) 又设(0)x 为任取的初始向量,按下述公式构造向量序列 (1)(),0,1,2,k k x Bx f k +=+=L (6.2) 这种逐步代入求近似解的方法称为迭代法(这里B 与f 与k 无关)。如果() lim k k x →∞ 存在 (记为*x ),称此迭代法收敛,显然*x 就是方程组的解,否则称此迭代法发散。 迭代法求方程近似解的关键是是讨论由(6.1)式所构造出来的向量序列() {} k x 是否收敛。为此,我们引入误差向量 (1)(1)*k k x x ε++=- 将(6.2)式与(6.1)式相减,我们可得 (1)*()*()k k x x B x x +-=- (1)(),0,1,2,k k B k εε+==L 递推下去,得 ()(1)2(2)(0)k k k k B B x B x εε--====L

线性方程组的迭代法及程序实现

线性方程组的迭代法及程序实现 学校代码:11517 学号:200810111217 HENAN INSTITUTE OF ENGINEERING 毕业论文 题目线性方程组的迭代法及程序实现 学生姓名 专业班级 学号 系 (部)数理科学系 指导教师职称 完成时间 2012年5月20日河南工程学院 毕业设计(论文)任务书 题目:线性方程组的迭代法及程序实现专业:信息与计算科学学号 : 姓名一、主要内容: 通过本课题的研究,学会如何运用有限元方法来解决线性代数方程组问题,特别是Gaussie-Seidel迭代法和Jacobi迭代法来求解线性方程组。进一步学会迭代方法的数学思想,并对程序代码进行解析与改进,这对于我们以后学习和研究实际问题具有重要的意义。本课题运用所学的数学专业知识来研究,有助于我们进一步掌握大学数学方面的知识,特别是迭代方法。通过这个课题的研究,我进一步掌握了迭代方法的思想,以及程序的解析与改进,对于今后类似实际问题的解决具有重要的意义。

二、基本要求: 学会编写规范论文,独立自主完成。 运用所学知识发现问题并分析、解决。 3.通过对相关资料的收集、整理,最终形成一篇具有自己观点的学术论文,以期能对线性方程组迭代法的研究发展有一定的实践指导意义。 4.在毕业论文工作中强化英语、计算机应用能力。 完成期限: 2012年月指导教师签名:专业负责人签名: 年月日 目录 中文摘要....................................................................................Ⅰ英文摘要 (Ⅱ) 1 综述 1 2 经典迭代法概述 3 2.1 Jacobi迭代法 3 2.2 Gauss?Seidel迭代法 4 2.3 SOR(successive over relaxation)迭代法 4 2.4 SSOR迭代法 5 2.5 收敛性分析5 2. 6 数值试验 6 3 matlab实现的两个例题8 3.1 例1 迭代法的收敛速度8 3.2 例 2 SOR迭代法松弛因子的选取 12致谢16参考文献17附录19

求解线性方程组——超松弛迭代法(c)

求解线性方程组——超松弛迭代法 #include #include using namespace std; float *one_array_malloc(int n); //一维数组分配float **two_array_malloc(int m,int n); //二维数组分配float matrix_category(float* x,int n); int main() { const int MAX=100;//最大迭代次数 int n,i,j,k; float** a; float* x_0; //初始向量 float* x_k; //迭代向量 float precision; //精度 float w; //松弛因子 cout<<"输入精度e:"; cin>>precision; cout<>n; a=two_array_malloc(n,n+1); cout<>a[i][j]; } } x_0=one_array_malloc(n); cout<>x_0[i]; } x_k=one_array_malloc(n);

cout<<"输入松弛因子w (1>w; float temp; //迭代过程 for(k=0;k

数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组

作业六:分别编写用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组Ax=B的标准程序,并求下列方程组的解。 可取初始向量 X(0) =(0,0,0)’; 迭代终止条件||x(k+1)-x(k)||<=10e-6 (1) = (2) = Jacobi迭代法: 流程图 开 始 判断b中的最大值 有没有比误差大 给x赋初值 进行迭代 求出x,弱到100次还没到,警告不收 结束

程序 clear;clc; A=[8,-1,1;2,10,01;1,1,-5]; b=[1;4;3]; e=1e-6; x0=[0;0;0]'; n=length(A); x=zeros(n,1); k=0; r=max(abs(b)); while r>e for i=1:n d=A(i,i); if abs(d)100 warning('不收敛'); end end x=x0;

程序结果(1)

(2)

Gauss-Seidel迭代法: 程序 clear;clc; %A=[8,-1,1;2,10,01;1,1,-5]; %b=[1;4;3]; A=[5,2,1;-1,4,2;2,-3,10]; b=[-12;20;3]; m=size(A); if m(1)~=m(2) error('矩阵A不是方阵'); end n=length(b); %初始化 N=0;%迭代次数 L=zeros(n);%分解A=D+L+U,D是对角阵,L是下三角阵,U是上三角阵U=zeros(n); D=zeros(n); G=zeros(n);%G=-inv(D+L)*U d=zeros(n,1);%d=inv(D+L)*b x=zeros(n,1); for i=1:n%初始化L和U for j=1:n if ij U(i,j)=A(i,j); end end end for i=1:n%初始化D D(i,i)=A(i,i); end G=-inv(D+L)*U;%初始化G d=(D+L)\b;%初始化d %迭代开始 x1=x; x2=G*x+d; while norm(x2-x1,inf)>10^(-6)

线性方程组的迭代求解java

线性方程组的迭代求解 摘要 迭代法是一种逐次逼近方法,在使用迭代法解方程组时,其系数矩阵在计算过程中始终不变。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行。迭代法具有循环的计算方法,方法简单,适宜解大型稀疏矩阵方程组 本文总结了解线性方程组的三个迭代法,Jacobi迭代法,Gauss-Seidel迭代法,SOR 迭代法,并且介绍了软件JA V A在这方面的应用。 关键词: Jacobi迭代法;Gauss-Seidel迭代法;SOR迭代法;计算

SOLUTION OF LINEAR EQUATIONS OF ITERATION WITH THE EXPERIMENTAL ABSTRACT Iteration is a kind of method to solve questions by step-by-step approximation. When we are getting the solution of linear equations by using iteration, the coefficient matrix is always staying the same in computation process. Computer could operate fastly so that it is suitable for operating again and again. Iteration is easy to operate to solve the large matrix equations by using a calculate method called circulation. This summary understanding of linear equations three kind of iteration, Jacobi iteration, Gauss-Seidel iteration, successive over relaxation method ,and introduce modern software JA V A in this respect. Key words:Jacobi iteration; Gauss-Seidel iteration; Successive Over Relaxation method ; calculating

SOR迭代法求解线性方程组

实验三:用SOR 迭代法求解线性方程组 ?????? ? ??=??????? ????????? ??----------74.012.018.168.072.012.006.016.012.001.103.014.006.003.088.001.016.014.001.076.04321x x x x 取初始点T x )0,0,0,0()0(=,松弛因子05.1=ω,精度要求610-=ε。 1,建立SOR.m 函数文件,此函数文件可调用,程序源码如下: function [x,n]=SOR(A,b,x0,w,eps,M) if nargin==4 eps= 1.0e-6;%精度要求 M = 200; elseif nargin<4 error; return elseif nargin ==5 M = 200; end if(w<=0 || w>=2) error; return; end D=diag(diag(A)); %求A 的对角矩阵 L=-tril(A,-1); %求A 的下三角阵 U=-triu(A,1); %求A 的上三角阵 B=inv(D-L*w)*((1-w)*D+w*U); f=w*inv((D-L*w))*b; x=B*x0+f; n=1; %迭代次数 while norm(x-x0)>=eps x0=x; x =B*x0+f; n=n+1; if(n>=M) disp('Warning: 迭代次数太多,可能不收敛!'); return; end end

2,输入矩阵。并根据要求调用函数,运行结果如下图所示: 即经过7次迭代算出结果,且求得: 1.27151.28440.48581.2843x ?? ? ?= ? ???

数值计算_第4章 解线性方程组的迭代法

第4章解线性方程组的迭代法 用迭代法求解线性方程组与第4章非线性方程求根的方法相似,对方程组进行等价变换,构造同解方程组(对可构造各种等价方程组, 如分解,可逆,则由得到),以此构造迭代关系式 (4.1) 任取初始向量,代入迭代式中,经计算得到迭代序列。 若迭代序列收敛,设的极限为,对迭代式两边取极限 即是方程组的解,此时称迭代法收敛,否则称迭代法发散。我们将看到,不同于非线性方程的迭代方法,解线性方程组的迭代收敛与否完全决定于迭代矩阵的性质,与迭代初始值的选取无关。迭代法的优点是占有存储空间少,程序实现简单,尤其适用于大型稀疏矩阵;不尽人意之处是要面对判断迭代是否收敛和收敛速度的问题。 可以证明迭代矩阵的与谱半径是迭代收敛的充分必要条件,其中是矩阵的特征根。事实上,若为方程组的解,则有 再由迭代式可得到

由线性代数定理,的充分必要条件。 因此对迭代法(4.1)的收敛性有以下两个定理成立。 定理4.1迭代法收敛的充要条件是。 定理4.2迭代法收敛的充要条件是迭代矩阵的谱半径 因此,称谱半径小于1的矩阵为收敛矩阵。计算矩阵的谱半径,需要求解矩阵的特征值才能得到,通常这是较为繁重的工作。但是可以通过计算矩阵的范数等方法简化判断收敛的 工作。前面已经提到过,若||A||p矩阵的范数,则总有。因此,若,则必为收敛矩阵。计算矩阵的1范数和范数的方法比较简单,其中 于是,只要迭代矩阵满足或,就可以判断迭代序列 是收敛的。 要注意的是,当或时,可以有,因此不能判断迭代序列发散。

在计算中当相邻两次的向量误差的某种范数小于给定精度时,则停止迭代计算,视为方程组的近似解(有关范数的详细定义请看3.3节。) 4.1雅可比(Jacobi)迭代法 4.1.1 雅可比迭代格式 雅可比迭代计算 元线性方程组 (4.2) 写成矩阵形式为。若将式(4.2)中每个方程的留在方程左边,其余各项移到方程右边;方程两边除以则得到下列同解方程组: 记,构造迭代形式

Gauss-Seidel迭代法求解线性方程组

Gauss-Seidel迭代法求解线性方程组

一. 问题描述 用Gauss-Seidel 迭代法求解线性方程组 由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值。使用了两倍的存储空间,浪费了存储空间。若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量 ) 1(+k i x 时,用最新分量 ) 1(1 +k x , ???+) 1(2 k x ) 1(1 -+k i x 代替旧分量 ) (1 k x , ???) (2 k x ) (1 -k i x ,可以起 到节省存储空间的作用。这样就得到所谓解方程组的Gauss-Seidel 迭代法。 二. 算法设计 将A 分解成U D L A --=,则b x =A 等价于b x =--U)D (L 则Gauss-Seidel 迭代过程 ) ()1()1(k k k Ux Lx b Dx ++=++ 故 ) ()1()(k k Ux b x L D +=-+ 若设1 )(--L D 存在,则 b L D Ux L D x k k 1)(1)1()()(--+-+-= 令 b L D f U L D G 11)()(---=-=,

则Gauss-Seidel 迭代公式的矩阵形式为 f Gx x k k +=+) () 1( 其迭代格式为 T n x x x x ) ()0()0(2)0(1)0(,,,???= (初始向量), ) (1 1 1 1 1 )()1()1(∑∑-=-+=++--=i j i i j k j ij k j ij i ii i i x a x a b a x )210i 210(n k ???=???=,,,;,,, 或者 ?? ???--=???=???==?+=∑∑-=-+=+++) (1)210i 210(111 1)()1()1()()1(i j i i j k j ij k j ij i ii i i i k i k i x a x a b a x n k k x x x ,,,;,,, 三. 程序框图

线性方程组的迭代解法(Matlab)

第六章线性方程组的迭代解法 2015年12月27日17:12 迭代法是目前求解大规模稀疏线性方程组的主要方法之一。包括定常迭代法和不定常迭代法,定常迭代法的迭代矩阵通常保持不变,包括有雅可比迭代法(Jacobi)、高斯-塞德尔迭代法(Gauss-Seidel)、超松弛迭代法(SOR) 1.雅可比迭代法(Jacobi) A表示线性方程组的系数矩阵,D表示A的主对角部分,L表示下三角部分,U表示上三角部分。 A=D+L+U 要解的方程变为Dx+Lx+Ux=b x=D^(-1)(b-(L+U)x) 所以Jocabi方法如下: Matlab程序 function [x,iter] =jacobi(A,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); x=zeros(size(b)); for iter=1:500 x=D\(b+L*x+U*x); error=norm(b-A*x)/norm(b); if(error

迭代法解线性方程组

迭代法解线性方程组作业 沈欢00986096 北京大学工学院,北京100871 2011年10月12日 摘要 由所给矩阵生成系数矩阵A和右端项b,分析系数矩阵A,并用Jacobi迭代法、GS迭代法、SOR(逐步松弛迭代法)解方程组Ax=b 1生成系数矩阵A、右端项b,并分析矩阵A 由文件”gr900900c rg.mm”得到了以.mm格式描述的系数矩阵A。A矩阵是900?900的大型稀 疏对称矩阵。于是,在matlaB中,使用”A=zeros(900,900)”语句生成900?900的零矩阵。再 按照.mm文件中的描述,分别对第i行、第j列的元素赋对应的值,就生成了系数矩阵A,并 将A存为.mat文件以便之后应用。 由于右端项是全为1的列向量,所以由语句”b=ones(900,1)”生成。 得到了矩阵A后,求其行列式,使用函数”det(A)”,求得结果为”Inf”,证明行列式太大,matlaB无法显示。由此证明,矩阵A可逆,线性方程组 Ax=b 有唯一解。 接着,判断A矩阵是否是对称矩阵(其实,这步是没有必要的,因为A矩阵本身是对称矩阵,是.mm格式中的矩阵按对称阵生成的)。如果A是对称矩阵,那么 A?A T=0 。于是,令B=A?A T,并对B求∞范数。结果显示: B ∞=0,所以,B是零矩阵,也就是:A是对称矩阵。 然后,求A的三个条件数: Cond(A)= A ? A?1 所求结果是,对应于1范数的条件数为:377.2334;对应于2范数的条件数为:194.5739;对应 于3范数的条件数为:377.2334; 1

从以上结果我们看出,A是可逆矩阵,但是A的条件数很大,所以,Ax=b有唯一解并且矩阵A相对不稳定。所以,我们可以用迭代方法来求解该线性方程组,但是由于A的条件数太大迭代次数一般而言会比较多。 2Jacobi迭代法 Jacobi迭代方法的程序流程图如图所示: 图1:Jacobi迭代方法程序流程图 在上述流程中,取x0=[1,1,...,1]T将精度设为accuracy=10?3,需要误差满足: error= x k+1?x k x k+1

高斯-赛德尔迭代法解线性方程组精选.

数值分析实验五 班级: 10信计二班 学号:59 姓名:王志桃 分数: 一.实验名称 高斯-赛德尔迭代法解线性方程组 二.实验目的 1. 学会利用高斯赛德尔方法解线性方程组 2. 明白迭代法的原理 3. 对于大型稀疏矩阵方程组适用于迭代法比较简单 三.实验内容 利用Gauss-Seidel 迭代法求解下列方程组 ?????=++=-+=+-36123633111420238321 321321x x x x x x x x x , 其中取→=0)0(x 。 四、算法描述 由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值,若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量)1(+k i x 时,用最新分量)1(1+k x ,???+)1(2k x )1(1-+k i x 代替旧分量)(1k x ,???)(2k x )(1-k i x ,就得到所谓解方程组的Gauss-Seidel 迭代法。 其迭代格式为 T n x x x x )()0()0(2)0(1)0(,,,???= (初始向量), )(11111)()1( ) 1(∑∑-=-+=++--=i j i i j k j ij k j ij i ii i i x a x a b a x )210i 210(n k ???=???=,,,;,,, 或者写为 ?? ???--=???=???==?+=∑∑-=-+=+++)(1)210i 210(1111)( )1()1()()1(i j i i j k j ij k j ij i ii i i i k i k i x a x a b a x n k k x x x ,,,;,,, 五、 编码 #include #include

实验解线性方程组的基本迭代法实验

数值分析实验报告

0 a 12 K a 1,n 1 K a 2,n 1 U O M 则有: 第一步: Jacobi 迭代法 a 1n a 2n M , 则有: A D L U a n 1,n Ax b A A x D b L U (D L U)x b Dx (L U)x b x D (L U)x D b 令 J D (L U) 则称 J 为雅克比迭代矩阵 f D b 由此可得雅克比迭代的迭代格式如下: x (0) , 初始向量 x (k 1) Jx (k) f ,k 0,1,2,L 第二步 Gauss-Seidel 迭代法 Ax b (D L U )x b (D L)x Ux b x (D L) Ux (D L) b A D L U a 11 a 12 L a 1n a 11 A a 21 a 22 L a 2n a 22 M MM MO a n1 a n2 L a nn a 11 得到 D a 22 O a nn 由 a 21 0 M M O a n 1,1 a n 1,2 L 0 a nn a n1 a n2 L a n,n a 21 L M M O a n 1,1 a n 1,2 L a n1 a n2 L a n,n 1 a 12 K a 1,n 1 a 1n 0 K a 2,n 1 a 2n O M M a n 1,n 10

令 G (D L) U ,则称G 为Gauss-Seidel 迭代矩阵 f (D L) b 由此可得 Gauss-Seidel 迭代的迭代格式如下: x (0) , 初始向量 第三步 SOR 迭代法 w0 AD L U 1 ( D 1 wL ((1 w)D wU )) (D 1 wL) ((1 w)D wU ) w w w 令M w 1 (D wL), N 1 ((1 w)D wU )则有:A MN w w Ax b AM L W N M (M N )x b Mx Nx b x M Nx M b N M, 令W f Mb 带入 N 的值可有 L W ((1 w)D wU) (D wL) 1((1 w)D wU) (D wL) f 1 b w 1(D wL) 1b 1 (D wL) w 称 L W 为 SOR 迭代矩阵,由此可得 SOR 迭代的迭代格式如下: x (0) ,初始向量 二、算法程序 Jacobi 迭代法的 M 文件: function [y,n]=Jacobi(A,b,x0,eps) %************************************************* %函数名称 Jacobi 雅克比迭代函数 %参数解释 A 系数矩阵 % b 常数项 % x0 估计解向量 x (k 1) Gx (k) f ,k 0,1,2,L (k 1) f,k 0,1,2,L

Gauss-Seidel迭代法求解线性方程组

一. 问题描述 用Gauss-Seidel 迭代法求解线性方程组 由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值。使用了两倍的存储空间,浪 费了存储空间。若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量) 1(+k i x 时, 用最新分量) 1(1 +k x ,???+) 1(2 k x ) 1(1 -+k i x 代替旧分量)(1k x ,???) (2 k x ) (1-k i x ,可以起到节省存储 空间的作用。这样就得到所谓解方程组的Gauss-Seidel 迭代法。 二. 算法设计 将A 分解成U D L A --=,则b x =A 等价于b x =--U)D (L 则Gauss-Seidel 迭代过程 ) ()1()1(k k k Ux Lx b Dx ++=++ 故 )()1()(k k Ux b x L D +=-+ 若设1 )(--L D 存在,则 b L D Ux L D x k k 1)(1)1()()(--+-+-= 令 b L D f U L D G 11)()(---=-=, 则Gauss-Seidel 迭代公式的矩阵形式为 f Gx x k k +=+)()1( 其迭代格式为 T n x x x x )()0()0(2)0(1)0(,,,???= (初始向量), )(1111 1 )() 1()1(∑∑-=-+=++--=i j i i j k j ij k j ij i ii i i x a x a b a x )210i 210(n k ???=???=,,,;,,, 或者 ?? ???--=???=???==?+=∑∑-=-+=+++) (1)210i 210(111 1)() 1()1()()1(i j i i j k j ij k j ij i ii i i i k i k i x a x a b a x n k k x x x ,,,;,,, 三. 程序框图

迭代法解线性方程组(C语言描述)

用Gauss-Seidel迭代法解线性方程组的C语言源代码:#include #include #include struct Line{ int L; struct Row *head; struct Line *next; }; struct Row{ int R; float x; struct Row *link; }; //建立每次迭代结果的数据存储单元 struct Term{ float x; float m; }; struct Line *Create(int Line,int Row){ struct Line *Lhead=NULL,*p1=NULL,*p2=NULL; struct Row*Rhead=NULL,*ptr1,*ptr2=NULL; int i=1,j=1; float X; while(i<=Line){ while(j<=Row+1){ scanf("%f",&X); if(X!=0||j==Row+1){ ptr1=(struct Row*)malloc(sizeof(Row)); if(ptr1==NULL){ printf("内存分配错误!\n"); exit(1); } ptr1->x=X; ptr1->R=j; if(ptr2==NULL){ ptr2=ptr1; Rhead=ptr1; } else{

ptr2->link=ptr1; ptr2=ptr1; } } j++; } if(ptr2!=NULL){ ptr2->link=NULL; ptr2=NULL; } if(Rhead!=NULL){ p1=(struct Line*)malloc(sizeof(Line)); if(p1==NULL){ printf("内存分配错误!\n"); exit(1); } p1->L=i; p1->head=Rhead; if(p2==NULL){ Lhead=p1; p2=p1; } else{ p2->next=p1; p2=p1; } } i++; Rhead=NULL; j=1; } if(p2!=NULL) p2->next=NULL; return Lhead; } struct Line *Change(struct Line*Lhead,int n){ struct Line*p1,*p2,*p3,*p; struct Row*ptr; int i=1,k,j; float max,t; if(Lhead==NULL){ printf("链表为空!\n");

解线性方程组的直接法和迭代法

数值分析方法中方程求解的直接法和迭代法 第3章 解线性方程组的直接法 一、 消元法 1. 高斯消元法(加减消元):首先将A 化为上三角阵,再回代求解。 11121121222212n n n n nn n a a a b a a a b a a a b ?? ? ? ? ??? (1)(1)(1)(1)(1)11 121311(2)(2)(2)(2)222322 (3)(3)(3)3333()()000 00 n n n n n nn n a a a a b a a a b a a b a b ?? ? ? ? ? ? ?? ? 步骤如下: 第一步:1 11 1,2,,i a i i n a -? +=第行第行 11121121222212 n n n n nn n a a a b a a a b a a a b ?? ? ? ? ??? 111211(2)(2)(2)2222 (2)(2)(2)2 00n n n nn n a a a b a a b a a b ?? ? ? ? ??? 第二步:(2)2 (2)222,3, ,i a i i n a -?+=第行第行 111211(2)(2)(2)2222 (2)(2)(2)200n n n nn n a a a b a a b a a b ?? ? ? ? ?? ? 111213 11 (2)(2)(2)(2) 222322 (3)(3)(3) 33 33(3)(3)(3) 3 00000n n n n nn n a a a a b a a a b a a b a a b ?? ? ? ? ? ? ?? ? 类似的做下去,我们有: 第k 步:() ()k ,1, ,k ik k kk a i i k n a -?+=+第行第行。 n -1步以后,我们可以得到变换后的矩阵为:

线性方程组的直接法和迭代法

线性方程组的直接法 直接法就是经过有限步算术运算,无需迭代可直接求得方程组精确解的方法。 线性方程组迭代法 迭代法就是用某种极限过程去逐步逼近线性方程组精确解的方法.该方法具有对计算机的存贮单元需求少,程序设计简单、原始系数矩阵在计算过程中不变等优点,是求解大型稀疏矩阵方程组的重要方法.迭代法不是用有限步运算求精确解,而是通过迭代产生近似解逼近精确解.如Jacobi 迭代、Gauss — Seidel 迭代、SOR 迭代法等。 1. 线性方程组的直接法 直接法就是经过有限步算术运算,无需迭代可直接求得方程组精确解的方法。 1.1 Cramer 法则 Cramer 法则用于判断具有n 个未知数的n 个线性方程的方程组解的情况。当方程组的系数行列式不等于零时,方程组有解且解唯一。如果方程组无解或者有两个不同的解时,则系数行列式必为零。如果齐次线性方程组的系数行列式不等于零,则没有非零解。如果齐次线性方程组有非零解,则系数行列式必为零。 定理1如果方程组Ax b =中0D A =≠,则Ax b =有解,且解事唯一的,解为1212,,...,n n D D D x x x D D D ===i D 是D 中第i 列换成向量b 所得的行列式。 Cramer 法则解n 元方程组有两个前提条件: 1、未知数的个数等于方程的个数。 2、系数行列式不等于零 例1 a 取何值时,线性方程组

1231231 2311x x x a ax x x x x ax ++=??++=??++=?有唯一解。 解:2111111 11011(1)11001 A a a a a a a ==--=--- 所以当1a ≠时,方程组有唯一解。 定理2当齐次线性方程组0Ax =,0A ≠时该方程组有唯一的零解。 定理3齐次线性方程组0Ax =有非零解0A <=>=。 1.2 Gauss 消元法 Gauss 消元法是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。 1.2.1 用Gauss 消元法为线性方程组求解 eg :Gauss 消元法可用来找出下列方程组的解或其解的限制: ()()()123283211223x y z L x y z L x y z L +-=??--+=-??-++=-? 这个算法的原理是:首先,要将1L 以下的等式中的x 消除,然后再将2L 以下的等式中的y 消除。这样可使整个方程组变成一个三角形似的格式。之后再将已得出的答案一个个地代入已被简化的等式中的未知数中,就可求出其余的答案了。 在刚才的例子中,我们将132 L 和2L 相加,就可以将2L 中的x 消除了。

相关文档
相关文档 最新文档