迭代法求解线性方程组的研究.docx
《迭代法求解线性方程组的研究.docx》由会员分享,可在线阅读,更多相关《迭代法求解线性方程组的研究.docx(14页珍藏版)》请在冰豆网上搜索。
迭代法求解线性方程组的研究
迭代法求解线性方程组的研究
【摘要】:
本文总结了解线性方程组的三个迭代法,Jacobi迭代法,Gauss-seidel迭代法,SOR迭代法,并且介绍了现代数值计算软件MATLAB在这方面的应用,即分别给出三个迭代法的数值实验。
【关键字】:
Jacobi迭代法Gauss-seidel迭代法SOR迭代法数值实验
一.引言
迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,它是解高阶稀疏方程组的重要方法。
迭代法的基本思想是用逐次逼近的方法求解线性方程组。
设有方程组
…①
将其转化为等价的,便于迭代的形式
…②
(这种转化总能实现,如令
),
并由此构造迭代公式
…③
式中B称为迭代矩阵,f称为迭代向量。
对任意的初始向量
,由式③可求得向量序列
,若
,则
就是方程①或方程②的解。
此时迭代公式②是收敛的,否则称为发散的。
构造的迭代公式③是否收敛,取决于迭代矩阵B的性质。
本文介绍三种解线性方程组的最主要的三种迭代法:
Jacobi迭代法,Gauss-Seidel迭代法和SOR迭代法。
本文结构如下:
第二部分介绍Jacobi迭代法及其数值实验,第三部分介绍Gauss-Seidel迭代法及其数值实验,第四部分介绍SOR迭代法及其数值实验,第五部分总结。
二.雅克比(Jacobi)迭代法
1.雅克比迭代法的格式
设有方程组
…①
矩阵形式为
设系数矩阵A为非奇异矩阵,且
从式①中第i个方程中解出x,得其等价形式
…②
取初始向量
,对式②应用迭代法,可建立相应的迭代公式:
…③
也可记为矩阵形式:
…④
若将系数矩阵A分解为A=D-L-U,式中
,
,
。
则方程Ax=b变为
得
于是
于是式中④中的
。
式③和式④分别称为雅克比迭代法的分量形式和矩阵形式,分量形式用于编程计算,矩阵型式用于讨论迭代法的收敛性。
2.雅克比迭代法的程序
雅克比迭代法的MATLAB函数文件
agui_jacobi.m如下。
Functionx=agui_jacobi(a,b)
%a为系数矩阵,b为右端向量,
为初始向量(默认为零向量)
%e为精度(默认为1e-6),n为最大迭代次数(默认为100)
x为返回解向量。
n=length(b);
N=100;
e=1e-6;
x0=zeros(n,1);
x=x0;
x0=x+2*e;
k=0;
d=diag(diag,0);
1=-tril(a,-1);
u=-triu(a,1);
whilenorm(x0-x,inf)>e&kk=k+1;
x0=x;
x=inv(d)*(l+u)*x+inv(d)*b;
k
disp(
)
end
ifk=Nwarning(‘以达到最大迭代次数’);end
3.数值例子
用雅克比迭代法求解如下线性方程组。
解:
在MATLAB命令窗口求解例题
>>a=[10-12;-110-2;-1-15]
a=
10-12
-110-2
-1-15
>>b=[72;83;42]
b=
72
83
42
>>x=agui_jacobi(a,b)
计算结果为:
k=1
7.200000000000008.300000000000008.40000000000000
k=2
9.71000000000000010.7000000000000011.50000000000000
…
k=16
10.9999996844967011.9999996844967012.99999962583317
x=
10.99999968449670
11.99999968449670
12.99999962583317.
三.高斯—赛德尔(Gauss-Seidel)迭代法
1.高斯—赛德尔迭代法的格式。
雅克比迭代法的优点是公式简单,迭代矩阵容易计算。
在每一步迭代时,用
的全部分量求出
的全部分量,因此称为同步迭代法,计算时需保留两个近似解
和
。
但在雅克比迭代过程中,对已经计算出的信息未能充分利用,即在计算第i个分量
时,已经计算出的最新分量
没有被利用。
从直观上看,在收敛的前提下,这些新的分量
应比旧的分量
更好,更精确一些。
因此,如果每计算出一个新的分量便立即用它取代对应的旧分量进行迭代,可能收敛的速度更快,并且只需要储存一个近似解向量即可。
据此思想可构造高斯—赛德尔(Gauss-Seidel)迭代法,其迭代公式为
(i=1,2,…,n)
也可以写成矩阵形式
仍将系数矩阵A分解为
则方程组变为
得
将最新分量代替为旧分量,得
即
于是有
所以
因为高斯—赛德尔迭代法比雅克比迭代法收敛快,这个结论在多数情况下是成立的,但也有相反的情况,即高斯—赛德尔迭代法比雅克比迭代法收敛慢,甚至还有雅克比迭代法收敛,高斯—赛德尔迭代法发散的情形。
2.高斯—赛德尔迭代法的程序
高斯—赛德尔迭代法在MATLAB的函数文件agui_GS.m如下
Functionx=agui_GS(a,b)
%a为系数矩阵,b为右端向量,x0为初始向量(默认为零向量)
%e为精度(默认为1e-6),N为最大迭代次数(默认为100),x为返回解向量
n=length(b);
N=100;
e=1e-6;
x0=zeros(n,1);
x=x0;
x0=x+2*e;
k=0;
a1=tril(a);
a2=inv(a1);
whilenorm(x0-x,inf)>e&kk=k+1;
x0=x;
x=-a2*(a-a1)*x0+a2*b;
formatlong
k
disp(
)
end
ifk=Nwarning(‘已达到最大迭代次数’);end
4.数值例子
在MATLAB命令窗口求解例1
解:
>>a=[10-12;-110-2;-1-15]
a=
10-12
-110-2
-1-15
>>b=[72;83;42]
b=
72
83
42
>>x=agui_GS(a,b).
计算结果为:
k=1
7.200000000000009.0200000000000011.64400000000000
k=2
10.4308000000000011.6718800000000012.82053600000000
k=3
10.9999999654565311.9999999788305012.99999998885741
x=
10.99999996545653
11.99999997883050
12.99999998885741
三.超松弛(SOR)迭代法
1.超松弛迭代法的格式
超松弛迭代法(SuccessiveOverRelaxationMethod,SOR方法)是高斯—赛德尔迭代法的一种改进,是解大型稀疏方程组的有效方法之一。
设已知第k次迭代向量
,及第k+1次迭代向量的前i-1个分量
,(j=1,2,…i-1),现在研究如何求向量
的第i个分量
。
首先,有高斯—赛德尔迭代法求出一个值,记为
(i=1,2,…n)
再将第k次迭代向量的第i个分量
与
进行加权平均,
得
,即:
于是的SOR迭代公式
(i=1,2,…n)…①
或
(i=1,2,…n)…②
当
=1时,式①即为高斯—赛德尔迭代法;
当0<
<1时,式①称为低松弛方法,当某些方程组用高斯—赛德尔迭代法不收敛时,可以用低松弛方法获得收敛;
当
>1时,式①称为超松弛方法,可以用来提高收敛速度。
将式②写成矩阵的形式,得:
即
于是得SOR迭代的矩阵表示
式中
2.SOR迭代法的程序
SOR迭代法的MATLAB函数文件agui_SOR.m如下
functionx=agui_SOR(a,b,omg)
%a为系数矩阵,b为右端向量,x0为初始向量(默认为零向量)
%e为精度(默认为1e-6),N为最大迭代次数(默认为100)
%omg为松弛因子,x为返回解向量。
n=length(b);
N=100;
e=1e-6;
x0=x+2*e;
k=0;
L=tril(a,-1);
U=triu(a,1);
Whilenorm(x0-x,inf)>e&kk=k+1;
x0=x;
fori=1:
n
x1(i)=(b(i)-L(i,1:
i-1)*x(1:
i-1,1)-U(i,i+1:
n)*x0(i+1:
n,1))/a(i,i);
x(i)=(1-omg)*x0(i)+omg*x1(i);
end
formatlong
k
disp(
)
end
ifk==Nwarning(‘已达到最大迭代次数’);end
3.数值例子
在MATLAB命令窗口求解下方程:
=
解:
>>a=[4-2-4;-21710;-4109]
a=
4-24
-21710
-4109
>>b=[10;3;7]
b=
10
3
-7
取松弛因子为1.46,得
>>x=agui_SOR(a,b,1.46)
k=1
3.650000000000000.88458823529412-0.2021980392157
k=2
2.321669098039220.42309393550173-0.22243214861566
……
k=20
1.999997990284351.00000077908772-1.00000253133178
k=21
1.999997797458841.00000143726811-1.00000259636013
x=
1.99999779745884
1.00000143726811
-1.00000259636013
取松弛因子为1.即用高斯—赛德尔迭代法则需迭代90次,得
>>x=agui_SOR(a,b,1.0)
k=1
2.500000000000000.47058823529412-0.189********013
k=2
2.494660173437570.64588531811546-0.38669027637825
……
k=90
2.000005531926800.99999608340497-0.99999318959361
x=
2.00000553192680
0.99999608340497
-0.99999318959361
四.总结
以上几种解线性方程组的迭代法主要用于解高阶稀疏矩阵方程组,其特点是:
占用内存少,程序设计简单,原始系数矩阵在计算过程中始终不变。
但存在收敛性和收敛速度的问题。
Jacobi迭代法也称简单迭代法,其基本思想是从方程组的第i个方程求出
,并建立相应的迭代公式求出
,Gauss-Seidel迭代法在Jacobi迭代法的基础上进行了改进,再求
时,用已求出的
—
新值代替旧值,因此也称异步迭代法。
在二者都收敛时,Gauss-Seidel迭代法的收敛速度较快,所以,应用比较广泛。
SOR迭代法的松弛因子选择的恰当,收敛速度更快,对一些特殊的方程组,选择松弛因子已有成熟的公式和经验,因此,SOR迭代法应用也比较广泛。
参考文献
【1】陈国章.使用计算方法应急手册.【M】.天津:
天津科学技术出版社,1994.
【2】李乃成,邓建中.数值计算方法.【M】.西安:
西安交通大学出版社,2002
【3】李庆扬,王能超,易大义.数值分析(第4版).【M】.北京:
清华大学出版社,2001.
【4】李庆扬.数值分析基础教程.【M】.北京:
高等教育出版社,2001.
【5】王沫然.MATLAB5.x与计算方法.【M】.北京:
清华大学出版社,2000.
【6】ShoichiroNakamura著.梁恒,刘晓艳等译.科学计算引论—基于MATLAB的数值分析【M】.北京:
电子工业出版社,2002.
【7】王能超.数值分析简明教程(第2版).【M】.北京:
高等教育出版社,2003.
【8】金聪,熊盛武.数值分析.【M】.武汉:
武汉理工大学出版社,2003.
【9】魏毅强,张建国,张洪斌等.数值计算方法.【M】.北京:
高等教育出版社,2004.
【10】高培旺.计算方法典型例题与习题.【M】.长沙:
国防科技大学出版社,2003.
【11】封建湖,聂玉峰,王振海.数值分析(第4版)导教·导学·导考.【M】.西安:
西北工业大学出版社,2003.
【12】吴筑筑.计算方法.【M】.北京:
清华大学出版社、北京交通大学出版社,2004.
【13】严蔚敏,吴伟民.数据结构(C语言版)【M】.北京:
清华大学出版社,1997.
【14】RichardL.Burden,J.DouglasFaires.NumericalAnalysis(SeventhEdition).【M】.ThomsonLearning,Inc,2001.
【15】PascalSebahandXavierGourdon,Newton’sMethodAndHighOrderIterations【A】.Numbers,ConstantandComputation.2001
SolutionOfLinearEquationsOfIterationWithTheExperimental
Abstract:
Thissummaryunderstandingoflinearequationsthreeiteration,jacobiiteration,gauss-seideliteration,SuccessiveOverRelaxationMethod,andintroducemodernnumericalsoftwarematlabinthisrespect,whichweregiventhreeiterationofnumericalexperiments
Keywords:
Jacobiiteration,gaussseideliteration,SuccessiveOverRelaxationMethod,experiments