高斯赛德尔与超松弛迭代法
迭代法求解线性方程组的研究(精选.)
迭代法求解线性方程组的研究【摘要】:本文总结了解线性方程组的三个迭代法,Jacobi 迭代法,Gauss-seidel 迭代法,SOR迭代法,并且介绍了现代数值计算软件MATLAB 在这方面的应用,即分别给出三个迭代法的数值实验。
【关键字】:Jacobi 迭代法 Gauss-seidel 迭代法 SOR 迭代法 数值实验一. 引言迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,它是解高阶稀疏方程组的重要方法。
迭代法的基本思想是用逐次逼近的方法求解线性方程组。
设有方程组b Ax = …① 将其转化为等价的,便于迭代的形式f Bx x += …② (这种转化总能实现,如令b f A I B =-=,), 并由此构造迭代公式 f Bx xk k +=+)()1( …③式中B 称为迭代矩阵,f 称为迭代向量。
对任意的初始向量)0(x,由式③可求得向量序列∞0)(}{k x ,若*)(lim x xk k =∞→,则*x 就是方程①或方程②的解。
此时迭代公式②是收敛的,否则称为发散的。
构造的迭代公式③是否收敛,取决于迭代矩阵B 的性质。
本文介绍三种解线性方程组的最主要的三种迭代法:Jacobi 迭代法,Gauss-Seidel 迭代法和SOR 迭代法。
本文结构如下:第二部分介绍Jacobi 迭代法及其数值实验,第三部分介绍Gauss-Seidel 迭代法及其数值实验,第四部分介绍SOR 迭代法及其数值实验,第五部分总结。
二. 雅克比(Jacobi )迭代法1. 雅克比迭代法的格式设有方程组),,3,2,1(1n i b x aj j nj ij==∑= …①矩阵形式为b Ax =,设系数矩阵A 为非奇异矩阵,且),,3,2,1(,0n i a ii =≠从式①中第i 个方程中解出x ,得其等价形式)(111j nj j ijiii x ab a x ∑≠=-= …②取初始向量),,,()0()0(2)0(1)0(n x x x x=,对式②应用迭代法,可建立相应的迭代公式:)(111)()1(∑≠=++-=nj j i k j ij ii k ib x a a x …③ 也可记为矩阵形式:J x J k F B xk +==)()1( …④若将系数矩阵A 分解为A=D-L-U ,式中⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=nn a a a D2211,⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=--0000121323121nn n n a a a a a a L ,⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=--0000122311312n n n n a a a a a a D 。
第四章-解AX=b的迭代法
•迭代格式的收敛性
2 k 引理4.1 (线性代数定理) 设矩阵序列 IM , , M , , M ,
k l i m M 0 ( M ) 1 . k
则
(证明见关治和陈景良编《数值计算方法》P410-412) 定理4.1 设迭代格式为
( k 1 ) ( k ) xM x g , k 0 , 1 , 2 , ( 4 . 3 )
充分性()设ρ(M)<1,证{x(k)}收敛。
如果ρ(M)<1 ,则I-M为非奇异矩阵。事实上,因
为ρ(M)<1,λi<1,因此λ=1不是M的特征值,即
| 1 IM || IM |0 .
所以方程组 (I-M)x = f 有惟一解x*,满足(I-M)x* = f ,即 x*=Mx* + f 。于是
( k ) ( k 1 ) 2 ( k 2 ) x x * M ( x x * ) M ( x x * ) k ( 0 ) k M ( x x * ) M . 0
由引理4.1知,
k () k I f ( M ) < 1 ,t h e nl i m M 0 , l i m ( x x * ) 0 , i . e . k k () k l i m x x * . k
写成矩阵形式
x1 0 x b 2 21 31 x3 b x b n n1
或简记为
b 12 b 13 0 b23 b 0 32 bn2 bn3
b 1n x 1 g 1 b2n x2 g2 b 3n x 3 g3 g x 0 n n
( k ) ( k ) ( k 1 ) ( k ) x x * x x q x x *
gauss-seidel迭代法收敛判断matlab
Gauss-Seidel迭代法是解线性方程组的一种常用方法,它通过不断迭代更新解向量,逐步逼近方程组的精确解。
在实际应用中,我们往往需要判断迭代法是否收敛,以保证计算结果的准确性和可靠性。
本文将以matlab为例,介绍如何利用数值计算软件对Gauss-Seidel迭代法的收敛性进行判断,并对其进行详细分析和讨论。
一、Gauss-Seidel迭代法简介Gauss-Seidel迭代法是一种逐次迭代的线性代数方法,用于求解线性方程组Ax=b的解向量x。
它的迭代更新公式为:xn+1i=1/aii(bi-∑(j=1,j≠i)n aijxj)其中,i=1,2,...,n;n为方程组的阶数;aii为系数矩阵A的第i行第i 列元素;bi是方程组右端的常数;xj为解向量x的第j个分量;∑(j=1,j≠i)n aijxj为除去第i个分量的求和。
通过不断迭代更新解向量的各个分量,最终可以逼近线性方程组的解。
二、Gauss-Seidel迭代法的收敛性判断针对Gauss-Seidel迭代法的收敛性判断,我们可以利用数值计算软件matlab进行分析。
在matlab中,可以使用以下命令进行Gauss-Seidel迭代法的计算:function[x,k]=GaussSeidel(A,b,x0,tol,maxk)n=length(b);x=x0;for k=1:maxkx0=x;for i=1:nx(i)=1/A(i,i)*(b(i)-A(i,:)*x+x(i));endif norm(x-x0,inf)<tolreturn;endenderror('达到最大迭代次数,方法未收敛');end在上述matlab代码中,A为系数矩阵,b为右端常数向量,x0为初始解向量,tol为迭代精度,maxk为最大迭代次数。
在函数中,我们设定了最大迭代次数以及迭代精度的条件,当满足这些条件时,算法将停止迭代。
三、Gauss-Seidel迭代法的收敛性分析Gauss-Seidel迭代法的收敛性与系数矩阵A的性质有关。
超松弛迭代法(SOR方法)
解:SOR迭代公式
x1( k
1)
(1 )x1(k )
4
(10 2x2(k )
4x3(k ) )
x
(k 2
1)
(1 )x2(k )
17
(3
2
x1(
k
1)
10x3(k ) )
x3( k
1)
(1 )x3(k )
9
(7 4x1(k 1)
10
x
(k 2
1)
)
初值 x (0) (0,0,0)T k = 0,1,2,…,
例该4方.4程用组S的OR精法确求解解线x (性*) 方 程(2组,1,1)T
如值只果需x(0取)迭ω取代(0=,04ω21,00x(=42)即1次T1xx,要11.高4便26达x斯11,可207到—xx要达22同4塞求到x样319德精0x精x3尔度130度迭要x,(3k7代求需1) 法要x)迭(和k) 代同1一1100初6次
数值计算方法
超松弛迭代法(SOR方法) 使用迭代法的困难在于难以估计其计算
量。有时迭代过程虽然收敛,但由于收敛速 度缓慢,使计算量变得很大而失去使用价值 。因此,迭代过程的加速具有重要意义。逐 次超松弛迭代(Successive Over relaxatic Method,简称SOR方法)法,可以看作是带参 数的高斯—塞德尔迭代法,实质上是高斯-塞 德尔迭代的一种加速方法。
或 Dx(k1) (1)Dx(k) (b Lx(k1) Ux(k) )
故 (D L)x(k1) (1)D Ux(k) b
显然对任何一个ω值,(D+ωL)非奇异,(因为假设 aii 0,i 1,2,, n )于是超松弛迭代公式为
x(k1) (D L)1 (1)D U x(k) (D L)1b
线性方程组的迭代法雅可比高斯塞德尔和超松弛迭代ppt课件
a11x1 a12 x2 a1n xn b1
a21 x1
a22 x2
a2n xn
b2
an1x1 an2 x2 ann xn bn
写据成此建立n 迭ai代j x公j 式 bi
i 1,2,, n
上若xi式(xkai称1ii)为0ja1解a11i(iiii方((bb程1ii,2组,jj的njn,1i n1Jaa)aijcxio,j分(jxbk)ij离)迭) 代出公i变i式量1,。21x,,2i , n , n
j=1
j ≠i
称A为严格对角占优阵。
2.如果A的元素满足
∑n
ai,i ≥ ai, j ,i = 1,2,..., n
j=1 j≠i
且至少一个不等式严格成立,称A为弱对角占优阵。 16
定义:设 A = (ai,j )n×n ,n ≥ 2
如果存在置换矩阵P,使得
PT
AP
A11 0
A12
A22
1
§6.1 迭代法的基本思想
迭代法的基本思想是将线性方程组转化 为便于迭代的等价方程组,对任选一组初始 值 xi(0) (i 1,2,, n) ,按某种计算规则,不断地 对所得到的值进行修正,最终获得满足精度 要求的方程组的近似解。
2
设 A Rnn 非奇异,b Rn,则线性方程组
Ax b 有惟一解 x A1b ,经过变换构造
x (k 1) 1
x (k 1) 2
x1(k 2x1(k)
)
x(k) 2
4x2(k )
3 3
取
x (0) 1
x (0) 2
0
计算得
利用超松弛迭代法求解问题
利用超松弛迭代法求解问题在电场中,利用有限差分法求解场域中各个节点的点位。
其中求解差分方程组的解运用到了超松弛方法。
超松弛方法是高斯—塞德尔迭代法的变形。
它在迭代过程中,为了加速收敛,再把所得结果依次带入进行计算的同时,还使用把每一次迭代的变化量加权后再代入的方法。
运用超松弛迭代法求解下述问题:试用超松弛迭代法求解接地金属槽内的电位的分布。
已知:A=4CM,H=A\4=10CM给定边值:如图示;给定初值:Φ=0误差范围:E=10^-5计算:迭代次数N=?,Φ的分布。
分析:(1)、节点按从下到上,从左到右的顺序排列。
(2)、按高斯—塞德尔迭代公式进行迭代。
(3)、选择加速因子Α,且A在1到2之间。
以下为该题程序段:#INCLUDE <IOSTREAM.H>#INCLUDE<MATH.H>#INCLUDE<IOMANIP.H>BOOL SUCCESS(DOUBLE A[5][5][2], DOUBLE B) 构建函数其中DOUBLE A 代表记录数据前后两次的值。
{INT I,J;FOR (I=1;I<5;I++)FOR (J=1;J<5;J++) 依次对定义数组赋值{IF ( FABS(A[I][J][1]-A[I][J][0]) > B ) 误差在题设范围内则返回值TRUERETURN TRUE;} 否则返回FALSE RETURN FALSE;}INT MAIN(){INT N,I,J;DOUBLE A[5][5][2];DOUBLE B;B=0.00005;DOUBLE S=1.21;WHILE (1){N=0;COUT<<"输入加速因子数值(1<= A < 2 ) "<<ENDL; 输入题设CIN>>S;FOR(I=0;I<5;I++)FOR(J=0;J<5;J++){A[I][J][0]=0;A[I][J][1]=0;}FOR (I=0;I<5;I++){A[I][4][0]=100;A[I][4][1]=100;}WHILE ( N==0 || SUCCESS(A,B)){FOR(I=1;I<4;I++)FOR(J=1;J<4;J++){A[I][J][0]=A[I][J][1];A[I][J][1]=A[I][J][1]+(A[I-1][J][1]+A[I+1][J][1]+A[I][J+1][1]+A[I][J-1][1] [I][J][1]*4)*S/4; 由高斯—塞德尔迭代公式写出相应公式。
线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法
线性⽅程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代⽅法西京学院数学软件实验任务书【实验课题】雅克⽐迭代、⾼斯—赛德尔迭代、超松弛迭代【实验⽬的】学习和掌握线性代数⽅程组的雅克⽐迭代、⾼斯—赛德尔迭代、超松弛迭代法,并且能够熟练运⽤这些迭代法对线性⽅程组进⾏求解。
【实验内容】 1、问题重述:对于线性⽅程组A b X =,即:1111221n 12112222n 21122nn n n n n n na x a x a xb a x a x a x b a x a x a x b +++=??+++=??+++= (1),其中,111212122111 0 - - 0 - 0 0 () - - - 0 n ij n nn n nn nn a a a a a a a a a a ?--A ==--??0n D L U≡--()1,n b b b T=如何运⽤雅克⽐迭代、⾼斯—赛德尔迭代、超松弛迭代法对线性⽅程组进⾏求解。
2、⽅法原理: 2.1雅克⽐迭代迭代思想:⾸先通过A b X =构造形如()x f x =的等式,然后给定⼀个初值(0)(0)(0)(0)12(,,)n x x x X = ,再通过(1)()()k k f +X =X 进⾏迭代。
step1 :对(1)相应第i ⾏中的i x ⽤其它元素表⽰为:11111121111122,12211111()()11()()11()()n nj j j j j j n ni i ij ji j j j i j i j iin nn n nj j n n nj j j j nn nn x b a x x b a x a a x b a x x b a x a a x b a x x b a x a a ===≠=-==?=-=+-??=-=+-??=-=+-∑∑∑∑∑∑即:()D b L U X =-+XStep 2 :进⾏迭代(0)(0)(0)(0)12(1)11()(,,)()n k k x x x D b D L U +--?X =?X=-+X ? ,0,1,2k = ,取它的判断条件为()(1)k k -X -X ⼩于⼀个确定的误差值ε,跳出循环。
雅可比迭代法和高斯超松弛迭代
雅可比迭代法分量形式(63)式也可改写为
(64)
(64)式更方便于编程求解。
雅可比迭代法公式简单,迭代思路明确。每迭代一次只需计算n个方程的向量乘法,程序编制时需设二个数组分别存放xk和xk+1便可实现此迭代求解。
2、高斯-赛德尔(Gauss-seidel)迭代法
由雅可比迭代法可知,在计算xk+1的过程中,采用的都是上一迭代步的结果xk。考察其计算过程,显然在计算新分量xik+1时,已经计算得到了新的分量, 。有理由认为新计算出来的分量可能比上次迭代得到的分量有所改善。希望充分利用新计算出来的分量以提高迭代解法的效率,这就是高斯-赛德尔迭代法(简称G-S迭代法)对(64)式进行改变可以得到G-S迭代法的分 量形式
(75)
其中ω称为松弛因子。
式(75)是迭代公式(74)的一个改进,可以选择松弛因子ω加速迭代过程的收敛。 式(75)的分量形式为
(76)
若对上述改进的迭代公式,按高斯-赛德尔迭代法尽量利用最新迭代得到的分量的原则,又可得到新的迭代公式
(77)
当线性方程组的系数矩阵A具有非零主元(aii≠0,i=1,2,3,…n)的特点时,可 以得到主元为1的方程组形式
雅可比迭代法和高斯-赛德尔迭代法以及超松弛迭代
对于给定的方程 用下式逐步代入求近似解的方法称为迭代法。如xk(当 )的极限存在,此极限即方程组的真正解,此迭代法收敛,否则称迭代法收敛。
1、雅可比(Jacobi)迭代法
设有方程组
Ax=b (56)
其展开形式为
(57)
系数矩阵A为非奇异阵,且 (i=1-n)A可分解为
高斯-赛德尔迭代的矩阵形式可表达为
(69)
高斯-赛德尔迭代法每步迭代的计算量与雅可比迭代相当,但在计算机进行计算时,只需存放x一个数组。
雅可比迭代法,高斯迭代法,松弛迭代法
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
研究生数值分析高斯-赛德尔(Gauss-Seidel)迭代法
迭代法的发展趋势和未来研究方向
非线性问题
将高斯-赛德尔迭代法应用于非线性问题是一个具有挑战性的方 向,也是未来研究的重要课题。
理论分析
深入分析高斯-赛德尔迭代法的收敛性和误差估计,为算法改进 提供理论支持。
应用领域拓展
将高斯-赛德尔迭代法应用于更多领域,如工程、物理、经济等, 解决实际问题。
谢谢观看
05
高斯-赛德尔迭代法的应 用
在线性方程组求解中的应用
01
02
03
线性方程组求解是高斯赛德尔迭代法的重要应用 之一。对于给定的线性方 程组Ax=b,高斯-赛德尔 迭代法可以用来求解x的
值。
通过迭代的方式,高斯赛德尔迭代法不断逼近 方程的解,直到满足一
定的收敛条件。
该方法在数值分析中广 泛应用于解决线性方程 组问题,具有较高的稳
高斯-赛德尔迭代法是一种直观且易 于理解的迭代方法,计算过程相对简 单,易于编程实现。
收敛速度快
对于某些问题,高斯-赛德尔迭代法可 能比其他迭代方法具有更快的收敛速 度。
高斯-赛德尔迭代法的优缺点
• 适用于多种线性系统:该方法适用于多种线性系统,包括 稀疏矩阵和稠密矩阵。
高斯-赛德尔迭代法的优缺点
松弛法(SOR方法)
总结词
松弛法是一种改进的高斯-赛德尔迭代法,通过引入松弛参数,使得迭代过程更 加灵活,提高了收敛速度。
详细描述
松弛法(SOR方法)是在高斯-赛德尔迭代法的基础上,引入了一个松弛参数,使得 迭代过程中每一步的解不仅依赖于前一步的解,还与前几步的解有关。这种方法 能够更好地处理非严格对角占优的线性系技巧通过优化迭代过程中的参数或采用其他方法, 加速高斯-赛德尔迭代法的收敛速度。
研究生数值分析(12)高斯-赛德尔(Gauss-Seidel)迭代法
x (k 1) 1
x (k 1) 2
0.2x2(k) 0.1x3(k) 0.3 0.2x1(k1) 0.1x3(k) 1.5
x3(k
1)
0.2 x1( k 1)
0.4x2(k1)
2
取迭代初值
X (0)
( x1(0)
由定理的误差估计式
X (k ) X * B k X (1) X (0) 1 B
k 1, 2,3,
可以看出, B 越小收敛速度越快,
且可用来估计迭代次数。
在例8例9中,显然 BG 比 BJ 小, 所以高斯-赛德尔迭代法比雅可比迭代法收敛速度快。
若在例8例9中要求近似解 X (k) 的误差
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
1729 500
于是
(BG )
BJ与BG的特征值和谱半径
i (BJ ) 0, (i 1, 2,3), (BJ ) 0 1
1(BG ) 0, 2,3 (BG ) 2, (BG ) 2 1
由定理2知,用雅可比迭代法求解,迭代过程收 敛,用高斯-赛德尔迭代法求解,迭代过程发散。
练习:考察用高斯-赛德尔迭代法解方程组 AX=b 的收敛性,其中
27 1729 500
0.1372
Jacobi 迭代法与Gauss-Seidel迭代法算法比较
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 足够大时,此序列就可以作为线性方程组的近似解。
超松弛迭代法求解两点边值问题(二)
超松弛迭代法求解两点边值问题(二)超松弛迭代法求解两点边值问题(二)摘要本文是在matlab环境下熟悉的运用计算机编程语言并结合超松弛变量超松弛迭代法的理论基础对方程组求解。
首先,本文以微分方程边值问题为例,导出了离散化后线性方程组即稀疏线性方程组,转化对稀疏线性方程组求解问题。
其次,用超松弛( SOR) 迭代法编写matlab程序,对产生的稀疏线性方程组进行迭代法求解。
然后,分别改变松弛因子ω和分段数n的值,分析其收敛性和收敛速度,做出各个方面的分析和比较得到相关结论。
最后,将超松弛迭代算法在计算机上运用matlab语言实现, 得出了一组与精确解较接近的数值解,并画图比较,验证逐次超松弛( SOR) 迭代法的精确性。
关键词:稀疏线性方程组;逐次超松弛迭代法;松弛因子;matlab编程OVERRELAXATION ITERATIVE METHOD FORSOLVINGTWO-BOUNDARY VALUE PROBLEM(TWO)ABSTRACTThis is familiar with the use of computer programming in matlab language and overrelaxation variable overrelaxation iteration method of the theoretical basis of solving equations.First of all, as an example, based on differential equation boundary value problem is derived after discretization is sparse system of linear equations of linear equations, the transformation of sparse linear equations to solve the problem. Second, use write matlab program over relaxation (SOR) iteration method, the iteration method solving sparse linear equations. Then, change the values of relaxation factor and section number n omega,analyzes its convergence and convergence speed, all aspects to make the analysis and comparison of related conclusions. Finally, the over-relaxation iteration algorithm is implemented on a computer using matlab language and obtained a set of numerical solution with exact solution is close to, and draw the comparison, verification of successive overrelaxation (SOR) the accuracy of iterative method.Key words: Sparse linear system of equations;Successive over relaxation iteration method; Relaxation factor;Matlab programming目录1 绪论 (1)1.1 课题研究 (1)2课题研究方法 (2)2.1 超松弛法产生的背景 (2)2.2 超松弛迭代法理论基础 (2)3 实验过程和运行结果 (5)4 结论 (9)参考文献 (10)附录 (11)1 绪论1.1 课题研究考虑两点边值问题容易知道它的精确解为为了把微分方程离散,把区间等分,令,,得到差分方程简化为从而离散后得到的线性方程组的系数矩阵为对,,,分别用、和的超松弛迭代法求解线性方程组,然后比较与精确解的误差;探讨使超松弛迭代法收敛较快的取值,对结果进行分析;探讨在迭代过程中取4位有效数字和7位有效数字有什么不同;谈谈你的体会。
数值分析课程设计 雅克比迭代、高斯赛德尔迭代、超松弛迭代
数值分析课程设计雅克比迭代、高斯赛德尔迭代、超松弛迭代求解线性方程组的雅克比迭代法、高斯-赛德尔迭代法和超松弛迭代法的算法实现学院:数学科学学院学号: 11111111111姓名: hhhhhhhhhh班级: 计算 0901实验报告一实验目的与要求(实验题目)1(分别利用雅可比迭代法和高斯-塞德尔迭代法求解以下线性方程组5,2,1,,12xxx,123 ,,1x,4x,2x,20,123 , 2x,3x,10x,3123,,4 使得误差不超过 102.用超松弛迭代法求解方程方程组:(=1.1) ,4x,x,1,12 ,,x,4x,x,4 ,123, ,x,4x,,323, ,65,10 使得误差不超过二计算公式1. 雅可比迭代法n1,1(k)(k)x,b,ax,,,iiijj,,1jaii,ji,i,1,2,...n,k,0,1,2,..., T,,,,,,,,0000,,x,x,x,...x12n其中为初始向量.2.高斯-塞德尔迭代法i,1n1(k,1)(k,1)(k),,x,b,ax,ax,,,iiijjijjj,,11j,iaii,i,1,2,?n,k,0,1,2,...,T,,,,,,,,0000,,x,x,x,...x12n其中为初始向量.3.超松弛迭代法in,1,kkkk(,1)()(,1)()xx(baxax)/a,,,,,,,,,iiiijjijjii ,jj,,11,i1,2,n,k0,1,,?,?,T,,,,,,,,0000,,x,x,x,...x12n其中为初始向量.三、实验过程(算法程序)1. 雅可比迭代法#include "stdio.h"#include "math.h"#include "string.h"void main(){int i,j,k;float m1=0.0,m2=0.0;float a[3][4]={5,2,1,-12,-1,4,2,20,2,-3,10,3};float x[3]={0.0,0.0,0.0}; for(k=1;k<=10;){for(i=0;i<=2;i++){for(j=0;j<i;j++)m1=m1+a[i][j]*x[j];for(j=i+1;j<=2;j++)m2=m2+a[i][j]*x[j];x[i]=(a[i][3]-m1-m2)/a[i][i];m1=0,m2=0;}k++;}printf("雅可比迭代法计算结果为:\n");for(i=0;i<=2;i++)printf("x[%2d]=%8.9f\n",i+1,x[i]); }程序二:#include "stdio.h"#include "math.h"#include "string.h"#define n 3void main(){int i,j,k;float m1=0.0,m2=0.0;float a[n][n+1];printf("请输入方程组的增广矩阵:");for(i=0;i<n;i++)for(j=0;j<n+1;j++)scanf("%f",&a[i][j]); float x[n]={0.0,0.0,0.0}; for(k=1;k<=10;) {for(i=0;i<=n-1;i++){for(j=0;j<i;j++)m1=m1+a[i][j]*x[j];for(j=i+1;j<=n-1;j++)m2=m2+a[i][j]*x[j];x[i]=(a[i][n]-m1-m2)/a[i][i];m1=0,m2=0;}k++;}printf("雅可比迭代法计算结果为:\n");for(i=0;i<=n-1;i++)printf("x[%2d]=%8.9f\n",i+1,x[i]);}2高斯-塞德尔迭代法#include<stdio.h>#include<math.h># define n 3void main(){int i,j,k=1;float x[n]={0,0,0},m[n]={0,0,0},s=1;float a[n][n]={5,2,1,-1,4,2,2,-3,10},d[n]={-12,20,3}; /* float a[n][n],d[n];printf("请输入方程组系数矩阵");for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%f",&a[i][j]);printf("请输入方程组右端向量");for(i=0;i<n;i++)scanf("%f",&d[i]); */printf("高斯-塞德尔迭代法运算结果为:\n");for(k=0;fabs(s-x[0])>1e-6;k++){s=x[0];for(i=0;i<n;i++){m[i]=0;for(j=0;j<n;j++) m[i]=m[i]-a[i][j]*x[j];m[i]=m[i]+d[i]+a[i][i]*x[i];x[i]=m[i]/a[i][i];}printf("Y1=%f Y2=%f Y3=%f\n",x[0],x[1],x[2]);}getchar() ;}3超松弛迭代法#include <iostream>#include <cmath>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<<endl<<"输入系数矩阵的阶数,N:";cin>>n;a=two_array_malloc(n,n+1);cout<<endl<<"输入增广矩阵的各值:\n";for(i=0;i<n;i++){for(j=0;j<n+1;j++){cin>>a[i][j];}}x_0=one_array_malloc(n);cout<<endl<<"输入初始向量:\n";for(i=0;i<n;i++){cin>>x_0[i];}x_k=one_array_malloc(n);cout<<"输入松弛因子w (1<w<2):\n"; cin>>w;float temp; //迭代过程for(k=0;k<MAX;k++){for(i=0;i<n;i++){temp=0;for(j=0;j<i;j++){temp=temp+a[i][j]*x_k[j];}x_k[i]=a[i][n]-temp;temp=0;for(j=i+1;j<n;j++){temp=temp+a[i][j]*x_0[j];}x_k[i]=(x_k[i]-temp)/a[i][i];x_k[i]=(1-w)*x_0[i]+w*x_k[i];} //求两解向量的差的范数for(i=0;i<n;i++){x_0[i]=x_k[i]-x_0[i];}if(matrix_category(x_0,n)<precision) {break;}else{for(i=0;i<n;i++){x_0[i]=x_k[i];}}} //输出过程if(MAX==k){cout<<"迭代不收敛\n";}cout<<"迭代次数为:"<<k<<endl;cout<<"解向量为:\n";for(i=0;i<n;i++){cout<<"x"<<i<<": "<<x_k[i]<<endl;}return 0;}float *one_array_malloc(int n) //一维数组分配 {float *a;a=(float *)malloc(sizeof(float)*n);return a;}float **two_array_malloc(int m,int n) //二维数组分配 { float **a;int i;a=(float **)malloc(m*sizeof(float *));for (i=0;i<m;i++){a[i]=(float *)malloc(n*sizeof(float));}return a;}float matrix_category(float* x,int n){int i;float temp=0;for(i=0;i<n;i++){temp=temp+fabs(x[i]); }return temp;}四(实验结果:1.雅可比迭代法:2.高斯-塞德尔迭代法:.3.超松弛迭代法:五(实验小结通过这次上机,我学会了用J迭代法,G-S迭代法和SOR迭代法求解线性方程组,巩固了C语言程序设计算法编写,对这几种迭代方法有了更好的理解,并能通过编程和调试实现算法,完成了实验内容,收获颇丰。
三种迭代法雅克比、高斯赛贝尔、超松弛求解方程组实验报告
if norm(x-x0,inf)<ep,break;end
x0=x;k=k+1;
end
if k==N,Warning('已达到迭代次数上限');end
disp(['迭代次数k=',num2str(k)])
2.利用Gauss-Seidel迭代法求解:
编制名为maseidel.m的文件,内容如下:
if i==1
x(1)=(b(1)-A(1,2:n)*x0(2:n))/A(1,1);
else if i==n
x(n)=(b(n)-A(n,1:n-1)*x(1:n-1))/A(n,n);
else
x(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);
4.深刻体会到了MATLAB功能的强大之处;
5.在做本次实验的过程中,也学到了很多新的知识,比如MATLAB的.m文件等知识;
关键词:Jacobi、Gauss-Seidel、SOR迭代法线性方程组
实验方法和步骤(包括数值公式、算法步骤、程序):
1.利用Jacobi迭代法求解:
编制名为majacobi.m的文件,内容如下:
function x=majacobi(A,b,x0,ep,N)
n=length(b);
if nargin>5,Warning('传递的参数个数错误');end
if nargin<5,N=500;end
if nargin<4,ep=1e-6;end
if nargin<3,x0=zeros(n,1);end
x=zeros(n,1);k=0;
高斯-塞德尔迭代法
高斯-塞德尔迭代法
高斯-赛德尔迭代(gauss–seidel method)是数值线性代数中的一个迭代法,可用
来求出线性方程组解的近似值。
该方法以卡尔·弗里德里希·高斯和路德维希·赛德尔命名。
同雅可比法一样,高斯-赛德尔迭代是基于矩阵分解原理。
在数值线性代数中,gauss-seidel方法也称作liebmann方法或已连续加速度方法,
就是用作解线性方程组的运算方法。
它以德国数学家卡尔·弗里德里希·高斯(carl friedrich gauss)和菲利普·路德维希·冯·塞德尔(philipp ludwig von seidel)命名,与雅基数排序方法相近。
高斯-赛德尔迭代法是解线性方程组的常用迭代法之一,设线性方程组为a1x1 +a2x2 +..+ cintn =b.s
(i= 1,2,,n),
高斯赛德尔迭代法的迭代公式,虽然它可以应用于对角线上具有非零元素的任何矩阵,但只能在矩阵是对角线主导的或对称的和正定的情况下,保证收敛。
在年,只在高斯给
他的学生gerling的私人信中提到。
年之前由塞德尔自行出版。
研究生数值分析12高斯 赛德尔Gauss Seidel迭代法
k ? 1,2,3, L
可以看出, B 越小收敛速度越快,
且可用来估计迭代次数。
在例8例9中,显然 BG ? 比 BJ ? 小, 所以高斯 -赛德尔迭代法比雅可比迭代法收敛速度快。
若在例8例9中要求近似解 X(k) 的误差
X (k) ? X* ? 10?4
则由误差估计式知,只要 k 满足
B ?k 1? B ?
i ?1
i? j
则方程组 AX=b有唯一解,且对任意初始向量 X(0)
雅可比迭代法与高斯 -赛德尔迭代法都收敛。
定理5 若方程组 AX=b 的系数矩阵 A ? [aij ]n?n 为对称正定矩阵。则对任意初始向量 X (0) 高斯 -赛德尔迭代法 都收敛。
只要方程组 AX=b 的系数矩阵 A? [aij ]n?n 满足 定理4或定理 5的条件,就可以十分方便地判断相 应迭代过程的收敛性。
以下元素同乘以 λ 后所得新矩阵的行列式。
例9 用高斯-赛德尔迭代法解方程组
???1?02xx11??
2x2 ? 10 x2
x3 ? ? x3
3 ?
15
??? x1 ? 2x2 ? 5x3 ? 10
解:相应的高斯 -赛德尔迭代公式为
? ? ?
x (k?1) 1
x (k?1) 2
? ?
0.2x2(k) ? 0.2 x1( k ?1)
???2 ?2 0 ??
再计算
?0 ?2 2 ? BG ? (D ? L)?1U ? ??0 2 ?3??
??0 0 2 ??
BJ 与BG的特征值和谱半径
?i (BJ ) ? 0,( i ? 1,2,3), ? (BJ ) ? 0 ? 1
?1(BG ) ? 0, ?2,3 (BG ) ? 2, ? (BG ) ? 2 ? 1
高斯-赛得尔迭代法
9
1.200 0
1.399 6 1.600 1
23
解线性方程组的迭代法
所以,方程组有解
x(k1) L~x(k1) U~x(k ) g
0 b12 b13
U~
0 b23 0
0
b1n
b2n
bn1n
0
移项可得
(I L%)x(k1) U~x(k ) g
(3 14)
5
解线性方程组的迭代法
(I L%)x(k1) U~x(k ) g
因为 I L~ 1, 故(I L~)1 存在,上式可改写成
10
解线性方程组的迭代法
例 用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
)
)
j i 1
x(k) i
(i 1, 2,L , n)
(3 18)
若将x 看作修正项,则Gauss-Seidel迭代的第k次
近似解 x (k ) 以此项修正后得到新的近似解
x(k1) x(k ) x.
松弛法是将 x 乘上一个参数因子
作为修正项而得到新的近似解,
17
解线性方程组的迭代法
其具体公式为 即
0407104071040718040710407040718代入上式得23解线性方程组的迭代法24解线性方程组的迭代法所以方程组有解与精确解比较误差为松弛法的迭代公式319的矩阵表示为25解线性方程组的迭代法存在从而有存在式320可以写为p3027解线性方程组的迭代法opt松弛因子的选取对收敛速度影响极大但目前尚无可供实用的计算最佳松弛因子的方法
数值分析 松弛法
1)input n,A,b,ε,N
2) x[i] <- 0(i=1,2,…….,n)
3) k <- 1
4) while(k<=N)do(5 ~ 11)
5) err <- 0
6) for i=1 to n,do(7 ~ 9)
7) XI <- x[i]
8) x[i]<-(b[i]- )
if m~=n
error('A is not a square matrix.');
end
if m~=mm
error('The row of B did not match the column of A');
end
X=zeros(n,1);
k=1;
while k<=N
Xk=X;
for i=1:n
for j=1:n
第i个分量 时,已经计算好前面i-1个分量 (j=1,2,……,i-1).设想方法收
敛,第(K+1)次的分量比第K次的分量更接近于真实解,为了加速收敛,在计算 的
第i个分量时,所用的 的前i-1个分量换成新算好的值,即用 , ,………. … ,……, 来计算,这就是赛德尔迭代的思想,而在雅可
比方法基础上用赛德尔迭代,称为高斯-赛德尔方法。
0.624283
1.638004
11
(三).结果分析
根据AX=B,A=[4 -2 -1;-2 4 -2;-1 -2 3]; B=[0 ;-2; 3];可求出精确解为
x*=[1;1;2]。根据不同的松弛因子,得到了不同的结果。
高斯-赛德尔迭代方法:
在雅可比迭代中,求 时是用 的所有分量来参加计算的,而在计算 的
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分别运用高斯赛德尔迭代法和超松弛迭代法解线性方程组:⎪⎪⎪⎭⎫ ⎝⎛-=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--243024410143034321x x x 。
1. 高斯赛德尔迭代法
编程思路:高斯赛德尔迭代法实在雅克比迭代法的基础上进行优化得到的,即在进行迭代时,将已经算得的第k+1步的迭代值代入第k+1步后边的变量的计算当中去,从而加快了迭代速度。
程序代码:
function varargout=Gauss_Seidelli(varargin)
A=[4 3 0;3 4 -1;0 -1 4];
b=[24 30 -24]';
x0=[0;0;0];
x=Gauss_Seidel(A,b,x0)
function x=Gauss_Seidel(A,b,x0)
n=100;%最大迭代次数
ee=0.0001;%精度
n1=length(b);
for i=1:n
x1=x0;
for j=1:n1
s=0;
for k=1:n1
if k~=j
s=s+A(j,k)*x0(k);
end
end
x0(j)=(b(j)-s)/A(j,j);
end
if norm(x1-x0)<ee
break
end
end
x=x0;
2. 超松弛迭代法
该方法是在高斯赛德尔迭代法的基础上将前一步的结果)(k i x 和)1( k i x 进行适当的线性组合以加速收敛,松弛因子ω的选择是关键,当1<ω<2时,即为超松弛迭代法。
程序代码:
function varargout=SORli(varargin)
clc
A=[4 3 0;3 4 -1;0 -1 4];
b=[24;30;-24];
x0=[0;0;0];w=1.3;
x=SOR(A,b,x0,w);
for i=1:3
fprintf('%4.2f ',x(i));
end
fprintf('\n');
function x=SOR(A,b,x0,w)
%AX=b
%x0初始点
%w 为 松弛因子
n=100;%最大迭代次数
ee=0.0001;%精度
n1=length(b);
for i=1:n
x1=x0;
for j=1:n1
s=0;
for k=1:n1
if k~=j
s=s+A(j,k)*x0(k);
end
end
x0(j)=(1-w)*x0(j)+w*(b(j)-s)/A(j,j);
end
if norm(x1-x0)<ee
break
end
end
x=x0;。