3.2Jacobi迭代法和Gauss-Seidel迭代法
Jacobi迭代法与GaussSeidel迭代法算法比较
Jacobi 迭代法与Gauss-Seidel迭代法算法比较目录1 引言 (1)1.1Jacobi迭代法 (2)1.2Gauss-Seidel迭代法 (2)1.3逐次超松弛(SOR)迭代法 (3)2算法分析 (3)3 结论 (5)4 附录程序 (5)参考文献 (8)Jacobi 迭代法与Gauss-Seidel 迭代法比较1 引言解线性方程组的方法分为直接法和迭代法,直接法是在没有舍入误差的假设下,能在预定的运算次数内求得精确解,而迭代法是构造一定的递推格式,产生逼近精确值的序列。
这两种方法各有优缺点,直接法普遍适用,但要求计算机有较大的存储量,迭代法要求的存储量较小,但必须在收敛性得以保证的情况下才能使用。
对于高阶方程组,如一些偏微分方程数值求解中出现的方程组,采用直接法计算代价比较高,迭代法则简单又实用,所以比较受工程人员青睐。
迭代法求解方程组就是构造一个无限的向量序列,使它的极限是方程组的解向量。
即使计算机过程是精确的,迭代法也不能通过有限次算术运算求得方程组的精确解,而只能逐步逼近它。
因此迭代法存在收敛性与精度控制的问题。
迭代法是常用于求解大型稀疏线性方程组(系数矩阵阶数较高且0元素较多),特别是某些偏微分方程离散化后得到的大型稀疏方程组的重要方法。
设n 元线性微分方程组b Ax = (1)的系数矩阵A 非奇异,右端向量0≠b ,因而方程组有唯一的非零解向量。
而对于这种线性方程组的近似解,前辈们发展研究了许多种有效的方法,有Jacobi 迭代法、Gauss —Seidel 迭代法,逐次超松弛迭代法(SOR 法),这几种迭代方法均属一阶线性定常迭代法,即若系数矩阵A 分解成两个矩阵N 和P 的差,即P N A -=;其中N 为可逆矩阵,线性方程组(1)化为:b x P N =-)(b Px Nx +=b N Px N x 11--+=可得到迭代方法的一般公式:d Gx xk k +=+))1(( (2)其中:P N G 1-=,b N d 1-=,对任取一向量)0(x 作为方程组的初始近似解,按递推公式产生一个向量序列)1(x ,)2(x ,...,)k x(,...,当k 足够大时,此序列就可以作为线性方程组的近似解。
分别用 jacobi 迭代法和 gauss-seidel 迭代法,求解方程组
分别用 jacobi 迭代法和 gauss-seidel 迭代法,求解方程组【jacobi 迭代法和 gauss-seidel 迭代法分别应用于方程组的求解】1. 引言在数学领域中,方程组的求解一直是一个重要的课题。
为了解决复杂的线性方程组,人们提出了各种迭代方法,其中 jacobi 迭代法和gauss-seidel 迭代法是两种常见的方法。
本文将探讨这两种迭代方法在求解方程组中的应用。
2. jacobi 迭代法的原理和应用jacobi 迭代法是一种基于逐次逼近的迭代方法。
对于线性方程组AX=B,其中 A 是系数矩阵,X 是未知数向量,B 是已知向量。
我们可以通过以下公式进行逐次逼近:X(k+1) = D^(-1)*(B - (L+U)X(k))其中,D、L、U 分别是 A 的对角线、下三角和上三角矩阵。
jacobi 迭代法的优点在于易于理解和实现,但在收敛速度上较慢,需要进行多次迭代才能得到精确解。
在实际应用中,需要根据实际情况选择合适的迭代次数。
3. gauss-seidel 迭代法的原理和应用与 jacobi 迭代法类似,gauss-seidel 迭代法也是一种基于逐次逼近的迭代方法。
不同之处在于,gauss-seidel 迭代法在计算 X(k+1) 时利用了已经得到的 X(k) 的信息,即:X(k+1)_i = (B_i - Σ(A_ij*X(k+1)_j,j≠i))/A_ii这种方式使得 gauss-seidel 迭代法的收敛速度较快,通常比 jacobi 迭代法更快,尤其是对于对角占优的方程组。
4. 分别用 jacobi 迭代法和 gauss-seidel 迭代法求解方程组为了更具体地说明 jacobi 迭代法和 gauss-seidel 迭代法的应用,我们分别用这两种方法来求解以下方程组:2x1 + x2 = 9x1 + 3x2 = 11我们将该方程组写成矩阵形式 AX=B:|2 1| |x1| |9||1 3| * |x2| = |11|我们根据 jacobi 迭代法和 gauss-seidel 迭代法的原理,依次进行迭代计算,直到满足收敛条件。
125赵连云-雅可比迭代法与高斯—塞德尔迭代法的比较
雅可比迭代法与高斯—塞德尔迭代法的比较赵连云(03211085)包头师范学院数学科学学院摘要:在求解线性代数方程组的许多实际问题中,尤其在偏微分方程的差分方法与有限方法的求解问题之中,用迭代法去解线形方程组有明显的优点.其中最主要的是雅可比(Jacobi )迭代法和高斯-塞得尔(Gauss-Seidel )迭代法,本文就这两种方法及它们的收敛判别条件作了较系统的归纳总结,并给出典型例子加以分析.对具体的求解中,选用那一种方法使解题更快速,更有效有着重要意义.关键词:Jacobi 迭代法; Gauss-Seidel 迭代法; 收敛; 比较.一 预备知识定义1 设()nn ij a A ⨯=为n 阶矩阵.① ①如果n,...,i ,a a ni j ij ij ii 21=∑>≠= (13)即A 的每一行对角元素的绝对值都严格大于同行其他元素绝对值之和,则称A 为严格对角优势矩阵.② ②如果n,...,i ,a a ni j i j ij ii 21=∑≥≠=且至少有一个不等式严格成立,则称A 为弱对角优势矩阵.例如⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-31131012是严格对角优势矩阵,⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--310121011是弱对角优势矩阵.定义2 设()nn ij a A ⨯=是n 阶矩阵,如果经过行的互换及相应列的互换可化为⎥⎦⎤⎢⎣⎡221211A A A , 即存在n 阶排列矩阵P,使⎥⎦⎤⎢⎣⎡=2212110A A A AP P T其中2211A ,A 为方阵,则称A 是可约的,否则称A 为不可约的. 二 具体内容 (一) 雅可比迭代法设线性方程组b Ax = (1)的系数矩阵A 可逆且主对角元素nn a ,...,a ,a 2211均不为零,令 ()nna ,...,a ,a diag D 2211=并将A 分解成()D D A A +-= (2) 从而(1)可写成()b x A D Dx +-= 令11f x B x +=其中b D f ,A D I B 1111--=-=. (3)以1B 为迭代矩阵的迭代法(公式)()()111f xB xk k +=+ (4)称为雅可比(Jacobi)迭代法(公式),用向量的分量来表示,(4)为⎩⎨⎧[],...,,k ,n ,...,i xab ax nij j )k (jji i ii)k (i21021111==∑-=≠=+ (5)其中()()()()()Tnx ,...x ,x x002010=为初始向量.由此看出,雅可比迭代法公式简单,每迭代一次只需计算一次矩阵和向量的乘法.在电算时需要两组存储单元,以存放()k x 及()1+k x.例1 用雅可比迭代法求解下列方程组⎪⎩⎪⎨⎧=+--=-+-=--2453821027210321321321.x x x .x x x .x x x解 将方程组按雅可比方法写成⎪⎪⎩⎪⎪⎨⎧++=++=++=840202083020107202010213312321.x .x .x .x .x .x .x .x .x取初始值()()()()()()TT,,,x ,x ,x x0000302010==按迭代公式()()()()()()()()()⎪⎪⎩⎪⎪⎨⎧++=++=++=+++840202083020107202010211331123211.x .x .x .x .x .x .x .x .x k k k k k k k k k进行迭代,其计算结果如表1所示表1(二) 高斯—塞德尔迭代法由雅可比迭代公式可知,在迭代的每一步计算过程中是用()k x 的全部分量来计算()1+k x的所有分量,显然在计算第i 个分量()1+k ix 时,已经计算出的最新分量()()1111+-+k i k x ,...,x 没有被利用,从直观上看,最新计算出的分量可能比旧的分量要好些.因此,对这些最新计算出来的第1+k 次近似()1+k x的分量()1+k jx 加以利用,就得到所谓解方程组的高斯—塞德(Gauss-Seidel )迭代法.把矩阵A 分解成U L D A --= (6)其中()nna ,...,a ,a diagD 2211=,U ,L --分别为A 的主对角元除外的下三角和上三角部分,于是,方程组(1)便可以写成 ()b Ux x L D +=- 即22f x B x +=其中()()b L D f ,U L D B 1212---=-= (7)以2B 为迭代矩阵构成的迭代法(公式)()()221f xB xk k +=+ (8)称为高斯—塞德尔迭代法(公式),用 量表示的形式为⎩⎨⎧[],...,,k ,n ,,i x a x a b a x i j ni j )k (jij )k (jij i ii)k (i21021111111==∑∑--=-=+=++ (9)由此看出,高斯—塞德尔迭代法的一个明显的优点是,在电算时,只需一组存储单元(计算出()1+k ix 后()k ix 不再使用,所以用()1+k ix 冲掉()k ix ,以便存放近似解.例2 用高斯——塞德尔迭代法求解例1. 解 取初始值()()()()()()TT,,,x ,x ,x x0000302010==,按迭代公式()()()()()()()()()⎪⎩⎪⎨⎧++=++=++=++++++840202083020107202010121113311123211.x .x .x .x .x .x .x .x .x k k k k k k k k k进行迭代,其计算结果如下表2表2从此例看出,高斯—塞德尔迭代法比雅可比迭代法收敛快(达到同样的精度所需迭代次数少),但这个结论,在一定条件下才是对的,甚至有这样的方程组,雅可比方法收敛,而高斯—塞德尔迭代法却是发散的. (三)迭代收敛的充分条件定理1 在下列任一条件下,雅可比迭代法(5)收敛.①111<∑=≠=∞ni j j ii ij ia a max B ;②1111<∑=≠=nij i iiij ja a max B ;③ 111<∑=-≠=∞-nji i jjij jTa a max AD I定理2 设21B B ,分别为雅可比迭代矩阵与高斯—塞德尔迭代矩阵,则∞∞≤12B B (10)从而,当111<∑=≠=∞ni j j iiij ia a max B时,高斯—塞德尔迭代法(8)收敛. 证明 由21B B ,的定义,它们可表示成()U L DB +=-11()()U D L D I U L D B 11112-----=-=用e 表示n 维向量()T,...,,e 111=,则有不等式eB e B ∞≤11UD LD B 111--+=这里,记号|·|表示其中矩阵的元素都取绝对值,而不等式是对相应元素来考虑的,于是()()()Ie B L D I eL D B e U D ∞------≤-=111111容易验证()011==--nnLD L D所以,L D I 1--及LD I 1--可逆,且()()()1111111111-----------=++≤+++=-L D I LD ...L D I L D ...L D I LD I n n()I L D I≥---11从而有()()((){}e I B L D I LD I eU D L D I e B ∞----------≤⋅-≤111111121{()()}eB eLD II B I ∞--∞≤-⋅--=11111因此必有∞∞≤12B B因为已知11<∞B 所以12<∞B .即高斯—塞德尔迭代法收敛.若矩阵A 为对称,我们有定理3 若矩阵A 正定,则高斯—塞德尔迭代法收敛. 证明 把实正定对称矩阵A 分解为 TL L D A --=()TLU=,则D 为正定的,迭代矩阵()TL L D B 12--=设λ是2B 的任一特征值,x 为相应的特征向量,则()()x x L L D Tλ=--1以L D -左乘上式两端,并由TL L D A --=有()Ax x LTλλ=-1用向量x 的共轭转置左乘上式两端,得()Ax x x L xTTT--=-λλ1 (11)求上式左右两端的共轭转置,得Ax x x L x T T----=⎪⎭⎫ ⎝⎛-λλ1以λ--1和λ-1分别乘以上二式然后相加,得()()Axx x L L x TT T -----⎪⎭⎫ ⎝⎛-+=+⎪⎭⎫ ⎝⎛--λλλλλλ211由TL L D A --=,得()()Axx x A D x TT -----⎪⎭⎫ ⎝⎛-+=-⎪⎭⎫ ⎝⎛--λλλλλλ211即()Axxx L x TT---=-λλλ2211 (12)因为A 和D 都是正定的,且x 不是零向量,所以由(11)式得1≠λ,而由(12)式得012>-λ, 即1<λ,从而()12<B ρ,因而高斯—塞德尔迭代法收敛.定理4如果A 为严格对角优势矩阵或为不可约弱对角优势矩阵,则对任意()0x,雅可比迭代法(4)与高斯—塞德尔迭代法(8)均为收敛的.证明 下面我们以A 为不可约弱对角优势矩阵为例,证明雅可比迭代法收敛.要证明雅可比迭代法收敛,只要证()11<B ρ,1B 是迭代矩阵.用反证法,设矩阵1B 有某个特征值μ,使得1≥μ,则()01=-B I det μ,由于A 不可约,且具有弱对角优势,所以1-D 存在,且()()D A D DA D I IB I -+=--=---μμμ111从而()0=-+D A D det μ另一方面,矩阵()D A D -+μ与矩阵A 的非零元素的位置是完全相同的,所以()D A D-+μ也是不可约的,又由于1≥μ,且A 弱对角优势,所以n,...,i ,a a a nij i j ij ii ii 21=∑≥≥≠=μ并且至少有一个i 使不等号严格成立.因此,矩阵()D A D -+μ弱对角优势,故()D A D-+μ为不可约弱对角优势矩阵.从而()0≠-+D A D det μ 矛盾,故1B 的特征值不能大于等于1,定理得证. (四)典型例题例 设Ax=其系数矩阵A =⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡143434314343431证明:它的Jacobi 迭代公式发散,而 Gauss-Seidel 迭代公式收敛. 证:矩阵A 的Jacobi 迭代公式B = -D 1-(L+U )⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡------043434304343430B 1>1 B ∞>1∴只能用 ρ(B).f(λ)=B I -λ=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡λλλ434343434343=λ3-3⎪⎭⎫⎝⎛432λ+2⎪⎭⎫⎝⎛433=0 即0322716273=+-λλ∴431=λ432=λ233-=λ∴23)(max 31==≤≤λρiB i >1所以 其Jacobi 迭代公式发散. A 的高斯-塞得尔迭代矩阵G = -()L D +-1U()⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡---=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⨯⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡---=+-6445649016316904343000043004343014316301430011U L D ∴G=-()⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡---=+-64456490163169434301U L DG 1>1 G ∞>1∴只能用()G ρ=)(λf 06445649016316904343=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡---=-λλλλG I ∴01=λi 146.0633.02+=λi 146.0633.03-=λ∴ 1)(<G ρ所以 高斯-塞得尔迭代法收敛. 三 总结以上给出了雅可比迭代法和高斯-塞得尔迭代法及判断它们收敛的各种方法,通过例题可以看出雅可比迭代法的收敛性和高斯-塞得尔迭代法的收敛性之间没有必然的联系.这些知识让我们对迭代法有了更广泛更深入的了解.特别是在解线性方程组时,怎样选择合适的方法去解题有实际意义. 四 参考文献1 《数植分析原理》[M ] 吴勃英编 科学出版社 2003年8月2 《数值计算方法和算法》[M ] 张韵华等编 科学出版社 2000年1月3 《计算方法》[M ] 姚敬之等编 河海大学出版社 2002年4 《计算机数值方法》[M ] 施吉林等编 高等教育出版社 1999年5 《算法语言与计算方法基础》[M ] 刘水强编 科学出版社 2005年4月。
Jacobi迭代法 Gauss-Seidel迭代法
Matlab线性方程组的迭代解法(Jacobi迭代法Gauss-Seidel迭代法)实验报告2008年11月09日星期日12:491.熟悉Jacobi迭代法,并编写Matlab程序matlab程序按照算法(Jacobi迭代法)编写Matlab程序(Jacobi.m)function [x, k, index]=Jacobi(A, b, ep, it_max)%求解线性方程组的Jacobi迭代法,其中% A ---方程组的系数矩阵% b ---方程组的右端项% ep ---精度要求。
省缺为1e-5% it_max ---最大迭代次数,省缺为100% x ---方程组的解% k ---迭代次数% index --- index=1表示迭代收敛到指定要求;% index=0表示迭代失败if nargin <4 it_max=100; endif nargin <3 ep=1e-5; endn=length(A); k=0;x=zeros(n,1); y=zeros(n,1); index=1;while 1for i=1:ny(i)=b(i);for j=1:nif j~=iy(i)=y(i)-A(i,j)*x(j);endendif abs(A(i,i))<1e-10 | k==it_maxindex=0; return;endy(i)=y(i)/A(i,i);endif norm(y-x,inf)<epbreak;endx=y; k=k+1;end用Jacobi迭代法求方程组的解。
输入:A=[4 3 0;3 3 -1;0 -1 4];b=[24;30;-24];[x, k, index]=Jacobi(A, b, 1e-5, 100)输出:x =-2.999811.9987-3.0001k =100index =2.熟悉Gauss-Seidel迭代法,并编写Matlab程序function [v,sN,vChain]=gaussSeidel(A,b,x0,errorBound,maxSp)%Gauss-Seidel迭代法求解线性方程组%A-系数矩阵b-右端向量x0-初始迭代点errorBound-近似精度maxSp-最大迭代次数%v-近似解sN-迭代次数vChain-迭代过程的所有值step=0;error=inf;s=size(A);D=zeros(s(1));vChain=zeros(15,3);%最多能记录15次迭代次数k=1;fx0=x0;for i=1:s(1)D(i,i)=A(i,i);end;L=-tril(A,-1);U=-triu(A,1);while error>=errorBound & step<maxSpx0=inv(D)*(L+U)*x0+inv(D)*b;vChain(k,:)=x0';k=k+1;error=norm(x0-fx0);fx0=x0;step=step+1;endv=x0;sN=step;用Gauss-Seidel迭代法求解上题的线性方程组,取。
雅克比迭代法和高斯赛德尔迭代法的算法描述
雅克比迭代法和高斯赛德尔迭代法的算法描述一. 雅克比迭代法雅克比迭代法(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元素的值替换成当前迭代求得的值来计算。
第八节 雅可比迭代法与高斯-塞德尔迭代法综述
第八节 雅可比迭代法与高斯—塞德尔迭代法一 雅可比迭代法设线性方程组b Ax = (1) 的系数矩阵A 可逆且主对角元素nn a ,...,a ,a 2211均不为零,令()nna ,...,a ,a diag D 2211=并将A 分解成()D D A A +-= (2)从而(1)可写成 ()b x A D Dx +-=令11f x B x +=其中b D f ,A D I B 1111--=-=. (3) 以1B 为迭代矩阵的迭代法(公式)()()111f x B x k k +=+ (4)称为雅可比(Jacobi)迭代法(公式),用向量的分量来表示,(4)为⎩⎨⎧[],...,,k ,n ,...,i x a ba xnij j )k (j j i iii)k (i21021111==∑-=≠=+ (5)其中()()()()()Tn x ,...x ,x x 002010=为初始向量.由此看出,雅可比迭代法公式简单,每迭代一次只需计算一次矩阵和向量的乘法.在电算时需要两组存储单元,以存放()k x 及()1+k x . 例1 例1 用雅可比迭代法求解下列方程组⎪⎩⎪⎨⎧=+--=-+-=--2453821027210321321321.x x x .x x x .x x x解 将方程组按雅可比方法写成⎪⎪⎩⎪⎪⎨⎧++=++=++=8402020830201072020*******2321.x .x .x .x .x .x .x .x .x取初始值()()()()()()T T ,,,x ,x ,x x 0000302010==按迭代公式()()()()()()()()()⎪⎪⎩⎪⎪⎨⎧++=++=++=+++840202083020107202010211331123211.x .x .x .x .x .x .x .x .x k k k k k k k k k进行迭代,其计算结果如表1所示表1二 高斯—塞德尔迭代法由雅可比迭代公式可知,在迭代的每一步计算过程中是用()k x的全部分量来计算()1+k x的所有分量,显然在计算第i 个分量()1+k i x 时,已经计算出的最新分量()()1111+-+k i k x ,...,x 没有被利用,从直观上看,最新计算出的分量可能比旧的分量要好些.因此,对这些最新计算出来的第1+k 次近似()1+k x的分量()1+k jx 加以利用,就得到所谓解方程组的高斯—塞德(Gauss-Seidel )迭代法.把矩阵A 分解成U L D A --= (6)其中()nn a ,...,a ,a diag D 2211=,U ,L --分别为A 的主对角元除外的下三角和上三角部分,于是,方程组(1)便可以写成 ()b Ux x L D +=-即 22f x B x +=其中()()b L D f ,U L D B 1212---=-= (7)以2B 为迭代矩阵构成的迭代法(公式)()()221f x B x k k +=+ (8)称为高斯—塞德尔迭代法(公式),用 量表示的形式为⎩⎨⎧[],...,,k ,n ,,i x a x a b a xi j n i j )k (j ij )k (j ij i ii)k (i21021111111==∑∑--=-=+=++ (9)由此看出,高斯—塞德尔迭代法的一个明显的优点是,在电算时,只需一组存储单元(计算出()1+k ix 后()k ix 不再使用,所以用()1+k i x 冲掉()k ix ,以便存放近似解.例2 例2 用高斯——塞德尔迭代法求解例1.解 取初始值()()()()()()TT,,,x ,x ,x x 0000302010==,按迭代公式()()()()()()()()()⎪⎩⎪⎨⎧++=++=++=++++++840202083020107202010121113311123211.x .x .x .x .x .x .x .x .x k k k k k k k k k进行迭代,其计算结果如下表2从此例看出,高斯—塞德尔迭代法比雅可比迭代法收敛快(达到同样的精度所需迭代次数少),但这个结论,在一定条件下才是对的,甚至有这样的方程组,雅可比方法收敛,而高斯—塞德尔迭代法却是发散的.三 迭代收敛的充分条件定理1 在下列任一条件下,雅可比迭代法(5)收敛.①111<∑=≠=∞nij j iiij ia a max B ;②1111<∑=≠=nij i iiij ja a max B ;③ 111<∑=-≠=∞-nji i jjij jTa a max AD I定理2 设21B B ,分别为雅可比迭代矩阵与高斯—塞德尔迭代矩阵,则∞∞≤12B B (10)从而,当111<∑=≠=∞nij j iiij ia a max B时,高斯—塞德尔迭代法(8)收敛. 证明 由21B B ,的定义,它们可表示成()U L D B +=-11()()U D L D I U L D B 11112-----=-=用e 表示n 维向量()T,...,,e 111=,则有不等式eB e B ∞≤11UD L D B 111--+=这里,记号|·|表示其中矩阵的元素都取绝对值,而不等式是对相应元素来考虑的,于是()()()Ie B L D I eL D B e U D ∞------≤-=111111容易验证()11==--nnL D L D所以,L D I 1--及L D I 1--可逆,且()()()1111111111-----------=++≤+++=-L D I LD ...L D I L D ...L D I LD I n n()I L D I ≥---11从而有()()((){}e I B L D I L D I eU D LD I e B ∞----------≤⋅-≤111111121{()()}eB eL D I I B I ∞--∞≤-⋅--=11111因此必有∞∞≤12B B因为已知11<∞B 所以12<∞B .即高斯—塞德尔迭代法收敛.若矩阵A 为对称,我们有定理3 若矩阵A 正定,则高斯—塞德尔迭代法收敛.证明 把实正定对称矩阵A 分解为T L L D A --=()TL U =,则D 为正定的,迭代矩阵()T L L D B 12--=设λ是2B 的任一特征值,x 为相应的特征向量,则()()x x L L D T λ=--1以L D -左乘上式两端,并由TL L D A --=有()Ax x L T λλ=-1用向量x 的共轭转置左乘上式两端,得()Ax x x L xTTT--=-λλ1 (11)求上式左右两端的共轭转置,得Ax x x L x T T ----=⎪⎭⎫ ⎝⎛-λλ1以λ--1和λ-1分别乘以上二式然后相加,得()()Axx x L L x T T T -----⎪⎭⎫ ⎝⎛-+=+⎪⎭⎫ ⎝⎛--λλλλλλ211 由TL L D A --=,得()()Axx x A D x T T -----⎪⎭⎫ ⎝⎛-+=-⎪⎭⎫ ⎝⎛--λλλλλλ211即()Ax x x L x TT---=-λλλ2211 (12)因为A 和D 都是正定的,且x 不是零向量,所以由(11)式得1≠λ,而由(12)式得012>-λ, 即1<λ,从而()12<B ρ,因而高斯—塞德尔迭代法收敛.定义1 设()nn ij a A ⨯=为n 阶矩阵.① ①如果n,...,i ,a a nij i j ij ii 21=∑>≠= (13)即A 的每一行对角元素的绝对值都严格大于同行其他元素绝对值之和,则称A 为严格对角优势矩阵.② ②如果n,...,i ,a a nij i j ij ii 21=∑≥≠=且至少有一个不等式严格成立,则称A 为弱对角优势矩阵.例如⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-310131012是严格对角优势矩阵,⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--310121011是弱对角优势矩阵. 定义2 设()nn ij a A ⨯=是n 阶矩阵,如果经过行的互换及相应列的互换可化为⎥⎦⎤⎢⎣⎡2212110A A A ,即存在n 阶排列矩阵P,使⎥⎦⎤⎢⎣⎡=2212110A A A AP P T其中2211A ,A 为方阵,则称A 是可约的,否则称A 为不可约的.A 是可约矩阵,意味着b Ax =可经过若干次行列重排,化为两个低阶方程组,事实上,b Ax =可化为 ()b P x P AP P TT T =,记()()()()⎥⎦⎤⎢⎣⎡==⎥⎦⎤⎢⎣⎡==2121d d d b P ,y y y x P TT于是,求解b Ax =化为求解()()()()()⎪⎩⎪⎨⎧=+=+22221212111d y A d y A y A可以证明,如果A 为严格对角优势矩阵或为不可约弱对角优势矩阵,则A 是非奇异的.定理4 如果A 为严格对角优势矩阵或为不可约弱对角优势矩阵,则对任意()0x ,雅可比迭代法(4)与高斯—塞德尔迭代法(8)均为收敛的.证明 下面我们以A 为不可约弱对角优势矩阵为例,证明雅可比迭代法收敛,其他证明留给读者.要证明雅可比迭代法收敛,只要证()11<B ρ,1B 是迭代矩阵.用反证法,设矩阵1B 有某个特征值μ,使得1≥μ,则()01=-B I det μ,由于A 不可约,且具有弱对角优势,所以1-D 存在,且 ()()D A D D A D I I B I -+=--=---μμμ111从而()0=-+D A D detμ另一方面,矩阵()D A D -+μ与矩阵A 的非零元素的位置是完全相同的,所以()D A D -+μ也是不可约的,又由于1≥μ,且A 弱对角优势,所以n,...,i ,a a a nij i j ij ii ii 21=∑≥≥≠=μ并且至少有一个i 使不等号严格成立.因此,矩阵()D A D -+μ弱对角优势,故()D A D -+μ为不可约弱对角优势矩阵.从而()0≠-+D A D det μ矛盾,故1B 的特征值不能大于等于1,定理得证.。
3.2Jacobi迭代法和Gauss-Seidel迭代法.
步骤1 输入系数矩阵A,右端向量b,以及初始向量 x0 ,
精度 , 最大迭代次数 N .令 k 1.
步骤2 当k N时,执行步骤2.1 2.2.
步骤2.1 对i 1, 2, , n,计算
x k 1 i
1 aii
n
aij xkj
j1, ji
bi
.
aii 0 (i 1, 2, , n)
下面考虑一般的情形:
Ax b,
(3.2.1)
其中A是n阶非奇异矩阵. 且其主对角元素 aii 0 (i 1, 2, , n).
方程组(3.2.1)的分量形式为
n
aij x j bi , i 1, 2, , n.
j 1
因aii 0, 所以有
卡尔.雅可比
以上迭代法称为Jacobi迭代法.
卡尔 雅可比(Carl Gustav Jacobi, 1804--1851) 是一位德国数学家. 1804年生于波茨坦.
Jacobi是历史上最伟大的数学家之一,他在数学 方面的突出成就是和挪威数学家 Abel 相互独立地奠 定了椭圆函数论的基础.Jacobi的工作还包括代数学、 变分法、复变函数论、微分方程和数学史等方面. Jacobi 在数值计算方面的主要贡献是提出求解线性方程组的 迭代法以及求解矩阵的特征值和特征向量的方法等.
计算结果见下表:
k
x1k
00
x2k
x3k
0
0
k
x1k
x2k
x3k
3 0.9950 0.9850 0.9900
1 0.9000 0.7000 0.8000 4 0.9985 0.9975 0.9970
jacobi迭代法和Gauss-Seidel迭代法
数值计算方法实验报告(五)班级:地信10801 序号:姓名:一、实验题目:jacobi迭代法和Gauss-Seidel迭代法二、实验学时: 2学时三、实验目的和要求:1.掌握迭代法的基础原理。
2.掌握jacobi迭代法和Gauss-Seidel迭代法的步骤。
3.能用程序语言对jacobi迭代法和Gauss-Seidel迭代法进行编程实现。
四、实验过程代码及结果1、代码:#include<iostream.h>#include<math.h>float x[100],xk[100];float e;int N,M=1000;float a[100][101];void initdata(){cout<<"输入方程阶数:";cin>>N;cout<<"输入误差限e:";cin>>e;cout<<"输入方程系数:"<<endl;for(int i=1;i<=N;i++)for(int j=1;j<=N+1;j++)cin>>a[i][j];cout<<"输入初始解向量x0:"<<endl;for(i=1;i<=N;i++)cin>>xk[i];}void jocobi(){int Nx=0,times=0;while(Nx<N){times++; Nx=0;if(times>=M){cout<<"发散"<<endl; break;}for(int i=1;i<=N;i++){float sum=0;for(int j=1;j<=N;j++)if(i!=j)sum+=xk[j]*a[i][j];x[i]=(a[i][N+1]-sum)/a[i][i];if(fabs(x[i]-xk[i])<e)Nx++;}for(i=1;i<=N;i++)xk[i]=x[i];}cout<<"times="<<times<<endl;for(int i=1;i<=N;i++)cout<<"x["<<i<<"]="<<x[i]<<endl;}void guass_seidel(){int Nx=0,times=0;while(Nx<N){times++;Nx=0;if(times>=M){cout<<"发散"<<endl;break;}for(int i=1;i<=N;i++){float sum1=0;float sum2=0;for( int j=i+1;j<=N;j++){sum1+=xk[j]*a[i][j];}for( j=1;j<=i-1;j++){sum2+=a[i][j]*xk[j];}x[i]=(a[i][N+1]-sum1-sum2)/a[i][i];if(fabs(x[i]-xk[i])<e)Nx++;}for(i=1;i<=N;i++)xk[i]=x[i];}cout<<"times="<<times<<endl;for(int i=1;i<=N;i++)cout<<"x["<<i<<"]="<<x[i]<<endl;}void main(){char ch;initdata();cout<<"请选择解方程的方法:\n";cout<<"A:jocobi B:guass_seidel \n";cin>>ch;if(ch=='A')jocobi();else if(ch=='B')guass_seidel();}2.结果:欢迎您的下载,资料仅供参考!。
数值研究分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组
数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组————————————————————————————————作者:————————————————————————————————日期:作业六:分别编写用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组Ax=B的标准程序,并求下列方程组的解。
可取初始向量X(0) =(0,0,0)’;迭代终止条件||x(k+1)-x(k)||<=10e-6(1)[8 −1 12 10 −11 1 −5][x1x2x3]=[143](2)[5 2 1−1 4 22 −3 10][x1x2x3]=[−12203]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>efor i=1:nd=A(i,i);if abs(d)<ewarning('矩阵A输入有误');return;endsum=0;for j=1:nif j~=isum=sum+A(i,j)*x0(j);endendx1(i)=(b(i)-sum)/A(i,i);endk=k+1;r=max(abs(x1-x0));x0=x1;fprintf('第%d次迭代:',k)fprintf('\n与上次计算结果的距离:%f \n',r)disp(x1);if k>100warning('不收敛');endendx=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不是方阵');endn=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)*Ud=zeros(n,1);%d=inv(D+L)*bx=zeros(n,1);for i=1:n%初始化L和Ufor j=1:nif i<jL(i,j)=A(i,j);endif i>jU(i,j)=A(i,j);endendendfor i=1:n%初始化DD(i,i)=A(i,i);endG=-inv(D+L)*U;%初始化Gd=(D+L)\b;%初始化d%迭代开始x1=x;x2=G*x+d;while norm(x2-x1,inf)>10^(-6)x1=x2;x2=G*x2+d;N=N+1;endx=x2;程序结果(1)(2)。
雅可比迭代法,高斯迭代法,松弛迭代法
10 1
10 2
5
同样取初始向量x(0)=(0,0,0)T, 计算结果为
k
x1(k)
0
0
x2(k) 0
x3(k) 0
‖x(k)-x*‖
1
1
1.4
0.78
1.026
0.4
2 1.0634 1.02048 0.987516 0.0634
3 0.9951044 0.99527568 1.00190686 0.0048956
0
若记 g ( b1 , b2 ,, bn )T ,则J迭代法可写成
a11 a22x(k+1a)=nnBx(k)+g
k=0,1,2,…
§3.2.2 高斯-赛德尔 (Gauss-Seidel) 迭代法
若在J迭代法中,充分利用新值, 则可以得到如下的迭
代公式
x1(
k
x1(
k
1)
a12 a11
x(k) 2
a13 a11
x(பைடு நூலகம்) 3
a1n a11
x(k) n
b1 a11
x
(k
2
1)
a21 a22
x(k) 1
a23 a22
x(k) 3
a2n a22
x(k) n
b2 a22
方程组的精确解为x*=(1,1,1)T.
解 J迭代法计算公式为
x (k 1) 1
3 10
x(k) 2
x 1 (k ) 10 3
Jacobi迭代法和Gauss-Seidel迭代法解线性方程组
实验四线性方程组的迭代解法一、实验目的(1) 学会用Jacobi迭代法、Gauss- Seidel迭代法和超松弛迭代法求线性方程组解(2) 学会对各种迭代法作收敛性分析,研究求方程组解的最优迭代方法.(3) 按照题目要求完成实验内容,写出相应的Matlab程序,给出实验结果.(4) 对实验结果进行分析讨论.(5) 写出相应的实验报告.二、实验内容1.熟悉Jacobi迭代法,并编写Matlab程序matlab程序按照算法(Jacobi迭代法)编写Matlab程序(Jacobi.m)function [x,k,index]=Jacobi(A,b,ep,it_max)if nargin<4it_max=100;endif nargin<3ep=1e-5;endn=length(A);k=0;x=zeros(n,1);y=x;index=1;while 1for i=1:ny(i)=b(i);for j=1:nif j~=iy(i)=y(i)-A(i,j)*x(j);endendif abs(A(i,i))<1e-10||k==it_maxindex=0;return;endy(i)=y(i)/A(i,i);endif norm(y-x,inf)<ep;break;endx=y;k=k+1;end2. 熟悉Gauss-Seidel 迭代法,并编写Matlab 程序3.练习练习题1. 用Jacobi 迭代法求方程组123430243313001424x x x ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥-=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥--⎣⎦⎣⎦⎣⎦的解。
练习题2. 用Gauss-Seidel 迭代法求解上题的线性方程组,取(0)5(0,0,0),10T x ε-==。
function [x,k,index]=Gauss_Seidel(A,b,ep,it_max) if nargin<4it_max=100;endif nargin<3ep=1e-5;endn=length(A);k=0;x=zeros(n,1);y=x;y1=y;index=1;while 1for i=1:ny(i)=b(i);for j=1:nif j>iy(i)=y(i)-A(i,j)*y1(j);endif j<iy(i)=y(i)-A(i,j)*x(j);endendif abs(A(i,i))<1e-10||k==it_maxindex=0;return ;endy(i)=y(i)/A(i,i);y1(i)=y(i);endif norm(y-x,inf)<ep;break ;endx=y;k=k+1;end三、实验要求要求在实验前必须预习,将实验内容事先准备好,否则不允许上机。
Jacobi迭代法_Gauss-Seidel迭代法
Matlab线性方程组的迭代解法(Jacobi迭代法Gauss-Seidel迭代法)实验报告2008年11月09日星期日12:49Jacobi迭代法,并编写Matlab程序matlab程序按照算法(Jacobi迭代法)编写Matlab程序(Jacobi.m)function [x, k, index]=Jacobi(A, b, ep, it_max)%求解线性方程组的Jacobi迭代法,其中% A ---方程组的系数矩阵% b ---方程组的右端项% ep ---精度要求。
省缺为1e-5% it_max ---最大迭代次数,省缺为100% x ---方程组的解% k ---迭代次数% index --- index=1表示迭代收敛到指定要求;% index=0表示迭代失败if nargin <4 it_max=100; endif nargin <3 ep=1e-5; endn=length(A); k=0;x=zeros(n,1); y=zeros(n,1); index=1;while 1for i=1:ny(i)=b(i);for j=1:nif j~=iy(i)=y(i)-A(i,j)*x(j);endendif abs(A(i,i))<1e-10 | k==it_maxindex=0; return;endy(i)=y(i)/A(i,i);endif norm(y-x,inf)<epbreak;endx=y; k=k+1;end用Jacobi迭代法求方程组的解。
输入:A=[4 3 0;3 3 -1;0 -1 4];b=[24;30;-24];[x, k, index]=Jacobi(A, b, 1e-5, 100)输出:x =k =100index =Gauss-Seidel迭代法,并编写Matlab程序function [v,sN,vChain]=gaussSeidel(A,b,x0,errorBound,maxSp)%Gauss-Seidel迭代法求解线性方程组%A-系数矩阵b-右端向量x0-初始迭代点errorBound-近似精度maxSp-最大迭代次数%v-近似解sN-迭代次数vChain-迭代过程的所有值step=0;error=inf;s=size(A);D=zeros(s(1));vChain=zeros(15,3);%最多能记录15次迭代次数k=1;fx0=x0;for i=1:s(1)D(i,i)=A(i,i);end;L=-tril(A,-1);U=-triu(A,1);while error>=errorBound & step<maxSpx0=inv(D)*(L+U)*x0+inv(D)*b;vChain(k,:)=x0';k=k+1;error=norm(x0-fx0);fx0=x0;step=step+1;endv=x0;sN=step;用Gauss-Seidel迭代法求解上题的线性方程组,取。
雅克比迭代法和高斯-塞德尔迭代法
一、 向量范数
定义:设 f ( x是) Rn的一R个映射,若对
x Rn
存在唯一实数 x与之对应,且满足
非负性: x 0,x Rn 且 x 0 x 0
❖齐次性: x x ,x Rn , R
三角不等性:x y x y , x, y Rn
则称 x为 中Rn向量 的x范数。
A Rnn,存在唯一实数 A与之对应,且满足
非负性:A 0,A Rnn且 A 0 A 0
❖齐次性: A A , A Rnn , R
三角不等性: A B A B , A, B Rnn AB A B A, B Rnn
则称 A为 R中n矩n 阵 的范A数。
➢常用的几种矩阵范数: 记 A (aij )nn
非负实值 函数
➢常用的几种向量范数:
n
设
x
( x1,
x2 ,
, xn )T
1-范数: x 1
xi
i 1
❖ 2-范数:
n
x ( 2
xi2
)
1 2
(x, x)i 1 Nhomakorabea-范数:
x
max
1 i n
xi
上述3种向量范数统称为P-范数
n
x ( p
xi p ) 1 p
1 p
i 1
二、 矩阵范数
定义:设 f ( A是) Rnn的一个R映射,若对
x3(k ) ) 10
x ( k 1) 2
(5
2 x1(k1)
3x3(k) ) (10)
x ( k 1) 3
(14
x ( k 1) 1
3x2(k1) ) 10
雅克比迭代法 取初值 x (0 0 0)T
雅可比迭代法和高斯超松弛迭代
其中ω称为松弛因子。
式(75)是迭代公式(74)的一个改进,可以选择松弛因子ω加速迭代过程的收敛。 式(75)的分量形式为
(76)
若对上述改进的迭代公式,按高斯-赛德尔迭代法尽量利用最新迭代得到的分量的原则,又可得到新的迭代公式
(77)
当线性方程组的系数矩阵A具有非零主元(aii≠0,i=1,2,3,…n)的特点时,可 以得到主元为1的方程组形式
cout<<"选用逐次超松弛法,请输入()!"<<endl;
cout<<endl;
cout<<endl;
cin>>ll;
//*****************************赋迭代初值***********************************
for(i=0;i<n;i++)
{
y[i]=1;
cout<<"计算出迭代矩阵为:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<x[i][j]<<" ";
cout<<b[i]<<" ";
cout<<endl;
}
//****************************迭代方法的选择*****************************
cc:while(e>exp)
{
for(i=0;i<n;i++)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
据(3.2.3), 将方程组(3.2.1)改写为
( D L U ) x b,
即
Dx Lx Ux b,
根据式(3.2.10),取迭代公式为
Dxk 1 Lxk 1 Uxk b,
即 x k 1 ( D L)1Ux k ( D L)1 b,
xi
k 1
1 aii
n k aij x j bi , i 1, 2, , n. j 1, j i
(3.2.2)
下面推导Jacobi迭代法的矩阵形式:
把系数矩阵A分解成三部分:
A D L U ,
其中
(3.2.3)
D diag(a11, a22 , , ann ),
这就是Gauss Seidel迭代法的矩阵形式.
Gauss-Seidel迭代法的迭代矩阵
若记 G ( D L)1 U I ( D L)1 A, f ( D L)1 b,则有 x k 1 Gx k f ,
称G为Gauss Seidel迭代法的迭代矩阵.
G ( D L)1 U I ( D L)1 A
例 3.2.3
用Gauss Seidel迭代法解例3.2.1的线性方程组,其迭代公式为
k 1 x1 k 1 x2 k 1 x3
直至 x
k 1
1 k 9 x2 , 10 10 1 k 1 1 k 7 x1 x3 , 10 5 10 1 k 1 4 x2 , 5 5
x
k 1
Jx f
k
(3.2.8)
称矩阵J 为Jacobi迭代法的迭代矩阵.
J D1 ( L U ) I D1 A
3.2.2
算法3.1 Jacobi迭代法
算法与程序
说明:为简单起见,假定系数矩阵A非奇异,且 aii 0 (i 1, 2, , n) ,且假设Jacobi迭代法收敛.
当 k N时, 执行步骤2.1-2. 2. 步骤 2.1 对 i 1, 2, , n,计算 n 1 i 1 k 1 k 1 k xi : aij x j aij x j bi . aii j 1 j i 1
最大迭代次数N . 令 k 0.
3 0 T
x
k
10 . 取初始向量 x 0, 0, 0 ,迭代结果
见表3.2.
表3.2
k 0 0
x
k 1
x2
0
k
x3
k
k 0 3
x1k
0.99570
x2 k
0.99785
x3k
0.99957
1
0.90000 0.70000
0.80000
4
0.99979
0.99989
0.99998
% 功能:用Gauss Seidel迭代法解 n 阶线性方程组 Ax b.
n length b ; x ones n,1 ; k 0;
while k N for i 1: n
x i A i, 1: i 1 * x 1: i 1 A i, i 1: n * x0 i 1: n b i ...
i 1 k a x ij j j 1
aij x j bi , i 1, 2, , n. j i 1
n k
(3.2.9)
注意到计算 x k 1 的第 i 个分量 xik 1 时前面的 ( i 1) 个分量 已经计算出来,如果计算第 i 个分量时,前( i 1)个分量使用 最新的值,则得到
步骤 2.2
若 x k 1 x k ,则算法停止,输出
方程组的近似解 xk 1;否则,令 x k : x k 1 , k : k 1 .
步骤 3 输出信息" 超出最大迭代次数! ",算法终止.
算法3.2的Matlab程序
% Gauss _ Seidel.m
function x=Gauss _Seidel A, b, x0, eps, N
例3.2.2
用Jacobi迭代法程序Jacobi.m求解线性方程组:
10 1 2 0 x1 6 1 11 1 3 x 25 2 . 2 1 10 1 x3 11 x 0 3 1 8பைடு நூலகம்15 4
方程组(3.2.1)的分量形式为
aii 0
a x
j 1 ij
n
j
bi , i 1, 2, , n.
因aii 0, 所以有
1 xi aii
n aij x j bi , i 1, 2, , n. j 1, j i
从而得到Jacobi迭代法的分量形式:
while k<=N for i=1:n % 步骤 2 x(i)=(b(i)-A(i,[1:i-1,i+1:n])*x0([1:i-1,i+1:n]))/A(i,i); end k=k+1 If norm(x-x0,inf)<eps, break; end x0=x; end if k>N warning(‘算法超出最大迭代次数!’); else disp([' 迭代次数= ', num2str(k)]) x end
x3k 0.9900
0.9970 0.9995
从计算结果看出,向量序列收敛到方程组的精确解 x* 1, 1, 1 .
T
卡尔.雅可比
以上迭代法称为Jacobi迭代法.
卡尔 雅可比(Carl Gustav Jacobi, 1804--1851) 是一位德国数学家. 1804年生于波茨坦. Jacobi是历史上最伟大的数学家之一,他在数学 方面的突出成就是和挪威数学家 Abel 相互独立地奠 变分法、复变函数论、微分方程和数学史等方面.
其精确解为 x 1, 1, 1 .
* T
【解】
把线性方程组改写为
9 10 x1 x2 x1 10 x2 2 x3 7 2 x2 10 x3 8
进一步改写为
1 9 x x 1 10 2 10 1 1 7 x x x 2 1 3 10 5 10 1 4 x3 5 x2 5
算法3.1的 Matlab 程序
步骤2.2 若 x k 1 x k ,则算法停止,输出
方程组的近似解 xk 1;否则,令 x k : x k 1 , k : k 1 .
步骤3 终止.
输出信息“算法超出最大迭代次数!”,算法
Matlab 程序如下:
%Jacobi.m function x = Jacobi (A, b, x0, eps, N) % 功能:用Jacobi迭代法解n 阶线性方程组 Ax=b n=length(b); x=ones(n,1); k=0;
k k x1 2 3
直到 x k 1 x k
103.
计算结果见下表:
k 3 4 5
x1k
k x2
k 0 1 2
x1k
0 0.9000 0.9700
x2k
x3k
0 0.7000 0.9500
0 0.8000 0.9400
0.9950 0.9985 0.9998
0.9850 0.9975 0.9992
0 x , 步骤1 输入系数矩阵A,右端向量b,以及初始向量
精度 , 最大迭代次数 N .令 k 1.
步骤2 当k N时,执行步骤2.1 2.2. 步骤2.1 对i 1, 2,, n,计算
x
k 1 i
1 aii
n k aij x j bi . j 1, j i
a1n a2 n an 1,n 0
(3.2.5)
于是方程组(3.2.1)改写为
Dx ( L U ) x b
即
x D ( L U ) x D b.
1
1
0 任取向量 x ,则Jacobi迭代法可写成如下的矩阵形式:
xk 1 D1 ( L U ) xk D1b, k 0, 1, 2, 若记 B D1 (L U ) I D1 A J , f D1b,则有
下面给出Gauss Seidel迭代法的具体步骤:
算法3.2 Gauss-Seidel迭代法
说明:为简单起见,假定系数矩阵A非奇异,且aii 0 (i 1, 2, , n),且假设Gauss Seidel迭代法收敛.
步骤 1
步骤 2
输入系数矩阵A,右端向量b,以及初始向量x 0,精度 ,
(3.2.4)
0 a 21 L an 1,1 an1
0 an 2 0 an ,n 1 an 1,2
, 0
0 a12 a1,n 1 0 a2,n 1 U 0
计算结果为 迭代次数= 10 x= 1.000118598691415 1.999767947010035 - 0.999828142874476 0.999785978460050
3.2.3 Gauss-Seidel迭代法
将Jacobi迭代法的迭代公式 (3.2.2) 改写为
xi
k 1
1 aii
定了椭圆函数论的基础.Jacobi的工作还包括代数学、
Jacobi 在数值计算方面的主要贡献是提出求解线性方程组的 迭代法以及求解矩阵的特征值和特征向量的方法等.
aii 0 (i 1, 2, , n)