研究生数值分析(12)---高斯-赛德尔(Gauss-Seidel)迭代法

合集下载

高斯-赛德尔迭代法的算法及程序设计

高斯-赛德尔迭代法的算法及程序设计

高斯-赛德尔迭代法的算法及程序设计设方程组Ax b=的系数矩阵的对角线元素(1,2,,)=,M为迭代次数容许的最大i n值,ε为容许误差。

1 取初始向量令k=0.2 对i=1,2,…,n计算3 如果则输出结束;否则执行44 如果则不收敛,终止程序;否则,转2源程序:#include <stdio.h>#include <math.h>#define N 600void main(){int i;double x[4];double c[4][5]={10,-1,2,0,-11,0,8,-1,3,-11,2,-1,10,0,6,-1,3,-1,11,25}; void GaussSeidel(double *,int,double[]);GaussSeidel(c[0],4,x);for(i=0;i<=3;i++)printf("x[%d]=%f\n",i,x[i]);}void GaussSeidel(double *a,int n,double x[]){int i,j,k=1;double d,dx,eps;for(i=0;i<=3;i++)while(1){eps=0;for(i=0;i<=3;i++){d=0;for(j=0;j<=4;j++){if(j==i)continue;d+=*(a+i*(n+1)+j)*x[j];}dx=(*(a+i*(n+1)+n)-d)/(*(a+i*(n+1)+i));eps+=fabs(dx-x[i]);x[i]=dx;}if(eps<1e-6){printf("迭代次数是:%d\n",k);return;}if(k>N){printf("迭代发散n\n");return;}}}输出结果结果分析:从输出结果可以看出此方程组的迭代次数为1,此时能得到精确结果是x[0]=-1.467391,x [1]=-2.358696,x[2] =0.657609,x[3] =2.842391从结果和原有知识可以知道其系数矩阵是严格对角占优的。

Guass-Seidel迭代法

Guass-Seidel迭代法

1、高斯-塞德尔迭代法:实验B 、用Guass-Seidel 迭代法求解12310127.111028.3115 4.2x x x --⎛⎫⎛⎫⎛⎫ ⎪⎪ ⎪--= ⎪⎪ ⎪ ⎪⎪ ⎪--⎝⎭⎝⎭⎝⎭这里要求当()(1)61.010k k x x --∞-<⨯时迭代终止。

高斯-塞德尔迭代法程序代码:GaussSeidel.mfunction [ x ] = GaussSeidel( A, b, x0, epsilon, N ) % GaussSeidel 迭代法求解线性方程组的解 % A 方程组系数矩阵,方阵,% b 方程组右端项,% x0 迭代初始值,列向量% epsilon 精度要求,% N 最大迭代次数% x 迭代结果,方程组的近似解,列向量x=x0; %给x 赋一个值[mA,nA]=size(A);mb=length(b);if mA~=nA || mA~=mbdisp('A ,b 输入不正确!');return;endD=diag(diag(A)); %取出A 的对角矩阵DL=-tril(A,-1); %取出A 的严格下三角矩阵,加负号 U=-triu(A,1); %取出A 的严格上三角矩阵,加负号 B=(D-L)\U; %右除,即inv(D-L)*U;f=(D-L)\b;n=1;while n<=N %迭代x=B*x0+f %将迭代的中间步骤显示在命令窗口 if norm(x-x0,inf)<epsilonn %输出满足精度的迭代次数return;endn=n+1;x0=x;endif n>Ndisp('超出最大迭代次数N ,x 尚未达到精度。

'); endendshi.mA=[10,-1,-2;-1,10,-2;-1,-1,5];b=[7.1;8.3;4.2];x0=[0;0;0];epsilon=10^-6;N=30;[ x ] = GaussSeidel( A, b, x0, epsilon, N );。

高斯赛德尔法

高斯赛德尔法

的系数矩阵A可逆且主对角元素都不为零,令
)
并将A分解成
A = (A D) + D
Dx = (D A)x + b 从而方程可以写成 x = B1 x + f1 令 B = I D A, f = D b 其中
1 1 1 1
以 B 为迭代矩阵的迭代法 称为雅克比迭代法。
1
x ( k +1) = B1 x ( k ) + f1
(k ) 由雅可比迭代公式可知,在迭代的每一步计算过程中是用x 的全部分量 ( k +1 ) ( k+1) x i 时,已经算出最新的 来计算 x 的 所有分量 , 显然在计算第i个分量 分量,但没被利用。因此,将最新算出来的第k+1次近似加以利用,就 得到了高斯赛德尔迭代法。 A = D L U 将矩阵A分解成 其中 D = diag ( a11 ,a 22 ,..., a nn ) , L ,U 是A的主对角除外的下三角 和上三角部分,于是有 (D L )x = Ux + b
ρ 是迭代矩阵的谱半径(B0中绝对值最大的特征值的绝对值)
首先取 α =1.5,迭代若干次后,有 式中: 为第k 次迭代的节点电压与该节 点前次迭代值的差值的绝对值 U ( m ) U ( m 1) 为所有节点中差值绝对值最大的 ∞ Bso为加速迭代矩阵 再有
U ( m ) U ( m 1)
将上式带入最佳加速因子公式得到近似最佳加 速因子 α 。
x = B2 x + f 2 即 B = (D L ) U , f = (D L ) 其中 以 B2 为迭代矩阵的迭代法 x ( k +1) = B2 x ( k ) + f 2 称为高斯-赛德尔迭代法。

Gauss-Seidel迭代法

Gauss-Seidel迭代法

G a u s s-S e i d e l迭代法-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN数值分析课程论文姓名:学号:Gauss-Seidel迭代法求解线性方程组摘要线性方程组的求解在许多的工程技术中是一个极为常见的问题,对于线性方程组的求解无论从理论上还是实践应用上都已经成熟.对于一般线性方程组的求解有Gauss消元法为基础的直接法,也有迭代法.其中Gauss-Seidel是一个重要的组成部分.鉴于此,本论文细致地研究了用Gauss-Seidel迭代法求解线性方程组.论文的第一部分先介绍了迭代法求解线性方程组的一般模式,并给出这种迭代法的收敛性条件,Gauss-Seidel迭代法求解线性方程组的基本原理.这一部分是Gauss-Seidel迭代法的理论基础.论文的第二部分给出了Gauss-Seidel迭代法的具体操作步骤,以伪代码的形式细致的描绘如何使用Gauss-Seidel迭代法的求解方程组.同时,为了验证算法的有效性,在这一部分,还引入一个简单的算例,用于MATLAB编程发现计算结果完全正确.论文的第三部分给出了关于Gauss-Seidel迭代法的MATLAB程序,用于计算线性方程组.关键词:Gauss-Seidel迭代法,基本原理,算例,MATLAB程序目录1 Gauss-Seidel迭代法的基本理论 (1)1.1线性方程组的迭代法求解 (1)1.2Gauss-Seidel迭代法的原理 (2)2.具体的算例和操作步骤 (3)2.1. Gauss-Seidel迭代法的伪代码 (3)2.2.具体的算例验证算法的有效性 (3)3.MATLAB程序 (4)参考文献 (6)Gauss-Seidel 迭代法求解线性方程组一. Gauss-Seidel 迭代法的基本理论1.1线性方程组的迭代法求解在考虑求解线性方程组Ax=b 时,其中A 为非奇异矩阵.尽管Guass 消元法通过有限次运算可以求解此问题,其对应的计算复杂度为3O(n ).但是对于工程技术中和某些偏微分方程过程中出现的大型稀疏型矩阵利用迭代法可以更快的收敛,找到解.另外一方面,由于迭代法占用的计算机内存少,且便于计算.这两方面的优势促成了迭代法求解线性方程组的研究.关于迭代法的收敛的几个判定条件 1(迭代法基本原理)设有方程组f Bx x +=,对于任意初始向量()0x 及任意f ,解此方程组的迭代法(即()()f Bx x k k +=+1)收敛的充要条件是()1<B ρ.2(迭代法收敛的充分条件)如果方程组f Bx x +=的迭代公式为()()f Bx x k k +=+1(()0x 为任意初始向量),且迭代矩阵的某一种范数1<=q B v ,则:︒1迭代法收敛;︒2()()()v k k vk x x q qx x 11-*--≤-;︒3()()()v kvk x x q q xx 011--≤-*.定理3 如果mn RA ⨯∈为严格对角占优阵或为不可约弱对角占优阵,则对于任意的()0x ,解方程组b Ax =的Jacobi 迭代法,Gauss-Seidel 迭代法均收敛.定理4如果A 为对称正定矩阵,且20<<ω,则解式b Ax =的SOR 方法收敛.1.2Gauss-Seidel 迭代法的原理由Jacobi方法迭代公式()()()()010k k xx B x f +⎧⎪⎨=+⎪⎩初始向量,可知,迭代的每一步计算过程,都是用()k x 的全部分量来计算()1+k x 的所有分量,显然在计算第i 个分量()1+k ix时,已经计算出的最新分量()11+k x ,()12+k x ,…,()11+-k i x 没有被利用.从直观上看,最新计算出的分量可能比旧的分量要好些.因此,对这些最新计算出来的第1+k 次近似()1+k x 的分量()1+k jx 加以利用,就得到所谓解方程组的Gauss-Seidel 迭代法(简称G-S 方法):()()()()()T=002010n x x x x ,,, (初始向量),()()()()n i k x a x a b a x i j n i j k j ij k j ij i iik i,,2,1;,2,1,0111111 ==⎪⎪⎭⎫ ⎝⎛--=∑∑-=+=++或写为()()()()()⎪⎩⎪⎨⎧⎪⎪⎭⎫ ⎝⎛--=∆==∆+=∑∑-==++.1,,,2,1;,2,1,01111i j ni j k j ij k iij i ii i i k i k i x a x a b a x n i k x x x上面第2个式子利用了最新计算出的分量()11+k x ,第i 个式子利用了计算出的最新分量()()1,,2,11-=+i j x k j .还可写成矩阵形式()()()()()()k k k k k Ux b x L D Ux Lx b Dx+=-++=+++111,,若设()1--L D 存在,则()()()()b L D Ux L D x k k 111--+-+-=, 于是Gauss-Seidel 迭代公式的矩阵形式为()()f Gx x k k +=+1,()6.2.8 其中 ()U L D G 1--=,()b L D f 1--=.由此可以看出,应用Gauss-Seidel 迭代法解式b Ax =,就是对方程组f Gx x +=应用迭代法.G 称为解式的Gauss-Seidel 迭代法的迭代矩阵.Gauss-Seidel 迭代法的一个明显优点是,在用计算机计算时,只需一组工作单元,以便存放近似解.由式可以看出,每迭代一步只需计算一次矩阵与向量的乘法.二.具体的算例和操作步骤2.1. Gauss-Seidel 迭代法的伪代码 1.输入问题的参数A,b 2.分解A 为D,L,U.3.计算迭代方程G ,f.4.开始迭代,随机设定一个初值.5.以迭代方程更新x 的值.6.如果到达迭代次数,则进入步骤7;否则,回到步骤5.7.输出x ,结束.2.2.具体的算例验证算法的有效性 求解如下的线性方程组1231231238-3+2=204+11-=336+3+12=36x x x x x x x x x ⎧⎪⎨⎪⎩ 这个方程的真实解为(3,2,1). 程序运行结果: 情况1:输入GS (A,b ) GS(A,b)xhis =0 0 0 2.5000 2.0909 1.2273 2.9773 2.0289 1.0041 3.0098 1.9968 0.9959 2.9998 1.9997 1.0002 2.9998 2.0001 1.0001 3.0000 2.0000 1.0000 3.0000 2.0000 1.0000 3.0000 2.0000 1.0000 3.0000 2.0000 1.0000 3.0000 2.0000 1.0000 ans = 3.0000 2.00001.00000.51.5解的迭代情况图一。

数值分析中的高斯-赛德尔迭代法-教案

数值分析中的高斯-赛德尔迭代法-教案

数值分析中的高斯-赛德尔迭代法-教案一、引言1.1背景介绍1.1.1数值分析在现代科学和工程中的应用1.1.2高斯-赛德尔迭代法在解决线性方程组中的重要性1.1.3迭代法的基本概念和分类1.1.4高斯-赛德尔迭代法与其他迭代法的比较1.2教学目标1.2.1理解高斯-赛德尔迭代法的数学原理1.2.2学会应用高斯-赛德尔迭代法解决实际问题1.2.3掌握高斯-赛德尔迭代法的编程实现1.2.4分析高斯-赛德尔迭代法的收敛性和效率1.3教学方法1.3.1采用理论讲解与实践操作相结合的方式1.3.2利用多媒体和板书相结合的教学手段1.3.3引导学生进行小组讨论和问题解答1.3.4通过案例分析和作业练习巩固知识点二、知识点讲解2.1高斯-赛德尔迭代法的数学原理2.1.1线性方程组的迭代解法概述2.1.2高斯-赛德尔迭代法的迭代公式2.1.3高斯-赛德尔迭代法的矩阵形式2.2高斯-赛德尔迭代法的应用2.2.1高斯-赛德尔迭代法在电路分析中的应用2.2.2高斯-赛德尔迭代法在热传导问题中的应用2.2.3高斯-赛德尔迭代法在流体力学中的应用2.2.4高斯-赛德尔迭代法在经济模型中的应用2.3高斯-赛德尔迭代法的实现2.3.1高斯-赛德尔迭代法的算法步骤2.3.2高斯-赛德尔迭代法的编程实现2.3.3高斯-赛德尔迭代法的程序调试与优化2.3.4高斯-赛德尔迭代法的软件工具介绍三、教学内容3.1高斯-赛德尔迭代法的收敛性分析3.1.1收敛性的定义和判定条件3.1.2高斯-赛德尔迭代法的收敛速度3.1.3收敛性分析的理论基础3.1.4收敛性分析的实例演示3.2高斯-赛德尔迭代法的效率分析3.2.1计算效率的定义和评价指标3.2.2高斯-赛德尔迭代法与其他迭代法的效率比较3.2.3影响高斯-赛德尔迭代法效率的因素3.2.4提高高斯-赛德尔迭代法效率的方法3.3.1案例一:电路分析中的高斯-赛德尔迭代法应用3.3.2案例二:热传导问题中的高斯-赛德尔迭代法应用3.3.3案例三:流体力学中的高斯-赛德尔迭代法应用3.3.4案例四:经济模型中的高斯-赛德尔迭代法应用四、教学目标4.1知识与技能目标4.1.1掌握高斯-赛德尔迭代法的基本原理和迭代公式4.1.2学会使用高斯-赛德尔迭代法解决线性方程组问题4.1.3能够编写高斯-赛德尔迭代法的程序代码4.1.4能够分析高斯-赛德尔迭代法的收敛性和计算效率4.2过程与方法目标4.2.1培养学生的逻辑思维能力和数学建模能力4.2.2培养学生运用迭代法解决实际问题的能力4.2.3培养学生进行数学实验和数据分析的能力4.2.4培养学生进行团队合作和交流讨论的能力4.3情感态度与价值观目标4.3.1培养学生对数值分析的兴趣和热情4.3.2培养学生的科学精神和创新意识4.3.3培养学生严谨治学和精益求精的态度4.3.4培养学生的国际视野和跨文化交流能力五、教学难点与重点5.1教学难点5.1.1高斯-赛德尔迭代法的数学原理和迭代公式5.1.2高斯-赛德尔迭代法的收敛性分析5.1.3高斯-赛德尔迭代法的编程实现和调试5.1.4高斯-赛德尔迭代法在实际问题中的应用5.2教学重点5.2.1高斯-赛德尔迭代法的基本原理和迭代公式5.2.2高斯-赛德尔迭代法的收敛性分析5.2.3高斯-赛德尔迭代法的编程实现和调试5.2.4高斯-赛德尔迭代法在实际问题中的应用5.3教学策略5.3.1采用案例教学法和问题导向教学法5.3.2利用多媒体和板书相结合的教学手段5.3.3引导学生进行小组讨论和问题解答5.3.4通过案例分析和作业练习巩固知识点六、教具与学具准备6.1教具准备6.1.1多媒体投影仪和计算机6.1.2白板和彩色粉笔6.1.3高斯-赛德尔迭代法的PPT课件6.1.4高斯-赛德尔迭代法的程序代码和软件工具6.2学具准备6.2.1笔记本电脑和编程软件6.2.2数值分析教材和相关参考书籍6.2.3高斯-赛德尔迭代法的案例分析和作业练习6.2.4小组讨论和问题解答的场地和设备6.3教学资源准备6.3.1高斯-赛德尔迭代法的在线课程和视频教程6.3.2高斯-赛德尔迭代法的学术论文和研究成果6.3.3高斯-赛德尔迭代法的软件工具和程序库6.3.4高斯-赛德尔迭代法的实际应用案例和项目七、教学过程7.1导入新课7.1.1引入数值分析和高斯-赛德尔迭代法的背景7.1.2提出问题和挑战,激发学生的兴趣和好奇心7.1.3回顾迭代法的基本概念和分类7.1.4阐述高斯-赛德尔迭代法的重要性和应用领域7.2知识讲解7.2.1详细讲解高斯-赛德尔迭代法的数学原理和迭代公式7.2.2通过实例演示高斯-赛德尔迭代法的应用和计算过程7.2.3分析高斯-赛德尔迭代法的收敛性和计算效率7.2.4讲解高斯-赛德尔迭代法的编程实现和调试技巧7.3实践操作7.3.1分组进行高斯-赛德尔迭代法的编程实现和调试7.3.2通过案例分析和作业练习巩固知识点7.3.3引导学生进行小组讨论和问题解答7.3.4提供反馈和指导,帮助学生提高编程能力和问题解决能力7.4.2引导学生对高斯-赛德尔迭代法的理解和应用进行反思7.4.3提供进一步学习和研究的建议和资源7.4.4鼓励学生参与相关的学术活动和项目实践八、板书设计8.1高斯-赛德尔迭代法的基本原理和迭代公式8.1.1高斯-赛德尔迭代法的迭代公式8.1.2高斯-赛德尔迭代法的矩阵形式8.1.3高斯-赛德尔迭代法的收敛条件8.1.4高斯-赛德尔迭代法的计算步骤8.2高斯-赛德尔迭代法的应用案例8.2.1电路分析中的高斯-赛德尔迭代法应用8.2.2热传导问题中的高斯-赛德尔迭代法应用8.2.3流体力学中的高斯-赛德尔迭代法应用8.2.4经济模型中的高斯-赛德尔迭代法应用8.3高斯-赛德尔迭代法的编程实现和调试8.3.1高斯-赛德尔迭代法的算法步骤8.3.2高斯-赛德尔迭代法的编程实现8.3.3高斯-赛德尔迭代法的程序调试与优化8.3.4高斯-赛德尔迭代法的软件工具介绍九、作业设计9.1基础练习题9.1.1编写高斯-赛德尔迭代法的程序代码9.1.2使用高斯-赛德尔迭代法解决线性方程组问题9.1.3分析高斯-赛德尔迭代法的收敛性和计算效率9.1.4比较高斯-赛德尔迭代法与其他迭代法的优缺点9.2案例分析题9.2.1分析电路分析中的高斯-赛德尔迭代法应用案例9.2.2分析热传导问题中的高斯-赛德尔迭代法应用案例9.2.3分析流体力学中的高斯-赛德尔迭代法应用案例9.2.4分析经济模型中的高斯-赛德尔迭代法应用案例9.3扩展阅读与思考题9.3.1阅读相关的学术论文和研究成果9.3.2思考高斯-赛德尔迭代法的改进和优化方法9.3.3探索高斯-赛德尔迭代法在其他领域的应用9.3.4分析高斯-赛德尔迭代法在并行计算中的应用十、课后反思及拓展延伸10.1教学反思10.1.1反思教学内容的组织和讲解方式10.1.2反思学生的参与度和学习效果10.1.3反思教学方法和策略的有效性10.1.4反思教学资源和材料的适用性10.2拓展延伸10.2.1探索高斯-赛德尔迭代法的进一步研究和应用10.2.2学习其他数值分析方法和算法10.2.3参与相关的学术活动和项目实践10.2.4拓宽国际视野,了解数值分析的前沿动态重点关注环节的补充和说明:1.高斯-赛德尔迭代法的数学原理和迭代公式的讲解,确保学生理解并掌握基本概念。

高斯赛德尔法潮流计算

高斯赛德尔法潮流计算

高斯——赛德尔法潮流计算潮流计算高斯——赛德尔迭代法(Gauss一Seidel method)是求解电力系统潮流的方法。

潮流计算高斯——赛德尔迭代法又分导纳矩阵迭代法和阻抗矩阵迭代法两种。

前者是以节点导纳矩阵为基础建立的赛德尔迭代格式;后者是以节点阻扰矩阵为基础建立的赛德尔迭代格式。

高斯——赛德尔迭代法这是数学上求解线性或非线性方程组的一种常用的迭代方法。

本实验通过对电力网数学模型形成的计算机程序的编制与调试,获得形成电力网数学模型:高斯---赛德尔法的计算机程序,使数学模型能够由计算机自行形成,即根据已知的电力网的接线图及各支路参数由计算程序运行形成该电力网的节点导纳矩阵和各节点电压、功率。

通过实验教学加深学生对高斯---赛德尔法概念的理解,学会运用数学知识建立电力系统的数学模型,掌握数学模型的形成过程及其特点,熟悉各种常用应用软件,熟悉硬件设备的使用方法,加强编制调试计算机程序的能力,提高工程计算的能力,学习如何将理论知识和实际工程问题结合起来。

高斯---赛德尔法潮流计算框图开始输入数据,定义数组给定PQ节点电压初值给定PV节点电压实部(或虚部)置迭代计数b=0计算PQ节点电压实部和虚部先计算PV节点无功功率再用其计算PV节点电压实部和虚部计算平衡节点的有功和无功NY[1]系统节点的分类根据给定的控制变量和状态变量的不同分类如下①P 、Q 节点(负荷节点),给定Pi 、Qi 求Vi 、Si ,所求数量最多;②负荷节点,变电站节点(联络节点、浮游节点),给定P Gi 、QGi 的发电机节点,给定Q Gi 的无功电源节点;③PV 节点(调节节点、电压控制节点),给定P i 、Q i 求Q n 、S n ,所求数量少,可以无有功储备的发电机节点和可调节的无功电源节点;④平衡节点(松弛节点、参考节点(基准相角)、S 节点、VS 节点、缓冲节点),给定V i ,δi =0,求P n 、Q n (V s 、δs 、P s 、Q s )。

高斯消去法高斯塞德尔迭代法

高斯消去法高斯塞德尔迭代法

数值计算高斯消去法和高斯-塞德尔迭代法摘要虽然已学过加减消元法、代入消元法、矩阵变换法和Cramer 法则等,但是无法满足实际计算需要,故在此讨论在计算机上实现的有效而实用的解法。

线性方程组的解法大致分2类:直接法(高斯消去法)和迭代法(高斯-赛德尔迭代法),在此对着此类算法进行比较分析。

一、算法设计当计算线性方程组如下时,11112211211222221122n n n n n n nn n na x a x a xb a x a x a x b a x a x a x b +++=⎧⎪+++=⎪⎨⎪⎪+++=⎩ (1-1)为方便起见,常将线性方程组表示成矩阵形式Ax b=其中1111n n nn a a A a a ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦1n x x x ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦1n b b b ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦并始终假定A 是非奇异的,即方程组的解存在且唯一。

1.1高斯消去法消去法就是按特定顺序进行的矩阵初等变换法,当消元按自然顺序进行时,称为高斯顺序消去法。

一般情况下的高斯顺序消去法的计算机算法如下,现将方程组(1-1)的增广矩阵记作(0)(0)(0)11111(0)(0)(0)11n n n nn nn a a a a a a ++⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦假设经k-1步消元后,增广矩阵化为(0)(0)(0)(0)1112111(1)(1)(1)22221(1)(1)(1)1(1)(1)(1)1nn nn k k k kk knkn k k k nk nnnn a a a a a a a a a a a a a ++---+---+⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦其中()s ij a 的上标表示是由s 步消元得到的植。

第k 步消元:设(1)0k kk a -≠,以第k 行为基础,将以后各行中的(1)k ik a -化为0,为此先计算(1)(1)/k k ik ik kk l a a --=然后以第i 行减去第k 行乘以ik l ,即以()(1)(1)k k k ij ij ik kj a a l a --=-()()1,,11,,j k n i k n =++=+于是得(0)(0)(0)11111(1)(1)(1)(1)11()()()11111()()()11n n k k k k kkkk knkn k k k k k k nk n k k k k nnnnn a a a a a a a a a a a a a +----+++++++++⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦经n-1步消元后,增广矩阵化为(0)(0)(0)11111(1)(1)(1)1(1)(1)1n n k k k kk knkn n n nn nn a a a a a a a a +---+--+⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦自下往上逐步回代即可求得其解(1)(1)1(1)(1)(1)11/()/(1,2,,1)n n n nn nnnk k k k kn kj j kk j k x a a x aax a k n n --+---+=+==-=--∑由行列式的初等变换和矩阵初等变换的关系可知,顺序消元法的每一步系数行列式之值不变,因此原方程组之系数行列式的值为(0)(2)(1)1122n nn a a a - ,可在求解过程中逐步累乘求得。

【精品】高斯-赛德尔迭代法的算法及程序设计

【精品】高斯-赛德尔迭代法的算法及程序设计

【精品】高斯-赛德尔迭代法的算法及程序设计高斯-赛德尔迭代法是求解线性方程组的一种迭代法,它是对高斯消元法的改进。

其基本思想是用当前的结果来更新方程组中的未知量,不断迭代直到满足停止条件。

本文介绍了高斯-赛德尔迭代法的算法原理和程序设计。

一、算法原理对于线性方程组 Ax = b,我们可以将系数矩阵 A 分解为 A = L + D + U,其中 L 是A 的下三角部分,D 是 A 的对角线部分,U 是 A 的上三角部分。

将方程组写成如下形式:(A + L)x = (b - Ux) + Dx令则原方程组可化为Bx = c + Dx^{(k)}其中 k 表示迭代次数,x^{(k)} 表示第 k 次迭代的未知量。

通过不断地迭代,我们可以得到 x^{(k+1)},直到 x^{(k+1)} 与 x^{(k)} 的差值小到可接受的误差范围内。

高斯-赛德尔迭代法的迭代公式如下:x_i^{(k+1)} = \frac{1}{a_{ii}}\left(b_i - \sum_{j=1}^{i-1} a_{ij}x_j^{(k+1)} - \sum_{j=i+1}^{n} a_{ij}x_j^{(k)}\right),\ i = 1, 2, \dots, n其中 x_j^{(k+1)} 表示第 k+1 次迭代中已经计算出的第 j 个未知量的值。

二、程序设计1. 定义函数:定义高斯-赛德尔迭代法函数 gauss_seidel(A, b, x0, eps, max_iter),其中 A 表示系数矩阵,b 表示常数向量,x0 表示初始解向量,eps 表示停止条件中的误差限,max_iter 表示最大迭代次数。

2. 初始化变量:在程序中对变量进行初始化,包括未知量向量 x,误差 e,迭代次数 k 和停止标志 flag。

3. 迭代求解:利用高斯-赛德尔迭代法的迭代公式对未知量进行计算,并进行误差判断,判断误差是否小于 eps 或迭代次数是否超过了 max_iter,如果满足其中一个条件,则将停止标志 flag 置为 True,否则将进行下一次迭代。

高斯-赛得尔迭代法

高斯-赛得尔迭代法

0

L~ D 1L, U~ D1U
于是 I L~ D1D D1L D1(D L) (3 16)
7
解线性方程组的迭代法
x(k1) (I L~)1U~x(k ) (I L~)1 g I L~ D1D D1L D1(D L) L~ D 1L, U~ D1U
将式(3-16)代入式(3-15)得
b1n xn(k)
g1
x2(k
1)
b x (k1) 21 1
b23x3(k) L
b x (k 2n1 n1
)
b2nxn(k)
g2
M
x (k1) n
b x (k1) n1 1
bn2x2(k1)
bn3x3(k1)
L
b x (k1) nn1 n1
gn
(3 13)
p4
2
解线性方程组的迭代法
b2n xn(k )
g2
M
x (k 1) n
bn1x1(k )
bn2 x2(k )
bn3 x3(k )
L
bnn
1xn
( 1
k
)
gn
其中
bij
aij aii
,
gi
bi aii
(i j,i, j 1, 2,L , n),
(i 1, 2,L , n).
(3 12)
1
解线性方程组的迭代法
因此,在Jacobi迭代法的计算过程中,要同时保留
即每算出新近似解的一个分量
x , ( k 1) i
再算下一个
x 分量
x(k 1) i 1
时,用新分量
x(k 1) i
代替老分量
(k ) i
进行计算。这样,在整个计算过程中,只需用n个

雅克比迭代法和高斯赛德尔迭代法的算法描述

雅克比迭代法和高斯赛德尔迭代法的算法描述

雅克比迭代法和高斯赛德尔迭代法的算法描述一. 雅克比迭代法雅克比迭代法(Jacobi Iteration)是计算数值解的一种迭代方法,它遵循一个简单的步骤:给定问题的初始值,按照一定的规则,用求出某一个矩阵元素,替换当前值,得到下一个矩阵值,重复这个步骤,直到满足某一个条件,即为所求解的结果。

雅克比迭代法求解矩阵问题的一般步骤为:(1)给定初始矩阵A和右端值矩阵B,将第i行第j列的元素表示为aij,bi;(2)第i行其它元素之和定义为s(i) =∑(j≠i)|a(i, j)|,亦即∑|aij|;(3)如果s(i)不等于0,则第i行第i列元素的值更新为xi=1 (b(i) ∑(j≠i)[a(i, j)x(j)])/a(i, i)(4)重复步骤3,直到满足|X(i)X(i)|<ε(ε为设定的误差),此时x即为所求解的结果。

二. 高斯-赛德尔迭代法高斯-赛德尔迭代法(Gauss-Seidel Iteration)是另一种迭代方法,算法的基本思想也是:通过迭代,计算出当前矩阵的第i行第j列的元素xi;然后更新第i行第j列元素的值,继续迭代,直到某种条件满足,即可求出矩阵的解。

高斯-赛德尔迭代法的基本步骤为:(1)给定初始矩阵A和右端值矩阵B,将第i行第j列的元素表示为aij,bi;(2)第i行其它元素之和定义为s(i) =∑(j≠i)|a(i, j)|,亦即∑|aij|;(3)如果s(i)不等于0,则第i行第i列元素的值更新为xi=1 (b(i) ∑(j<i)[a(i, j)x(j)]∑(j>i)[a(i,j)x(j)] )/a(i, i)(4)重复步骤3,直到满足|X(i)X(i)|<ε(ε为设定的误差),此时x即为所求解的结果。

总结从上面的对比来看,雅克比迭代法和高斯赛德尔迭代法的步骤基本一致,均采用迭代的方式求解矩阵A的解X,不同的是,高斯赛德尔迭代法在更新矩阵A的第i行第i列元素时,采用把小于i的j元素的值替换成当前迭代求得的值来计算,而雅克比迭代法采用把全部j元素的值替换成当前迭代求得的值来计算。

GaussSeidel迭代法

GaussSeidel迭代法

Gauss Seidel 迭代法:Gauss Seidel 迭代法是逐个分量进行计算的一种方法,考虑线性代数方程组Ax=b 的分量法表示i j j ij b x a==∑n 1 , i=1,2,···,n对于给定的初值)0(x ,Ga迭代法如下: Gauss Seidel 迭代算法:· k=0· 11)(11)1(1/)2(x a x a b n j k j j k ∑=-==+ ·22)(2)1(1212)1(2/)3(x a x a x a b n j k j j k k ∑=--==++· …·1,1)(,12)1(,11)1(1-n /)1(x ----+--+-=-=∑=n n k n n n n j k j j n n k a x a x a b ·nn n j k j nj n k a x a b /)(x 11)1()1(n ∑-++-=== ·2)0()1(2)()1(x x x x k k k -<-++ε停止,否则k=k+1从Gauss Seidel 迭代算法的计算过程可以发现,每计算一个新的分量都需要前面所有新计算出来的分量的结果,这是一个严格的串行过程。

那么,如何设计一个并行计算的方法呢?记)0(1s j n i j ij i x a ∑+== ,i=1,2, …,n-1,s n =0。

并行计算方法如下:并行Gauss Seidel 迭代算法:k=0for i=1,n do0,/)(x )1(=-=+i ii i i k i s a s bfor j=1,n,j ≠i do)1(s ++=k i ji j j x a send{for} end{for}2)0()1(2)()1(x x x x k k k -<-++ε停止,否则k=k+1在并行Gauss Seidel 迭代算法中,每次并行计算j s ,之后可以并行计算截止条件是否满足。

高斯-赛得尔迭代法

高斯-赛得尔迭代法

b12x2(k) b13x3(k)
x2(k
1)
b x (k1) 21 1
b23x3(k)
b x (k) 1n1 n1
b1n xn(k)
g1
b x( 2n1 n1
k
)
b2nxn(k)
g2
x (k1) n
b x (k1) n1 1
bn2
x (k1) 2
bn3x3(k1)
b x (k1) nn1 n1
9
解线性方程组的迭代法
例 用Gauss-Seidel迭代法求线性方程组
10x1 x2 2x3 72,
x1 10x2 2x3 83,
x1 x2 5x3 42,
x1 0.1x2 0.2x3 7.2 x2 0.1x1 0.2x3 8.3 x3 0.2x1 0.2x2 8.4
x )
x (k 1) 2
0.4x2(k )
0.7( x1(k 1)
x (k) 3
)
x (k 1) 3
0.4x3(k ) 0.7(1.8 x2(k1) )
20
解线性方程组的迭代法
x (k 1) 1
0.4x1(k )
0.7(1 x2(k) )
参数 , 误差限 , 最大容许迭代次数N.
2. 置 k 1.
3.计算
18
解线性方程组的迭代法
n
x1 (1 ) x1(0) (b1
a1
j
x(0) j
)
/
a11
j2
i 1
n
xi (1 )xi(0) (bi aij x j
aij
x
(0) j
)
/
aii
j 1

高斯赛德尔迭代计算方法

高斯赛德尔迭代计算方法

高斯赛德尔迭代计算方法高斯赛德尔迭代法是数值计算中常用的求解线性方程组的方法之一。

与高斯-约旦消元法和LU分解法相比,高斯赛德尔迭代法具有计算量小、迭代次数少、易于程序实现等优点,因此在实际的工程计算中,高斯赛德尔迭代法得到了广泛的应用。

高斯赛德尔迭代法主要采用了迭代思想,通过多次迭代来逐步逼近方程组的近似解。

其基本思想是:首先将线性方程组中的未知量分组,按照某种顺序,每次迭代中只求解一个未知量组的方程,而将其他未知量组看作常数,直到所有的未知量组均得到合法的解为止。

下面我们来具体探讨一下高斯赛德尔迭代法的具体实现。

1. 确定初始值在采用高斯赛德尔迭代法求解线性方程组时,需要先确定初始向量 x^(0)。

通常情况下,我们可以将 x^(0) 各个分量取为 0 或者随机取值。

一般情况下,采用前一次计算得到的解作为下一次的初始向量 x^(k+1) 的值。

2. 进行迭代在第 k 次迭代中,我们需要求解的是第 k 个未知量组的方程,公式如下:x(k+1)i = (bi - Σ(aij*x(k+1)j,j<i) - Σ(aij*x(k)j,j>i))/aii其中,bi 是线性方程组中第 i 个方程的常数项,aij 指的是第 i行第 j 列的系数,当 j<i 时,aij 为上三角的元素,当 j>i 时,aij 为下三角的元素。

x(k)j 为第k 次迭代时第j 个未知量的值,而 x(k+1)j 则代表第 k+1 次迭代后第 j 个未知量的值。

3. 判断迭代是否结束每当进行一次迭代操作后,我们需要计算当前的近似解向量x^(k+1) 和上一次近似解向量 x^(k) 的误差,如果误差小于预先给定的阈值 eps,那么我们就认为迭代已经收敛,即获得了近似解,退出迭代操作。

否则,我们继续进行迭代操作,在迭代次数达到预先设定的最大值后,若仍未收敛,则认为该方程组无解或有无穷解。

综上所述,高斯赛德尔迭代法是一种比较简单而有效的求解线性方程组的方法。

研究生数值分析高斯-赛德尔(Gauss-Seidel)迭代法

研究生数值分析高斯-赛德尔(Gauss-Seidel)迭代法

迭代法的发展趋势和未来研究方向
非线性问题
将高斯-赛德尔迭代法应用于非线性问题是一个具有挑战性的方 向,也是未来研究的重要课题。
理论分析
深入分析高斯-赛德尔迭代法的收敛性和误差估计,为算法改进 提供理论支持。
应用领域拓展
将高斯-赛德尔迭代法应用于更多领域,如工程、物理、经济等, 解决实际问题。
谢谢观看
05
高斯-赛德尔迭代法的应 用
在线性方程组求解中的应用
01
02
03
线性方程组求解是高斯赛德尔迭代法的重要应用 之一。对于给定的线性方 程组Ax=b,高斯-赛德尔 迭代法可以用来求解x的
值。
通过迭代的方式,高斯赛德尔迭代法不断逼近 方程的解,直到满足一
定的收敛条件。
该方法在数值分析中广 泛应用于解决线性方程 组问题,具有较高的稳
高斯-赛德尔迭代法是一种直观且易 于理解的迭代方法,计算过程相对简 单,易于编程实现。
收敛速度快
对于某些问题,高斯-赛德尔迭代法可 能比其他迭代方法具有更快的收敛速 度。
高斯-赛德尔迭代法的优缺点
• 适用于多种线性系统:该方法适用于多种线性系统,包括 稀疏矩阵和稠密矩阵。
高斯-赛德尔迭代法的优缺点
松弛法(SOR方法)
总结词
松弛法是一种改进的高斯-赛德尔迭代法,通过引入松弛参数,使得迭代过程更 加灵活,提高了收敛速度。
详细描述
松弛法(SOR方法)是在高斯-赛德尔迭代法的基础上,引入了一个松弛参数,使得 迭代过程中每一步的解不仅依赖于前一步的解,还与前几步的解有关。这种方法 能够更好地处理非严格对角占优的线性系技巧通过优化迭代过程中的参数或采用其他方法, 加速高斯-赛德尔迭代法的收敛速度。

研究生数值分析(12)高斯-赛德尔(Gauss-Seidel)迭代法

研究生数值分析(12)高斯-赛德尔(Gauss-Seidel)迭代法

3 0.9843 1.9923 2.9938
4 0.9978 1.9989 2.9991
5 0.9997 1.9999 2.9999
高斯-赛德尔迭代矩阵 BG 的特征方程为
10 2 1 2 10 1 0 2 5
即 (500 2 54 2) 0
如在例8例9中,由于系数矩阵A是严格对角 占优,由定理4立即可断定用雅可比迭代法与高斯 -赛德尔迭代法求解时,迭代过程都收敛。
4 2 2
又如矩阵
A


2
2 3
2 3 14
是对称正定阵(实对称阵是正定阵的,如果实二次型
f (x1, x2 , , xn ) X T AX
的分量时,当计算到 xi(k 1) 时,分量 x1(k1) ,
, x (k 1) i 1
都已经求得,而仍用旧分量 x1(k) ,
,
x( i 1
k
)
计算
x (k 1) i
。由于新计算出的分量比旧分量准确些,
因此设想一旦新分量 x1(k 1) ,
求出,马上就用新分量 x1(k 1) ,
代替雅可比迭代法中

x3(k
1)

0.2 x1( k 1)
0.4x2(k1)

2
取迭代初值
X (0)

( x1(0)ຫໍສະໝຸດ ,x (0) 2,
x (0) 3
)T
(0, 0, 0)T
按此迭代公式进行迭代,计算结果为
k
x (k) 1
x (k) 2
x (k) 3
00
0
0
1 0.3 1.56 2.684
2 0.8804 1.9445 2.9539

数值计算实验报告----LU分解、追赶法、迭代法(高斯-赛德尔Gauss_Seidel、雅。。。

数值计算实验报告----LU分解、追赶法、迭代法(高斯-赛德尔Gauss_Seidel、雅。。。

数值计算实验报告----LU分解、追赶法、迭代法(⾼斯-赛德尔Gauss_Seidel、雅。

数值实验报告----------------------个⼈作业,如果有后辈的作业习题⼀致,可以参考学习,⼀起交流,请勿直接copy⼀、实验⽬的1. 了解并分析LU分解法的优点;2. 追赶法的应⽤与其与LU分解法的对⽐;3. 认识迭代法收敛的含义以及迭代法初值和⽅程组系数矩阵性质对收敛速度的影响。

⼆、实验题⽬三、实验原理l LU分解:·如果对A(0)x = b(0)施⾏第⼀次消元后化为A(1)x = b(1),则存在L1,使得L1A(0)=A(1),L1b(0)= b(1)⼀般地,进⾏k次消元化后为A(k)x = b(k), 则有L k A(k-1)=A(k),L k b(k-1)= b(k)重复这⼀过程,最后得到L n-1…L2L1A(0) = A(n-1)L n-1…L2L1b(0) = b(n-1)将上三⾓形矩阵A(n-1)记为U,则 A=LU ,其中为下三⾓矩阵。

利⽤⾼斯消元法实质上产⽣了⼀个将A分解为两个三⾓形矩阵相乘的因式分解,称为A的三⾓形分解或LU分解。

·矩阵分解不⼀定采⽤⾼斯消元法,以下为直接计算的计算公式:把增⼴矩阵A 采⽤LU 分解格式,即可得到与原⽅程同解的⽅l 追赶法:求解Ax = b 等价于解两个⼆对⾓线⽅程组Ly = bUx =y⾃上⽽下解⽅程组Ly = b 形象地被称为“追”。

y1 = b1/l11y i =b i-l ii-1y i-1/l ii, i = 2, 3, … ,n⾃下⽽上解⽅程组Ux = y 形象地被称为“赶”。

x n=y nx i =y i-u ii+1x i+1, i = n-1, … ,2,1习惯上,上述求解⽅法称为“追赶法”。

l 迭代法:·雅克⽐迭代雅克⽐迭代法基本思想与迭代法相同是⼀种逐次逼近的⽅法。

⾸先给定⼀个较粗糙的初值,然后采⽤迭代公式,进⾏多次迭代,直到满⾜所要求的精度为⽌。

迭代Jacobi_Guass-Seidel雅克比_高斯赛德尔

迭代Jacobi_Guass-Seidel雅克比_高斯赛德尔

计算方法实验报告Jacobi,Gauss_Seidel迭代法班级:学号:姓名:一、实验目的利用Jacobi(Gauss-Seidel)迭代法的算法,解n阶线性方程组。

二、程序功能输入方程组(矩阵A,b),最大迭代次数以及误差限若结果可以收敛,则输出,若不可收敛则返回迭代失败信息。

三、迭代算法流程图Jacobi Gauss-Seidel四、代码(见附录)五、运行情况分析Jacobi(freopen) Gauss_Seidel(手动输入数据)比较分析:相同的测试数据,Gauss_Seldel的迭代次数明显要比Jacobi少得多。

六、附录#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#define N 1000using namespace std;double A[N][N],b[N],ans[N],ans_f[N],e;int n,num;bool ansnot(){for(int i=1;i<=n;i++){if(fabs(ans[i]-ans_f[i])>e)return 1;}return 0;}void inputX(){for(int i=1;i<=n;i++)scanf("%lf",&ans[i]);}bool Jacobi(){int i,j,k;printf("-----请输入最大迭代次数和误差线:-----\n");scanf("%d%lf",&num,&e);printf("-----请输入ans初始值:-----\n");inputX();i=0; //迭代次数do{for(j=1;j<=n;j++)ans_f[j]=ans[j];for(j=1;j<=n;j++){if(A[j][j]==0){printf("算法失败,");return 0;}ans[j]=b[j];for(k=1;k<=n;k++){if(k!=j)ans[j]-=A[j][k]*ans_f[k];//Gauss_seldel修改ans[k]}ans[j]/=A[j][j]; }i++;}while(ansnot()&&i<num);if(i<=num){printf("迭代次数为:%d\n",i);return 1;}printf("迭代失败,");return 0;}void init(){memset(A,0,sizeof(A));memset(b,0,sizeof(b));memset(ans,0,sizeof(ans));printf("请输入矩阵A:\n");for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%lf",&A[i][j]);printf("请输入矩阵b:\n");for(int i=1;i<=n;i++)scanf("%lf",&b[i]);//Print();}int main(){freopen("in.txt","r",stdin);int index=1;while(1){printf("请输入阶数n:\n");scanf("%d",&n);if(n<1) break;printf("------------------test %d------------------\n",index++); init();if(!Jacobi())printf("no answer!!!");elsefor(int i=1;i<=n;i++)printf("x[%d] = %lf\n",i,ans[i]); printf("\n\n");}return 0;}。

高斯-赛德尔迭代

高斯-赛德尔迭代

高斯-赛德尔迭代-CAL-FENGHAI.-(YICAI)-Company One12012-2013(1)专业课程实践论文高斯-赛德尔迭代张禹廷,0818180111,R数学08-1班23一、算法理论高斯-赛德尔迭代是计算)1(+k x 的第i 个分量)1(+k i x 的方法,利用了已经计算出得最新分量)1,...,2,1()1(-==+i j x k j .高斯-赛德尔迭代法可以看作雅克比迭代法的一种改进.高斯-赛德尔迭代法没迭代一次只需计算一次矩阵与向量的乘法选取分裂矩阵M 为A 的下三角部分,即选取L D M -=(下三角矩阵),N M A -=,于是得到解b Ax =的高斯-赛德尔(Gauss-Seidel )迭代法⎪⎩⎪⎨⎧=+=+,...,1,0,,)()1()0(k f Bx xx k k 初始向量 (1)其中.)(,)()(111b L D f G U L D A L D I B ----=≡-=--=称U L D G 1)(--=为解b Ax =的高斯-赛德尔迭代法的迭代矩阵.下面给出高斯-赛德尔迭代法的分量计算公式.记T k n k i k k x x x x ),...,,...,()()()(1)(=由(1)式有,)()()1(b Ux x L D k k +=-+或,)()1()1(b Ux Lx Dx k k k ++=++4即∑∑-=+=++=--=111)()1()1(.,...,,2,1,i j n i j k j ij k j ij i k i ii n i x a xa b x a于是解b Ax =的高斯-赛德尔迭代法计算公式为()()⎪⎪⎩⎪⎪⎨⎧==--==∑∑+=-=++.,1,0,,2,1/)(),,(1)(11)1()1()0()0(1)0( k n i a x a x a b x x x x ii ni j k j ij i j k j ii i k iT n二、算法框图三、算法程序5#include "stdio.h"#include "math.h"# define m 3float a[m][m];float c[m];void gaosi();void main(){int i,j;float x[m],x1[m],eps[m];float s=0;float t=0;int p=1;int q=1;int k=0;float eps1;gaosi();for(i=0;i<=m-1;i++){for(j=0;j<=m-1;j++){s=float(s+fabs(a[i][j])); t=float(t+fabs(a[j][i])); }q=q&&(s<2*fabs(a[i][i])); p=p&&(t<2*fabs(a[i][i]));6s=0;t=0;}if((p+q)==0)printf("ERROR!");else{for(i=0;i<=m-1;i++){x[i]=0;x1[i]=0;}do{eps1=x[0]-x1[0];for(i=0;i<=m-1;i++){for(j=0;j<=m-1;j++) s=s+a[i][j]*x[j]; x[i]=(c[i]+a[i][i]*x[i]-s)/a[i][i]; s=0;eps[i]=float(fabs(x[i]-x1[i]));x1[i]=x[i];eps1=(eps1>eps[i])eps1:eps[i];printf("x%d=%f",i,x[i]);printf("\n");}7k=k+1;}while(eps1>1e-3);printf("迭代 %d 次",k);}}void gaosi(){int i,j;float b[m*m];printf("请输入一个矩阵a:\n"); for(i=0;i<=m-1;i++){for(j=0;j<=m-1;j++){scanf("%f",&b[j+i*m]);a[i][j]=b[j+i*m];}}printf("请输入矩阵b\n");for(i=0;i<=m-1;i++)scanf("%f",&c[i]);}89 四、算法实现例1.利用高斯-赛德尔法迭代解方程⎪⎩⎪⎨⎧=++=-+=+-3612333311420238321321321x x x x x x x x x解:运行程序(1) 显示出 请输入一个矩阵a :输入⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--12331114238,回车。

高斯—塞德尔迭代法

高斯—塞德尔迭代法
0 a11 0 a12 a1n a 0 a22 0 21 ,U , L . D an1,n a a 0 a 0 n 1 n , n 1 nn
x(7) (3.00002 , 1.9999987 , 0.9999932 )T , ε (7)

x(7) x *

2.2 106.
AX=b.
(1.1)
低阶稠密的线性方程组用直接法(如高斯消去法和三 角分解法)。
大型稀疏非带状的线性方程组(n很大,且零元素很多. 如偏微方程数值解产生的线性方程组,n≥104)的求解 问题? 零元素多,适合用迭代法。 我们将介绍迭代法的一般理论及雅可比迭代法、高 斯—塞德尔迭代法,研究它们的收敛性。 例1 求解线性方程组
解线性代数方程组的迭代法
§1 引言
考虑线性方程组
a11x1 a12 x2 a1n xn b1 a x a x a x b 21 1 22 2 2n n 2 an1x1 an2 x2 ann xn bn
也就是
§2
考虑线性方程组
基本迭代法
a11x1 a12 x2 a1n xn b1 a x a x a x b 21 1 22 2 2n n 2 an1x1 an2 x2 ann xn bn
也就是
Ax=b.
(2.1)
进行矩阵分裂
A=M-N,
(2.2)
其中M为可选择的非奇异矩阵,且使Mx=d容易求解. 于是, Ax=b⇔x=M-1Nx+M-1b.
可得一阶定常迭代法:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

雅可比迭代矩阵
0 0.2 0.1 BJ 0.2 0 0.1
0.2 0.4 0
BJ 0.6 1 雅可比迭代过程必收敛;
高斯-赛德尔迭代矩阵
0 BG 0
0
0.2 0.04 0.056
0.1
0.12
0.068
BG 0.3 1 高斯-赛德尔迭代过程也收敛。
由定理的误差估计式 X (k) X * B k X (1) X (0) , k 1, 2,3, 1 B
2、高斯-赛德尔(Gauss-Seidel)迭代法 研究雅可比迭代法,我们发现在逐个求 X(k+1)的
分量时,当计算到 xi(k+1) 时,分量 x1(k+1) , … , xi1(k+1)都已经求得, 而仍用旧分量x1(k), … , xi-1(k)计算 xi(k+1)。由于新计算出的分量比旧分量准确些,因此 设想一旦新分量 x1(k+1) , … , xi-1(k+1) 求出,马上就用 新分量 x1(k+1) , … , xi-1(k+1) 代替雅可比迭代法中 x1(k),…,xi-1(k)来求 xi(k+1) 。这就是 (Gauss-Seidel) 迭代 法。
可以看出, B 越小收敛速度越快, 且可用来估计迭代次数。
在例8例9中,显然 BG 比 BJ 小, 所以高斯-赛德尔迭代法比雅可比迭代法收敛速度快。
若在例8例9中要求近似解 X (k) 的误差
X (k) X * 104
则由误差估计式知,只要 k 满足
Bk
X (1) X (0) 104
1729 500
于是
(BG )

27 1729 500
0.1372
1
因而高斯-赛德尔迭代公式是收敛的。
3 迭代法收敛条件与误差估计 我们先引入一个叫矩阵谱半径的概念。
定义 矩阵 A Rnn 的所有特征值 i (i 1, 2, , n)
的模的最大值称为矩阵 A 的谱半径,记作 ( A)

( A)
高斯-赛德尔迭代公式如下:
x1(k
1)
1 a11
(a12 x2( k )
a13 x3( k )
a1nxn(k) b1)
x2(
k
1)
1 a11
(a21 x1( k 1)
a23 x3( k )
a2nxn(k) b2 )
xi(k
1)
1 aii
(ai1 x1( k 1)
a x (k1) i2 2
x3(k
1)
0.2x1(k 1)
0.4x2(k1)
2
取迭代初值
X (0)
(
x (0) 1
,
x2(0
)
,
x (0) 3
)T
(0, 0, 0)T
按此迭代公式进行迭代,计算结果为
k
x (k) 1
x (k) 2
x (k) 3
00 1 0.3
0
0
1.56 2.684
2 0.8804 1.9445 2.9539
max
1in
i
前面,我们在应用雅可比迭代法与高斯-赛德尔迭 代法解一阶线性方程组时,判断各迭代公式是收敛还
是发散,都要计算雅可比迭代矩阵 BJ 与高斯-赛德尔
迭代矩阵 BG 的特征值.由于矩阵 A 有些算子范数(比
如 A 与 A )远比矩阵 A 的特征值容易计算,为此给
1
出如下结论。
定理3 矩阵A的谱半径不超过矩阵A的任何
收敛的充分条件,它表明只要迭代矩阵 B 的某种子 范数 B 小于1,立即可以断定该迭代过程对任给
r
初始向量都收敛于方程组AX=b的唯一解 X * 在例8例9中,我们分别用雅可比迭代法和高斯-
赛德尔迭代法解方程组
10x1 2x2 x3 3 2x1 10x2 x3 15 x1 2x2 5x3 10
现将 X (k1) 显式化,由 (D L) X (k1) UX (k) b

X (k1) (D L)1UX (k) (D L)1b

BG (D L)1U
(称为高斯-赛德尔(Gauss-Seidel)迭代矩阵)
fG (D L)1b
则得 X (k 1) BG X (k ) fG 为高斯-赛德尔迭代法的矩阵表示形式。
以下元素同乘以 λ 后所得新矩阵的行列式。
例9 用高斯-赛德尔迭代法解方程组
10x1 2x2 x3 3 2x1 10x2 x3 15 x1 2x2 5x3 10
解:相应的高斯-赛德尔迭代公式为
x (k 1) 1
x (k 1) 2
0.2x2(k) 0.1x3(k) 0.3 0.2x1(k1) 0.1x3(k) 1.5
我们用定理2来判断高斯-赛德尔迭代公式是否
收敛,需要考虑高斯-赛德尔迭代矩阵 BG (D L)1U
的特征方程 I BG 0

I (D L)1U 0
将上式写成 (D L)1 (D L) U 0
由于
(D L)1 0
所以
(D L) U 0
上式左端为将系数矩阵 A 的对角线及对角线
1 B
将 BJ 0.6, X (0) (0,0,0)T , X (1) (0.3000,1.5000, 2.0000)T
代入得 k 21.18 ,故Jacobi迭代22次即可;
将 BG 0.3, X (0) (0,0,0)T , X (1) (0.3000,1.5600, 2.68400)T 代入得 k 8.76 ,故Gauss-Seidel迭代9次就可以。
3 0.9843 1.9923 2.9938
4 0.9978 1.9989 2.9991
5 0.9997 1.9999 2.9999
高斯-赛德尔迭代矩阵 BG 的特征方程为
10 2 1 2 10 1 0 2 5
即 (500 2 54 2) 0
解得
1
0, 2
27
1729 500
, 3
27
a x (k1) i,i1 i1
a x (k) i,i1 i1
xn ( k 1)
1 ann
(an1 x1( k 1)
a x (k1) n2 2
a x (k1) n,n1 n1
bn )
(5)
ainxn(k) bi )
其矩阵表示形式为 X (k1) D1(LX (k1) UX (k) b)
一种算子范数 , 即
(A)
A r
证明:设λ为A的任一特征值,X为对应于λ的A
的特征向量,即 AX= λX, (X ≠0)
由范数的性质立即可得
X X AX A X
r
r
r
r
r
因为 X ≠0 , 所以
A r
即A的任一特征值的模都不超过
A r
于是 (A) A r
定理给出了一阶线性定常迭代法 X (k1) BX (k) f
相关文档
最新文档