雅克比迭代法和高斯-塞德尔迭代法
一、雅克比迭代法
设方程组 Ax b; A (aij )nn , b (bi )1n;det( A) 0
将系数矩阵分裂为: A D L U
其中 D diag(a11, a22 , , ann )
0
a21 0
L a31 a32 0
0 a12 a13
a1n
0 a23
a2n
U
0
an1 an2
分量形式:
i 1
n
bi
aij
x(k) j
aij
x
(k j
)
x ( k 1) i
j 1
ji 1
a ii
;i 1, 2, , n
二、高斯-塞德尔迭代法
在雅克比迭代公式中,计算x
( i
k
1)
时,利用已经算
出来的新的 x1(k 1) , x2(k 1) ,
,
x(k 1) i 1
值,从而得到
高斯-塞德尔迭代法。
结 果
0.0001
7 (0.9999929 0.9999949 1.0000022)
0.00001 8 (1.0000013 1.0000009 0.9999996)
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
0 an,n1 0
0 an1,n 0
如果aii 0(i 1, 2, , n) 原方程组可化为 x D1(L U )x D1b Bx f
其中 B D1( L U ); f D1b
相应的迭代格式 x(k1) Bx(k) f ; k 0,1, 2,
上述方法称为雅克比迭代法,简称J法或简单迭代法
解:
雅 克 比 迭 代 格 式
1 3 10 x3 14
x ( k 1) 1
(14 3x2(k)
x3(k ) ) 10
x(k 1) 2
(5
2 x1(k )
3x3(k) ) (10)
x ( k 1) 3
(14
x(k) 1
3x2(k) ) 10
迭高
代斯
格 式
塞 德
尔
-
x ( k 1) 1
(14 3x2(k)
第三节 向量范数和矩阵范数
一、 向量范数
定义:设 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范数。
思 路
与不动点迭代相似 , 将方程组
形式x , B从x而建f立迭代格式
A
x
等b价改写成
x(k1) B x(k) f ,从 x(出0) 发,生成迭代序列 { x(k) }
迭代法是一种逐次逼近的方法,与直接法比较, 具有: 程序简单,存储量小的优点。特别适用于求解系数 矩阵为大型稀疏矩阵 的方程组。
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
要求 迭代
计 精度 次数
方程组的近似解
算 0.001 9 (1.0002507 1.0000694 1.0002507)
非负实值 函数
➢常用的几种向量范数:
n
设
x
( x1,
x2 ,
, xn )T
1-范数: x 1
xi
i 1
❖ 2-范数:
nx ( 2x来自2)1 2(x, x)
i 1
-范数:
x
max
1 i n
xi
上述3种向量范数统称为P-范数
n
x ( p
xi p ) 1 p
1 p
i 1
二、 矩阵范数
定义:设 f ( A是) Rnn的一个R映射,若对
结 果
0.0001 10 (0.9999541 1.0001253 0.9999541)
0.00001 14 (0.9999981 1.0000020 0.9999981)
高斯-塞德尔迭代法 取初值 x (0 0 0)T
要求 迭代
计 精度 次数
方程组的近似解
算 0.001 5 (0.9997916 0.9998479 1.0000664)
n
列范数:
A
1
max
1 jn
i 1
aij
谱半径
n
❖行范数:
A
max
1 i n
j 1
aij
(
A)
max
1 i n
i
1
谱范数: A 2
1 ( AT A) 2
其中
是
1
A的T A最大特征值
第四节 解线性方程组的迭代法
求解 A x b, A Rnn det( A) 0
迭代法
从一个初始向量出发,按照一定的递推 格式,产生逼近方程组的近似解序列。
高斯-塞德尔迭代法是雅克比迭代法的一种改进。
➢ 高斯-塞德尔迭代法的分量形式:
i 1
n
bi
aij
x ( k 1) j
aij
x
(k j
)
x(k 1) i
j 1
j i 1
a ii
;i 1, 2, , n
例1:利用雅克比和高斯-塞德尔迭代法求解方程组
10 3 1 x1 14
2 10 3 x2 5
雅克比迭代法与高斯-赛德尔
实验三 线性方程组的迭代法班级:**计本 ** 班 姓名:** 座号: ** 时间:2010/6/2一、 实验目的(1) 熟悉VC++开发平台和开发语言。
(2) 掌握雅可比及高斯-塞德尔迭代法解方程组的迭代法,并能根据给定的精度要求计算(包括迭代过程);比较两种方法的优劣。
(3) 培养编程和上机调试能力。
二、 实验设备一台PC 机,XP 操作系统,VC++软件三、 实验内容用雅可比迭代法和高斯-塞德尔迭代法解方程组1231231238322041133631236x x x x a x x x x x -+=⎧⎪+-=⎨⎪++=⎩,其精度为10-5。
四、 算法描述1. 雅克比迭代法公式:X[0][k+1] = ( 1 / a[0][0] )*[ b[0] –a[0][1]*X[1][k] – a[0][2]*X[2][k] ]; X[1][k+1] = ( 1 / a[1][1] )*[ b[1] –a[0][0]*X[0][k] – a[0][2]*X[2][k] ]; X[2][k+1] = ( 1 / a[2][2] )*[ b[2] –a[0][0]*X[0][k] – a[0][1]*X[1][k] ];2. 高斯-赛德尔迭代法公式:X[0][k+1] = ( 1 / a[0][0] )*[ b[0] –a[0][1]*X[1][k] – a[0][2]*X[2][k] ]; X[1][k+1] = ( 1 / a[1][1] )*[ b[1] –a[0][0]*X[0][k+1] – a[0][2]*X[2][k] ]; X[2][k+1] = ( 1 / a[2][2] )*[ b[2] –a[0][0]*X[0][k+1] – a[0][1]*X[1][k+1] ];3. 流程图雅克比流程图高斯-赛德尔流程图五、程序代码/*雅克比方法类Jacobi.h*/#ifndef A#define A#define MAX_SIZE 50class Jacobi{public:void Solve(int n,double a[MAX_SIZE][MAX_SIZE],double b[MAX_SIZE],intMAX_XunHuan,double e,int pre);};#endif/*雅克比方法类方法实现Jacobi.cpp*/#ifndef B#define B#include "Jacobi.h"#include "iostream"#include "math.h"#include "iomanip"using namespace std;double X[MAX_SIZE][MAX_SIZE]={0};double E[MAX_SIZE];void Jacobi::Solve(int n,double a[MAX_SIZE][MAX_SIZE],double b[MAX_SIZE],int MAX_XunHuan,double e,int pre){int i,j=1,z;double s=0;int flag=1;cout<<"请输入初始值X[i][0]:";for (i=0;i<n;i++){cin>>X[i][0];}for (j=1;j<MAX_XunHuan&&flag;j++){flag=0;for (i=0;i<n;i++){s=0;for (z=0;z<n;z++){if (i!=z){s+=a[i][z]*X[z][j-1];}}X[i][j]=1.0/a[i][i]*(b[i]-s);}E[j]=fabs(X[0][j]-X[0][j-1]);for (i=1;i<n;i++){if(fabs(X[i][j]-X[i][j-1])>E[j])E[j]=fabs(X[i][j]-X[i][j-1]);}if (E[j]>e){flag=1;}}if(flag==0){for (i=0;i<n;i++){cout<<" X"<<i<<"(k) ";}cout<<" 误差"<<endl;for (i=0;i<j;i++){cout<<setiosflags(ios::left)<<setiosflags(ios::fixed)<<setprecision(pre)<<X[0][i]<<" "<<X[1][i]<<" "<<X[2][i]<<" ";if(i>0){if(i!=j-1)cout<<E[i]<<endl;elsecout<<E[i]<<" < "<<e<<endl;}elsecout<<" ∞"<<endl;}}elsecout<<"没有结果,最大循环次数不够\n";cout<<"迭代次数为"<<j<<endl;}#endif/*/*高斯-赛德尔方法类Gauss.h*/#ifndef C#define C#define MAX_SIZEG 50class Gauss{public:void Solve(int n,double a[MAX_SIZEG][MAX_SIZEG],double b[MAX_SIZEG],int MAX_XunHuan,double e,int pre);};#endif/*高斯-赛德尔方法类方法实现Gauss.cpp*/#ifndef D#define D#include"Gauss.h"#include "math.h"#include "iostream"#include "iomanip"using namespace std;double XG[MAX_SIZEG][MAX_SIZEG]={0};double EG[MAX_SIZEG];void Gauss::Solve(int n,double a[MAX_SIZEG][MAX_SIZEG],double b[MAX_SIZEG],int MAX_XunHuan,double e,int pre){int i,j=1,z;double s=0;int flag=1;cout<<"请输入初始值XG[i][0]:";for (i=0;i<n;i++){cin>>XG[i][0];}for (j=1;j<MAX_XunHuan&&flag;j++){flag=0;for (i=0;i<n;i++){s=0;for (z=0;z<n;z++){if (i!=z){if(z>i)s+=a[i][z]*XG[z][j-1];elses+=a[i][z]*XG[z][j];}}XG[i][j]=1.0/a[i][i]*(b[i]-s);}EG[j]=fabs(XG[0][j]-XG[0][j-1]);for (i=1;i<n;i++){if(fabs(XG[i][j]-XG[i][j-1])>EG[j])EG[j]=fabs(XG[i][j]-XG[i][j-1]);}if (EG[j]>e){flag=1;}}if(flag==0){for (i=0;i<n;i++){cout<<" XG"<<i<<"(k) ";}cout<<" 误差"<<endl;for (i=0;i<j;i++){cout<<setiosflags(ios::left)<<setiosflags(ios::fixed)<<setprecision(pre)<<XG[0][i]<<" "<<XG[1][i]<<" "<<XG[2][i]<<" ";if(i>0){if(i!=j-1)cout<<EG[i]<<endl;elsecout<<EG[i]<<" < "<<e<<endl;}elsecout<<" ∞"<<endl;}}else cout<<"没有结果,最大循环次数不够\n";cout<<"迭代次数为"<<j<<endl;}#endif/*主函数Main*/#include "iostream"#include "Jacobi.h"#include "Jacobi.cpp"#include "Gauss.h"#include "Gauss.cpp"using namespace std;int main(){Jacobi J;Gauss G;int key;int i,j;int pre;double a[MAX_SIZE][MAX_SIZE]={0};double b[MAX_SIZE]={0};int n,MAX_XunHuan;double e;do{cout<<"请输入方程组的阶数:";cin>>n;cout<<"请输入系数矩阵A:";for (i=0;i<n;i++){for (j=0;j<n;j++){cin>>a[i][j];}}cout<<"请输入常数矩阵B:";for (i=0;i<n;i++){cin>>b[i];}cout<<"请输入最大循环次数:";cin>>MAX_XunHuan;cout<<"请输入最小误差:";cin>>e;cout<<"请输入精度输出控制(小数点后的位数)"; cin>>pre;cout<<"结束0:\n雅克比迭代法求解1:\n高斯-赛德尔求解2:";cin>>key;if (key==1){J.Solve(n,a,b,MAX_XunHuan,e,pre);}if (key==2){G.Solve(n,a,b,MAX_XunHuan,e,pre);}} while (key);return 0;}六、实验结果1.这次试验很简单,主要是公式问题,做得很顺利。
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 足够大时,此序列就可以作为线性方程组的近似解。
《数值分析》-雅格比法与高斯-赛德尔迭代法解线性方程组
4. 线性方程组求解4.用雅格比法与高斯-赛德尔迭代法解下列方程组Ax =b ,研究其收敛性,上机验证理论分析是否正确,比较它们的收敛速度,观察右端项对迭代收敛有无影响。
(1)A 行分别为A 1=[6,2,-1],A 2=[1,4,-2],A 3=[-3,1,4]; b 1=[-3,2,4]T , b 2=[100,-200,345]T ,(2) A 行分别为A 1=[1,0.8,0.8],A 2=[0.8,1,0.8],A 3=[0.8,0.8,1];b 1=[3,2,1] T , b 2=[5,0,-10]T ,(3)A 行分别为A 1=[1,3],A 2=[-7,1];b =[4,6]T , (1)雅可比法A 为所求方程组的系数矩阵,将系数矩阵()n n ij A a R ⨯=∈分为三部分,即111212221211000000n n nn n n a a a a a a A a a a --⎛⎫⎛⎫⎛⎫ ⎪ ⎪ ⎪-- ⎪ ⎪ ⎪=-- ⎪ ⎪ ⎪ ⎪⎪ ⎪--⎝⎭⎝⎭⎝⎭D L U ≡--构造迭代方程,选取M 为A 的对角元素部分,即选取M D =,A D N =-,由此构造得到解AX b =的雅可比迭代法如下:()()()01,,0,1,,k k x xBx f k +⎧⎨=+=⎩ 初始向量(4-1)其中()111B I D A D L U J f D b ---=-=+≡=,,J 为雅可比迭代矩阵。
若A 为n 阶矩阵,迭代公式如下:()()()()()()()00001211,,,()/1,2,,;0,1,T n n k k ii ij j ii j j ix x x x x b a x a i n k +=≠⎧=⎪⎪⎪=-⎨⎪⎪==⎪⎩∑初始向量表示迭代次数(4-2) 在运行程序时首先需要手动输入矩阵A ,阶数n 、向量b 和初始向量x 0,根据式(4-2)不断迭代可求解得近似解。
分别用 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 迭代法的原理,依次进行迭代计算,直到满足收敛条件。
线性方程组的四种数值解法
线性方程组的四种数值解法(电子科技大学物理电子学院,四川 成都 610054)摘要:本文介绍了四种求解线性方程组的数值解法: 雅克比迭代法、高斯赛德尔迭代法、高斯消去法和改进的平方根法的基本原理和算法流程,通过求解具体方程,对四种求解方法进行了对比。
对于雅克比迭代法和高斯赛德尔迭代法,研究了两种算法对求解同一方程组的迭代效率差异,结果表明高斯赛德尔迭代法达到同样精度所需迭代次数较少。
对于高斯消去法,通过选择列主元的方法提高算法的准确度,计算结果表明高斯消去法计算精确,且运算复杂度也不是很高。
对于改进的平方根法,其运算复杂度低,但对于给定的方程组有着严苛的要求。
关键词:雅克比迭代法;高斯赛德尔迭代法;高斯消去法;改进的平方根法;线性方程组引言线性方程组的求解在日常生活和科研中有着极其重要的应用,但在实际运算中,当矩阵的维数较高时,用初等方法求解的计算复杂度随维数的增长非常快,因此,用数值方法求解线性方程组的重要性便显现出来。
经典的求解线性方程组的方法一般分为两类:直接法和迭代法。
前者例如高斯消去法,改进的平方根法等,后者的例子包括雅克比迭代法,高斯赛德尔迭代法等。
这些方法的计算复杂度在可以接受的范围内,因此被广泛采用。
一般来说,直接法对于阶数比较低的方程组比较有效;而后者对于比较大的方程组更有效。
在实际计算中,几十万甚至几百万个未知数的方程组并不少见。
在这些情况下,迭代法有无可比拟的优势。
另外,使用迭代法可以根据不同的精度要求选择终止时间,因此比较灵活。
在问题特别大的时候,计算机内存可能无法容纳被操作的矩阵,这给直接法带来很大的挑战。
而对于迭代法,则可以将矩阵的某一部分读入内存进行操作,然后再操作另外部分。
本文使用上述四种算法求解对应的方程组,验证各种算法的精确度和计算速度。
1 算法介绍1.1 雅克比迭代法 1.1.1 算法理论设线性方程组(1)b Ax的系数矩阵A 可逆且主对角元素 均不为零,令并将A 分解成(2)从而(1)可写成令其中. (3)以B 1为迭代矩阵的迭代法(公式)(4)称为雅克比(Jacobi)迭代法(公式),用向量的分量来表示,(4)为(5)其中为初始向量.1.1.2 算法描述 1给定迭代初始向量X 0以及误差要求delta 2根据雅克比迭代公式计算出下一组向量3判断X 是否满足误差要求,即||X k+1 – X k || < delta4若误差满足要求,则停止迭代返回结果;若否,则返回第二步进行下一轮迭代1.2 高斯赛德尔迭代法nna ,...,a ,a 2211()nna ,...,a ,a diag D 2211=()D D A A +-=()b x A D Dx +-=11f x B x +=b D f ,A D I B 1111--=-=()()111f x B x k k +=+⎩⎨⎧[],...,,k ,n ,...,i x a ba xnij j )k (j j i iii)k (i21021111==∑-=≠=+()()()()()Tn x ,...x ,x x 002010=1.2.1 算法理论由雅克比迭代公式可知,在迭代的每一步计算过程中是用的全部分量来计算的所有分量,显然在计算第i 个分量时,已经计算出的最新分量没有被利用,从直观上看,最新计算出的分量可能比旧的分量要好些.因此,对这些最新计算出来的第次近似的分量加以利用,就得到所谓解方程组的高斯—塞德尔(Gauss-Seidel )迭代法.把矩阵A 分解成(6)其中,分别为的主对角元除外的下三角和上三角部分,于是,方程组(1)便可以写成即其中(7)以为迭代矩阵构成的迭代法(公式)(8)称为高斯—塞德尔迭代法(公式),用变量表示的形式为(9)1.2.2 算法描述 1给定迭代初始向量X 0以及误差要求delta2根据高斯赛德尔迭代公式计算出下一组向量()k x ()1+k x ()1+k ix ()()1111+-+k i k x ,...,x 1+k()1+k x()1+k jx U L D A --=()nna ,...,a ,a diag D 2211=U ,L --A ()b Ux x L D +=-22f x B x +=()()b L D f ,U L D B 1212---=-=2B ()()221f x B x k k +=+⎩⎨⎧[],...,,k ,n ,,i x a x a b a xi j n i j )k (j ij )k (j ij i ii)k (i21021111111==∑∑--=-=+=++3判断X是否满足误差要求,即||X k+1– X k|| < delta4若误差满足要求,则停止迭代返回结果;若否,则返回第二步进行下一轮迭代1.3 高斯消去法1.3.1 算法理论下面三种变换称为初等行变换:1.对调两行;2.以数k≠0乘某一行中的所有元素;3.把某一行所有元素的k倍加到另一行对应的元素上去。
用雅可比迭代法和高斯赛德尔迭代法解线性方程组
西安财经学院本科实验报告学院(部)统计学院实验室数学专业实训基地课程名称大学数学实验学生姓名董童丹(编程)杨媚(实验报告)学号0804280125 0804280126专业数学与应用数学0801教务处制二0一一年五月四日《用雅可比迭代法和高斯赛德尔迭代法解线性方程组》实验报告开课实验室:实验室313 2011年5月 4日 学院 统计学院年级、专业、班数学与应用数学0801班姓名 董童丹 杨媚成绩课程 名称大学数学实验实验项目 名 称 用雅可比迭代法和高斯赛德尔迭代法解线性方程组指导教师严惠云教师评语教师签名:年 月 日一、实验目的:1)掌握用MATLAB 软件求微分方程初值问题数值解的方法; 2)通过实例学习用线性方程组模型解决简化的实际问题; 3)了解用雅可比迭代法和高斯赛德尔迭代法解线性方程组。
二、实验环境:本次上机实践所使用的平台和相关软件Matlab 。
三、实验内容:*题目1、分别用雅可比迭代法和高斯-赛德尔迭代法计算下列方程组,均取相同的初值T x )1,1,1()0(=,观察其计算结果,并分析其收敛性.⎪⎩⎪⎨⎧=++=++-=--4780591109321321321x x x x x x x x x2、定义矩阵⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------=321412132141412132141412132141213A*算法设计1、雅可比迭代法:原线性方程组可等价地写为:⎪⎩⎪⎨⎧+--=-=++=.478,59,1109213312321x x x x x x x x x (1)利用线性方程组(1)可以进行如下形式的迭代:⎪⎩⎪⎨⎧+--=-=++=+++.478,59,1109)(2)(1)1(3)(3)(1)1(2)(3)(2)1(1k k k k k k k k k x x x x x x x x x (2) 对选定的初始解Tx x x x ),,()0(3)0(2)0(1)0(=,可由(2)式迭代计算.,,)2()1( x x 如果迭代一定次数后,所得到的结果相同或非常接近,并与方程组的精确解相等或非常接近,则认为得到的结果为所求解.高斯-赛德尔迭代法: 利用高斯-赛德尔迭代公式:⎪⎩⎪⎨⎧+--=-=++=++++++478,59,1109)1(2)1(1)1(3)(3)1(1)1(2)(3)(2)1(1k k k k k k k k k x x x x x x x x x 进行迭代,如果迭代一定次数后,所得到的结果相同或非常接近,并与方程组的精确解相等或非常接近,则认为得到的结果为所求解.2、该矩阵为稀疏矩阵,主对角线元素为3,次对角线为-1/2,再次对角线为-1/4,用sparse 命令就可以定义出所需的矩阵. 程序为:高斯—赛德尔迭代法求解:程序为:四.实验结果分析:用雅可比迭代法解,由已知条件给定初始解T x )1,1,1()0(=,计算至=k 200时,可得)0.5575 1.1637,- 0.0985,- ()200(=x已经与原线性方程组的精确解非常接近.即用雅可比迭代法得到解.由高斯-赛德尔迭代法,计算至=k 20时,可得)5574.0,1639.1,0984.0()20(--=x ,已经与原线性方程组的精确解非常接近.即用雅可比迭代法得到解.对原线性方程组用以上两种迭代公式计算的结果进行比较,可以发现高斯-赛德尔迭代法比雅可比迭代法收敛要快.对原线性方程组雅可比迭代法和高斯-赛德尔迭代法的计算结果,雅可比迭代公式简单,特别适合并行计算;高斯-赛德尔迭代计算出的)1(+k i x 可立即存入)(k i x 的位置,只需一个向量存储单元,是典型的串行计算,一般情况下收敛会快一些.通过本次实验,学会用MA TLAB 软件数值求解线性代数方程组,分别用雅可比迭代法和高斯-赛德尔迭代法对线性方程组进行迭代求解,通过对比结果,对迭代法的收敛性和解的稳定性作初步分析, 对两种方法有了进一步的认识.学会了用命令定义稀疏矩阵.。
(完整版)第八节雅可比迭代法与高斯-塞德尔迭代法综述.doc
第八节 雅可比迭代法与高斯 —塞德尔迭代法一 雅可比迭代法设线性方程组Ax b(1)的系数矩阵 A 可逆且主对角元素 a 11,a 22,...,ann 均不为零 ,令D diag a 11 ,a 22 ,...,a nn并将 A 分解成AA D D(2)从而 (1) 可写成Dx D A x b令x B 1 xf 1其中 B 1I D 1 A, f 1 D 1b .(3)以B 1为迭代矩阵的迭代法(公式 )xk 1B 1 x kf 1(4)称为雅可比 (Jacobi) 迭代法 ( 公式 ), 用向量的分量来表示,(4) 为x i( k 1)1 n(j k )b ia i j xaiij 1j ii 1,2,...n,k 0,1,2,...(5)T其中 xx 1 0 ,x 20 ,...x n 0为初始向量 .由此看出 , 雅可比迭代法公式简单 , 每迭代一次只需计算一次矩阵和向量的乘法. 在电算时需要两组存储单元 , 以存放 x k及 x k 1 . 例1例1 用雅可比迭代法求解下列方程组10 x 1x 2 2x 3 7.2x 1 10x 22x 3 8.3x 1x 2 5x 34.2解将方程组按雅可比方法写成x 10.1x 20.2x 3 0.72 x 2 0.1x 1 0.2x 30.83x 30.2x 10.2x 20.84取初始值 xx 1 0 ,x 20 , x 3 0TT0,0,0, 按迭代公式x 1 k 10.1x 2 k0.2x 3k 0.72 x 2k 1 0.1x 1 k0.2x 3 k0.83 x 3k 1 0.2x 1 k 0.2x 2k0.84进行迭代,其计算结果如表1 所示表 1k 0 1 2 34 56 7x 1 k 00.720.9711.0571.08531.09511.0983x 2 k0.831.0701.157 1.18531.19511.19831x 3 k0.841.1501.248 1.28281.29411.29802二 高斯 — 塞德尔迭代法由雅可比迭代公式可知 , 在迭代的每一步计算过程中是用x k的全部分量来计算xk 1 的所有分量 , 显然在计算第 i 个分量 x ik 1时 , 已经计算出的最新分量 x 1 k 1 ,...,x i 1 k 1 没有被利 用,从直观上看 , 最新计算出的分量可能比旧的分量要好些. 因此,对这些最新计算出来的第 k 1的分量 xjk 1加以利用 , 就得到所谓解方程组的高斯— 塞德( Gauss-Seidel )次近似 xk 1迭代法 .把矩阵 A 分解成A DL U(6)其中Ddiag a 11 ,a 22 ,...,a nn,L , U分别为 A 的主对角元除外的下三角和上三角部分 , 于是 , 方程组 (1) 便可以写成DL x Ux b即x B 2 x f 2其中B 2 D L 1f 2U , 以B 2为迭代矩阵构成的迭代法( 公式 )xk1B x kf1D L b(7)2 2称为高斯 — 塞德尔迭代法 ( 公式 ), 用 量表示的形式为x i( k 1 )1i 1(j k 1 )b ia ij x n(8)a ij x (j k )a iij1j i 1i 1,2,n,k 0,1,2,...(9)由此看出 , 高斯 — 塞德尔迭代法的一个明显的优点是 , 在电算时 , 只需一组存储单元 ( 计算出k 1kk 1kx i后 x i 不再使用 , 所以用 x i 冲掉 x i, 以便存放近似解 .例 2 例 2 用高斯 —— 塞德尔迭代法求解例 1.取初始值x 0x 1 0 ,x 20 , x 3T解0,0,0, T,按迭代公式x 1 k 10.1x 2k0.2x 3 k 0.72 x 2k 1 0.1x 1 k 10.2x 3k0.83x 3 k 1 0.2x 1 k 10.2x 2 k 10.84进行迭代,其计算结果如下表2表 2k0 1 23456 7 x 1 k0.721.04308 1.093 1.099131.099891.099991.113x 2 k0.902 1.167191.1951.199471.199931.199991.272x 3 k1.164 1.28205 1.2971.299721.299961.31.3477从此例看出 , 高斯 — 塞德尔迭代法比雅可比迭代法收敛快( 达到同样的精度所需迭代次数少 ), 但 这个结论 , 在一定条件下才是对的 , 甚至有这样的方程组 , 雅可比方法收敛,而高斯 — 塞德尔迭代法却是发散的 .三 迭代收敛的充分条件定理 1在下列任一条件下, 雅可比迭代法 (5) 收敛 .B 1 max na ij1a iiij j1i①;B 1naij11maxaiiji 1②j i;I D 1ATmax naij1ji 1 a jj③i j定理 2设 B 1,B 2 分别为雅可比迭代矩阵与高斯 — 塞德尔迭代矩阵 , 则B 2B 1(10)从而,当B1naij1maxa iiijj 1i时,高斯 — 塞德尔迭代法 (8) 收敛 .证明由 B 1,B 2的定义 ,它们可表示成B 1D 1 L UB 21D L 1U I D 1L D 1U用 e 表示 n 维向量e1,1,...,1 T , 则有不等式B 1 e B 1 eB 1D 1 LD 1U这里 , 记号|·|表示其中矩阵的元素都取绝对值, 而不等式是对相应元素来考虑的, 于是D 1U eB 1 D 1L eID 1 L1B 1Ie容易验证nnD 1LD 1 L所以,ID1L 及ID 1L 可逆,且ID 1L 1I D 1 L ...n 1D 1 LID 1 Ln11... D 1LI D 1LID 1L1I从而有B 2 e ID 1L 1D 1U eID 1L1I D 1L 1 B I e1I1 B 1IID 1 L 1eB 1 e因此必有B 2B 1因为已知B 1 1所以 B 2 1 .即高斯 — 塞德尔迭代法收敛 .若矩阵 A 为对称,我们有 定理 3 若矩阵 A 正定 , 则高斯 — 塞德尔迭代法收敛 . 证明把实正定对称矩阵 A 分解为A D LL TUL T, 则 D 为正定的 , 迭代矩阵B 2D L 1 L T设 是B 2的任一特征值 , x 为相应的特征向量 , 则D L 1xxL T以 D L 左乘上式两端 , 并由 A D L L T 有1 L T x Ax 用向量 x 的共轭转置左乘上式两端 , 得1x T L T xx T Ax(11)求上式左右两端的共轭转置, 得1x T L x x T Ax以1和1分别乘以上二式然后相加, 得1 1 x T L TL x2x T Ax由 AD L L T ,得11x T D A x2x T Ax即221x T L x1x T Ax(12)因为 A 和 D 都是正定的 , 且 x 不是零向量 , 所以由 (11) 式得1, 而由 (12) 式得12, 即1, 从而B 21, 因而高斯 — 塞德尔迭代法收敛 .定义 1 设 Aa ijn n为 n 阶矩阵 .① ①如果na ij ,i 1,2,...na iij ij i(13)即 A 的每一行对角元素的绝对值都严格大于同行其他元素绝对值之和, 则称 A 为严格对角优势矩阵.② ②如果na ij ,aiii 1,2,...nj ij i且至少有一个不等式严格成立 , 则称 A 为弱对角优势矩阵 .2 1 0 1 1 0 13 1 1 2 1例如13 是严格对角优势矩阵,13 是弱对角优势矩阵 .A 11A 12定义 2设 A a ijn n是 n 阶矩阵,如果经过行的互换及相应列的互换可化为 0A22,即存在 n 阶排列矩阵 P, 使P T APA 11 A 120 A 22其中A 11,A22 为方阵,则称A 是可约的 , 否则称 A 为不可约的 .A 是可约矩阵 , 意味着Ax b 可经过若干次行列重排, 化为两个低阶方程组 ,事实上 ,Ax b 可化为 P T AP P T x P T b , 记P T y1 , d x y2 P T b dy d12于是,求解 Ax b 化为求解 A 11 y1A 12 y2 dA 22 y 2d1 2可以证明 , 如果 A 为严格对角优势矩阵或为不可约弱对角优势矩阵 , 则 A 是非奇异的 .定理 4 如果 A 为严格对角优势矩阵或为不可约弱对角优势矩阵, 则对任意 x 0 , 雅可比迭代 法(4) 与高斯 — 塞德尔迭代法 (8) 均为收敛的 .证明 下面我们以 A 为不可约弱对角优势矩阵为例, 证明雅可比迭代法收敛, 其他证明留给 读者 .要证明雅可比迭代法收敛,只要证 B 11,B 1是迭代矩阵 .用反证法 , 设矩阵B 1有某个特征值, 使得1, 则 det IB 10,由于 A 不可约,且具有弱对角优势,所以D 1 存在,且I B 1IID 1AD 1D A D从而det D A D另一方面,矩阵DAD与矩阵 A 的非零元素的位置是完全相同的,所以D AD也是不可约的 , 又由于1, 且 A 弱对角优势,所以na iia iia ij ,i 1,2,...nj ij i并且至少有一个 i 使不等号严格成立. 因此 , 矩阵D AD弱对角优势,故DA D为不可约弱对角优势矩阵 . 从而det D A D 0矛盾,故B1的特征值不能大于等于1,定理得证 .。
第八节 雅可比与高斯—塞德尔迭代法.ppt
建 立 迭 代 格
x
( k 1) 1
1 a 11
(
a
12
x
(k 2
)
a
13
x
(k 3
)
a
1n
x
(k) n
b1
)
x
( k 1) 2
1 a 22
(a
21
x
( k 1) 1
a
23
x
(k 3
)
a
2n
x
(k) n
b2
)
式
x
( k 1) n
1 a nn
(a
n1
x
(k 1
1)
a
n
n1
x
( k 1) n1
x2(k)
取
1 0.72
0.83
x3(k) 0.84
x(0) (0,0,0)T 2 0.971
1.07
1.15
计算如下
……
…
…
11 1.099993 1.199993 1.299991
12 1.099998 1.199998 1.299997
数学学院 信息与计算科学系
例2 用Gauss—Seidel 迭代法解上题。
B2 = BG =(D-L)-1U
数学学院 信息与计算科学系
例如 已知线性方程组 Ax=b 的矩阵为
A
2 1
1 1.5
其G-S迭代矩阵为
BG ( D L)1U
2 1
01 0
3 2
0
1 0
1 3
3 2
1
0 0 2 0
1 0
0 0
1 2
1 3
雅克比迭代法和高斯赛德尔迭代法的算法描述
雅克比迭代法和高斯赛德尔迭代法的算法描述一. 雅克比迭代法雅克比迭代法(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元素的值替换成当前迭代求得的值来计算。
雅可比迭代法和高斯超松弛迭代
雅可比迭代法分量形式(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一个数组。
