超松弛迭代法解线性方程组

超松弛迭代法解线性方程组
超松弛迭代法解线性方程组

设计题目:超松弛迭代法解线性方程组

摘要

本文是在matlab环境下熟悉的运用计算机编程语言并结合超松弛变量超松弛迭代法的理论基础对方程组求解。

首先,本文以微分方程边值问题为例,导出了离散化后线性方程组即稀疏线性方程组,转化对稀疏线性方程组求解问题。其次,用超松弛( SOR) 迭代法编写matlab程序,对产生的稀疏线性方程组进行迭代法求解。然后,分别改变松弛因子ω和分段数n的值,分析其收敛性和收敛速度,做出各个方面的分析和比较得到相关结论。最后,将超松弛迭代算法在计算机上运用matlab语言实现, 得出了一组与精确解较接近的数值解,并画图比较,验证逐次超松弛( SOR) 迭代法的精确性。

关键词:稀疏线性方程组逐次超松弛迭代法松弛因子

matlab编程

一、问题提出

考虑两点边值问题

()()?????==<<=+.

11,00,

10,22y y a a dx

dy dx y d ε 容易知道它的精确解为

.1111ax e e a y x +???

? ??

---=

--εε

为了把微分方程离散,把[]1,0区间n 等分,令n

h 1

=,ih x i =,,1,,2,1-=n i Λ得到差分方程

,212

11a h y y h

y y y i i i i i =-++-++-ε 简化为

()(),2211ah y y h y h i i i =++-+-+εεε

从而离散后得到的线性方程组的系数矩阵为

()

()()()???????

?

??

?

????

?+-++-++-++-=h h h h h h h A εεεεεεεεεε2222O O O

对1=ε,4.0=a ,200=n ,分别用1=ω、5.0=ω和5.1=ω的超松弛迭代法求解线性方程组,要求有4位有效数字,然后比较与精确解的误差,探讨使超松弛迭代法收敛较快的ω取值,对结果进行分析。改变n ,讨论同样问题。

二、超松弛迭代法产生的背景

对从实际问题中得到维数相当大的线性代数方程组的求解仍然十分困难, 以

至使人们不能在允许的时间内用直接方法得到解, 因此, 客观上要求用新的方法

来解决大维数方程组的求解问题。

现有大多数迭代法不是对各类线性方程组都有收敛性, 在解题时, 要对原方程组矩阵作一根本的变换, 从而可能使条件数变坏, 也可能破坏了变换前后方程组的等价性, 以及丧失使原方程组的对称性等。探求新的有效的解题方法依然是迫切的任务。逐次超松弛(Successive Over Relaxation)迭代法是在高斯-赛德尔

(GS)迭代法基础上为提高收敛速度,采用加权平均而得到的新算法。

在求解过程中由于线性方程组的系数矩阵维数较大, 采用计算机编写算法来求解, 从而实现了对解析模型的计算机数值逼近的计算方法#本论文以逐次超松弛迭代法为主要的求解方法。

三、超松弛迭代法的理论基础

(一)逐次超松弛迭代法

逐次超松弛(Successive Over Relaxation)迭代法,简称SOR迭代法,它是在GS法基础上为提高收敛速度,采用加权平均而得到的新算法,设解方程

(7.1.3)的GS法记为

(1)

再由与加权平均得

这里ω>0称为松弛参数,将(1)代入则得

(2)

该法称为SOR迭代法,[WTBX]ω>0称为松弛因子,当ω=1时(2)式即为高斯-赛德尔迭代法,简记GS法,将(2)写成矩阵形式,则得

于是得SOR迭代的矩阵表示

(3)

其中

(4)

分解后,有.

(二)逐次超松弛迭代法的收敛性

根据迭代法收敛性定理,SOR法收敛的充分必要条件为,收敛的充分条件为,但要计算比较复杂,通常都不用此结论,而直接根据

方程组的系数矩阵A判断SOR迭代收敛性,下面先给出收敛必要条件.

定理1设,则解方程的SOR迭代法收敛的必要条件是0<ω<2.

该定理为SOR迭代法收敛的必要条件。

定理2若对称正定,且0<ω<2,则解Ax=b的SOR迭代法对迭代收敛.

对于SOR迭代法,松弛因子的选择对收敛速度影响较大,关于最优松弛因子

研究较为复杂,且已有不少理论结果.下面只给出一种简单且便于使用的结论。

定理3设为对称正定的三对角矩阵,是解方程的J法迭代矩阵,若,记,则SOR法的最优松弛因子为

(5)

(6)

根据定理,,如图1所示.由(6)可知,当ω=1,

时,收敛速度为

.

说明GS法比J法快一倍.

图1

定理4 设,如果:

(1)A 为严格对角占优矩阵;(2)0<ω<=1. 则解

的SOR 迭代法收敛。

四、实验内容

1.自定义函数 sor (A, b, nm, e, w ),以实现SOR 方法求解线性方程组AX =B ,其中

A ——系数矩阵; b ——常数列向量; w ——松弛因子; nm ——迭代的最大次数 e ——(1)

()

k k X

X +∞

-达到的精度上限

由离散后的差分方程:

()(),2211ah y y h y h i i i =++-+-+εεε,1,,2,1-=n i Λ

得到的线性方程组的系数矩阵为

()

()()()???????

?

??

?

????

?+-++-++-++-=h h h h h h h A εεεεεεεεεε2222O O O

常数列向量b=???

??

??

?

????????????????+--y ah

ah ah y ah h 2002

2

202

)(..

.εε 其中

1

=ε,

4

.0=a ,

200

=n ,

n

h 1

=

,则有

00001.0,005.1,005.2)2(2==+-=+-ah h h εε。A 为(a ij )200*200型矩阵,b 为(bij )200*1

型矩阵。

在本次试验中,由于所提供数据较小,当最大迭代次数nm 较小时,在nm 迭代次数范围内,不能判断该超松弛迭代法是否收敛,此次取nm=30000。迭代精度e 也应取较小值才能使误差更小,此次取e=0.00001。由定理1可知,本次试验中,ω的取值范围为:0<ω<2才能保证迭代法收敛。

取T x )1,1,,1,1,1()0(Λ=,为1200?的矩阵。用SOR 迭代公式得

()

()()(

)

()

(

)

?????

?

???????+---=-+---=-+---=-+---=-+---=-+--=+++++++++++.005.2/005.200001.0;

005.2/005.1005.200001.0;005.2/005.1005.200001.0;

005.2/005.1005.200001.0;005.2/005.1005.200001.0;005.2/005.1005.200001.0)

(222)1(199)

(200)1(200)(200

)(199)1(198)(199)1(199)

(5)(4)1(3)(4)1(4

)(4

)(3)1(2)(3)1(3)(3)(2)1(1)(2)1(2

)

(2)(1)(1)1(1k k k k k k k k k k k k k k k k k k k k k k k k k k k k x x x x x x x x x x x x x x x x x x x x x x x x x x x x ωωωωωωM ω取不同值时,对应的迭代次数、与精确解的误差如下表1。

表1 ω取不同值时对应的迭代次数与误差

1 10368 0.3693 1.5 4891 0.1053 1.6 3945 0.0731 1.7 3017 0.0460 1.8 2087 0.0261 1.9 1113 0.0236

满足误差

()42

*10-<-x x k 的迭代次数

图1 计算值与精确值图形比较

从本组的实验中,可以看出w 值的取定十分重要,它对求解的迭代次数影响十分明显。一个不好的w 值甚至会导致迭代超过10000次仍未能求得需要精度的值。

由表1可得,当ω=1.9时SOR 迭代法收敛速度最快,误差最小。

取ω=1.9,nm=30000,T x )6.0,6.0,,6.0,6.0,6.0()0(Λ=等各个因子相同时,当分段点n 取不同值时,对应的迭代次数、与精确解的误差如下表2。

区间等分数n

松弛因子ω=1.9

迭代次数误差

120 416 0.2477

150 416 0.2477

200 416 0.2477

250 416 0.2477

满足误差

()4

2

*10-

<

-x

x k的迭代次数

从本组的实验中,当其他各个因子取适当值时,改变分段数时,对结果没有影响。

图3 精确图形

由图3可得,当各个参数取值适当时,用SOR迭代法所得线性方程组的解与精确解误差极小,从而验证了SOR迭代法的准确性。

五、结论

1.通过本次的课程设计,可知逐次超松弛迭代法与Jacobi 迭代法, Seidel 迭代

法相比, 收敛速度较快。由逐次超松弛迭代法求出的方程组的数值解与该方程组的精确解十分接近, 离散化后线性方程组的逐次超松弛迭代法的精确性较高。逐次超松弛迭代法可以广泛地应用于实际。该算法不仅可以用来求解高阶稀疏线性方程组, 还可以用来求解热传导问题这样可以大大减少计算量和计算机的内存储量, 从而提高计算效率。本次的课程设计,我们运用了matlab 语言来实现相关的计算,这样不仅对逐次超松弛迭代法有了更深层的了解掌握,还提高了对matlab的操作技术,深刻体会到了MATLAB功能的强大之处。

通过本次试验,我掌握了用Jacobi、Gauss-Seidel、SOR迭代法求解线性方程组的方法;

六、参考文献

[1]李庆扬,王能超,易大义.数值分析[M], 清华大学出版社,2008.

[2]刘卫国. MATLAB程序设计与应用[M],高等教育出版社,2008.

[3]王诗然. 稀疏线性方程组求解的逐次超松弛迭代法[J],沈阳师范大学学

报,4,407-409,2006.

[4]李建宇,黎燕. 牛顿一SOR迭代方法中最佳松弛因子的算法[J],四川大学学

报,4,381-382,1995.

[5]蔡大用.数值分析与实验学习指导[M],清华大学出版社,2001.

附录

1.超松弛迭代法

function [n,x]=cscdd(A,b,X,nm,e,w)

n=1;

D=diag(diag(A)); %令A=D-L-U,计算矩阵D

L=tril(-A)+D; %令A=D-L-U,计算矩阵L

U=triu(-A)+D; %令A=D-L-U,计算矩阵U

M=inv(D-w*L)*((1-w)*D+w*U); %计算迭代矩阵

g=w*inv(D-w*L)*b; %计算迭代格式中的常数项

%下面是迭代过程

while n<=nm

x=M*X+g; %用迭代格式进行迭代 r=norm(x-X,'inf');

if r

return;

end

X=x; n=n+1;

end

disp('在最大迭代次数内不收敛!')

2.输入初始值并调用SOR迭代法

n0=200;m=1;a=0.4;h=1/n0;A=zeros(n0,n0); for i=1:n0

A(i,i)=-(2*m+h);

end

for i=2:n0-1

A(i,i-1)=m;

A(i,i+1)=m+h;

end

A(1,2)=m+h;A(n0,n0-1)=m;

for i=1:n0-1

b(i,1)=a*h^2;

end

b(n0,1)=a*h^2-(m+h);

for i=1:n0

xi=i/n0;

y0(i,1)=((1-0.4)/(1-exp(-1)))*(1-exp(-xi))+0.4*xi; x0(i,1)=1;

end

[n1,x1]=cscdd(A,b,x0,30000,0.00001,0.5);

n1

u1=norm(x1-y0,2)

[n2,x2]=cscdd(A,b,x0,30000,0.00001,1.0);

n2

u2=norm(x2-y0,2)

[n3,x3]=cscdd(A,b,x0,30000,0.00001,1.5);

n3

u3=norm(x3-y0,2)

t=1/200:1/200:1;

plot(t,y0)

hold on

plot(t,x1,'g')

hold on

plot(t,x2,'r')

hold on

plot(t,x3,'k')

legend('精确解','w=0.5','w=1','w=1.5');

title('计算值与精确值图形比较')

hold off

迭代法求解线性方程组的研究

迭代法求解线性方程组的研究 【摘要】:本文总结了解线性方程组的三个迭代法,Jacobi 迭代法,Gauss-seidel 迭代法,SOR 迭代法,并且介绍了现代数值计算软件MATLAB 在这方面的应用,即分别给出三个迭代法的数值实验。 【关键字】:Jacobi 迭代法 Gauss-seidel 迭代法 SOR 迭代法 数值实验 一. 引言 迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,它是解高阶稀疏方程组的重 要方法。 迭代法的基本思想是用逐次逼近的方法求解线性方程组。 设有方程组 b Ax = …① 将其转化为等价的,便于迭代的形式 f Bx x += …② (这种转化总能实现,如令b f A I B =-=,), 并由此构造迭代公式 f Bx x k k +=+)() 1( …③ 式中B 称为迭代矩阵,f 称为迭代向量。对任意的初始向量) 0(x ,由式③可求得向量序列 ∞0)(}{k x ,若*) (lim x x k k =∞ →,则*x 就是方程①或方程②的解。此时迭代公式②是收敛的,否则称为发散的。构造的迭代公式③是否收敛,取决于迭代矩阵B 的性质。 本文介绍三种解线性方程组的最主要的三种迭代法:Jacobi 迭代法,Gauss-Seidel 迭代法和SOR 迭代法。本文结构如下:第二部分介绍Jacobi 迭代法及其数值实验,第三部分介绍Gauss-Seidel 迭代法及其数值实验,第四部分介绍SOR 迭代法及其数值实验,第五部分总结。 二. 雅克比(Jacobi )迭代法 1. 雅克比迭代法的格式 设有方程组

),,3,2,1(1 n i b x a j j n j ij ==∑= …① 矩阵形式为b Ax =,设系数矩阵A 为非奇异矩阵,且),,3,2,1(,0n i a ii =≠ 从式①中第i 个方程中解出x ,得其等价形式 )(1 1 1j n j j ij ii i x a b a x ∑≠=-= …② 取初始向量),,,() 0()0(2)0(1) 0(n x x x x =,对式②应用迭代法,可建立相应的迭代公式: )(11 1)() 1(∑≠=++-=n j j i k j ij ii k i b x a a x …③ 也可记为矩阵形式: J x J k F B x k +==) () 1( …④ 若将系数矩阵A 分解为A=D-L-U ,式中 ???? ? ? ? ??=nn a a a D 2211, ?? ? ?? ?? ? ??=--00 00121323121nn n n a a a a a a L , ?? ? ??? ? ? ? ?=--00 00122311312n n n n a a a a a a D 。 则方程Ax=b 变为 b x U L D =--)( 得 b x U L Dx ++=)( 于是 b D x U L D x 1 1 )(--++=

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

jacobi G-S,超松弛迭代法MATLAB程序

function iteration A=[10,1,2,3,4; 1,9,-1,2,-3; 2,-1,7,3,-5; 3,2,3,12,-1; 4,-3,-5,-1,15]; b=[12,-27,14,-17,12]'; x0=[0,0,0,0,0]'; tol=1e-12; disp('jacobi迭代法的结果和次数如下:') [x,k]=Fjacobi(A,b,x0,tol) disp('G-S迭代法的结果和次数如下:':') [x,k]=Fgseid(A,b,x0,tol) disp('超松弛的结果和次数如下:':') [x,k]=Fsor(A,b,x0,1.2,tol) disp('共轭梯度法的结果和次数如下:':') [x,k]=Fcg(A,b,x0,tol) %jacobi迭代法 function [x,k]=Fjacobi(A,b,x0,tol) max=300; D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); B=D\(L+U); f=D\b; x=B*x0+f; k=1; while norm(x-x0)>=tol x0=x; x=B*x0+f; k=k+1; if(k>=max) disp('μü′ú3?1y300′?£?·?3ì×é?é?ü2?ê?á2'); return; end end %G-S迭代法 function [x,k]=Fgseid(A,b,x0,tol) max=300; D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); G=(D-L)\U; f=(D-L)\b; x=G*x0+f; k=1; while norm(x-x0)>=tol x0=x; x=G*x0+f; k=k+1; if(k>=max) disp('μü′ú3?1y300′?£?·?3ì×é?é?ü2?ê?á2'); return; end

实验一 用超松弛迭代法求解接地金属槽内电位分布

实验一 用超松弛迭代法求解接地金属 槽内电位分布 学院:自动化学院 姓名: 学号: 一、实验内容: 试用超松弛迭代法求解接地金属槽内电位的分布。 已知:cm a 4=,mm a h 104/== 给定边值如图所示。 给定初值:0)0(,=j i ? 误差范围:510-=ε 计算迭代次数,j i ,?分布。 二.实验设计原理:有限差分法 有限差分法(Finite Differential Method )是基于差 分原理的一种数值计算法。其基本思想:将场域离散为许多 小网格,应用差分原理,将求解连续函数?的泊松方程的问 题换为求解网格节点上?的差分方程组的问题。 编程时已经考虑到题目要求,所以直接将边值编入到程 序中,这样可以省略输入,从而直接输入迭代因子进行求解,可以减少编程的难度。这次编程和以前不同的是将数组和正0=?= V 100 ? 0=?0=?

交函数图像结合起来,所以在考虑输入和输出的时候会有一些难度,因为数组是上面是小的而图像上面越在上,代表坐标就越大。所以在输入和输出的时候要谨慎对待。 迭代时所用公式是和书上一样,为 a[i][j]=b[i][j]+w/4*(b[i+1][j]+b[i][j+1]+a[i][j-1 ]+a[i-1][j]-4*b[i][j]); 其中a代表k+1,而b代表k。 以上分析了迭代程序的实现,但是迭代循环如何终止并未说明。题目中的误差范围ε=0.00001,即当两次迭代结果相差不超过ε时停止,这里只得是九点都满足不超过ε,而并不是其中某一点达到即可。这样可以保证不是陷入死循环,从而输出结果。 这样可以画出流程图如下所示:

第六章解线性方程组的迭代法

第五章 解线性方程组的迭代法 本章主要内容: 迭代法收敛定义,矩阵序列收敛定义,迭代法基本定理,雅可比迭代法,高斯-塞德尔迭代法,系数矩阵为严格对角占优阵的采用雅可比迭代、高斯-塞德尔迭代的收敛性。 教学目的及要求: 使学生了解迭代法收敛定义,迭代法基本定理,掌握雅可比迭代法、高斯-塞德尔迭代法。 教学重点: 雅可比迭代法,高斯-塞德尔迭代法。 教学难点: 迭代法基本定理的证明以及作用。 教学方法及手段: 应用严格的高等代数、数学分析知识,完整地证明迭代法基本定理,讲清雅可比迭代法与高斯-塞德尔迭代法的关系,介绍雅可比迭代法与高斯-塞德尔迭代法在编程中的具体实现方法。 在实验教学中,通过一个具体实例,让学生掌握雅可比迭代法与高斯-塞德尔迭代法的具体实现,并能通过数值计算实验,揭示高斯-塞德尔迭代法是对雅可比迭代法的一种改进这一事实。 教学时间: 本章的教学的讲授时间为6学时,实验学时4学时。 教学内容: 一 迭代法定义 对于给定的线性方程组x Bx f =+,设它有唯一解*x ,则 **x Bx f =+ (6.1) 又设(0)x 为任取的初始向量,按下述公式构造向量序列 (1)(),0,1,2,k k x Bx f k +=+=L (6.2) 这种逐步代入求近似解的方法称为迭代法(这里B 与f 与k 无关)。如果() lim k k x →∞ 存在 (记为*x ),称此迭代法收敛,显然*x 就是方程组的解,否则称此迭代法发散。 迭代法求方程近似解的关键是是讨论由(6.1)式所构造出来的向量序列() {} k x 是否收敛。为此,我们引入误差向量 (1)(1)*k k x x ε++=- 将(6.2)式与(6.1)式相减,我们可得 (1)*()*()k k x x B x x +-=- (1)(),0,1,2,k k B k εε+==L 递推下去,得 ()(1)2(2)(0)k k k k B B x B x εε--====L

常微分方程的解线性方程组的迭代法

实验五 解线性方程组的迭代法 【实验内容】 对1、设线性方程组 ?? ? ? ?? ? ? ?? ? ? ?? ? ? ??-=???????????????? ?????????????????? ? ?--------------------------211938134632312513682438100412029137264 2212341791110161035243120 536217758683233761624491131512 013012312240010563568 0000121324 10987654321x x x x x x x x x x ()T x 2,1,1,3,0,2,1,0,1,1*--= 2、设对称正定系数阵线性方程组 ?? ? ????? ??? ? ? ??---=????????????? ??????????????? ??---------------------4515229 23206019243360021411035204111443343104221812334161 2065381141402312122 00240424 87654321x x x x x x x x ()T x 2,0,1,1,2,0,1,1*--= 3、三对角形线性方程组

?? ? ?? ? ????? ??? ? ? ??----=???????????????? ?????????????????? ??------------------5541412621357410000000014100000000141000000001410000000014100000000141000000001410000000014100000000 14100000000 1410987654321x x x x x x x x x x ()T x 1,1,0,3,2,1,0,3,1,2*---= 试分别选用Jacobi 迭代法,Gauss-Seidol 迭代法和SOR 方法计算其解。 【实验方法或步骤】 1、体会迭代法求解线性方程组,并能与消去法加以比较; 2、分别对不同精度要求,如54310,10,10---=ε由迭代次数体会该迭代法的收敛快慢; 3、对方程组2,3使用SOR 方法时,选取松弛因子ω=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者; 4、给出各种算法的设计程序和计算结果。 程序: 用雅可比方法求的程序: function [x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200;

求解线性方程组——超松弛迭代法(c)

求解线性方程组——超松弛迭代法 #include #include 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<>n; a=two_array_malloc(n,n+1); cout<>a[i][j]; } } x_0=one_array_malloc(n); cout<>x_0[i]; } x_k=one_array_malloc(n);

cout<<"输入松弛因子w (1>w; float temp; //迭代过程 for(k=0;k

线性方程组的迭代法及程序实现

线性方程组的迭代法及程序实现 学校代码:11517 学号:200810111217 HENAN INSTITUTE OF ENGINEERING 毕业论文 题目线性方程组的迭代法及程序实现 学生姓名 专业班级 学号 系 (部)数理科学系 指导教师职称 完成时间 2012年5月20日河南工程学院 毕业设计(论文)任务书 题目:线性方程组的迭代法及程序实现专业:信息与计算科学学号 : 姓名一、主要内容: 通过本课题的研究,学会如何运用有限元方法来解决线性代数方程组问题,特别是Gaussie-Seidel迭代法和Jacobi迭代法来求解线性方程组。进一步学会迭代方法的数学思想,并对程序代码进行解析与改进,这对于我们以后学习和研究实际问题具有重要的意义。本课题运用所学的数学专业知识来研究,有助于我们进一步掌握大学数学方面的知识,特别是迭代方法。通过这个课题的研究,我进一步掌握了迭代方法的思想,以及程序的解析与改进,对于今后类似实际问题的解决具有重要的意义。

二、基本要求: 学会编写规范论文,独立自主完成。 运用所学知识发现问题并分析、解决。 3.通过对相关资料的收集、整理,最终形成一篇具有自己观点的学术论文,以期能对线性方程组迭代法的研究发展有一定的实践指导意义。 4.在毕业论文工作中强化英语、计算机应用能力。 完成期限: 2012年月指导教师签名:专业负责人签名: 年月日 目录 中文摘要....................................................................................Ⅰ英文摘要 (Ⅱ) 1 综述 1 2 经典迭代法概述 3 2.1 Jacobi迭代法 3 2.2 Gauss?Seidel迭代法 4 2.3 SOR(successive over relaxation)迭代法 4 2.4 SSOR迭代法 5 2.5 收敛性分析5 2. 6 数值试验 6 3 matlab实现的两个例题8 3.1 例1 迭代法的收敛速度8 3.2 例 2 SOR迭代法松弛因子的选取 12致谢16参考文献17附录19

数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组

作业六:分别编写用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组Ax=B的标准程序,并求下列方程组的解。 可取初始向量 X(0) =(0,0,0)’; 迭代终止条件||x(k+1)-x(k)||<=10e-6 (1) = (2) = 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>e for i=1:n d=A(i,i); if abs(d)100 warning('不收敛'); end end x=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不是方阵'); end n=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)*U d=zeros(n,1);%d=inv(D+L)*b x=zeros(n,1); for i=1:n%初始化L和U for j=1:n if ij U(i,j)=A(i,j); end end end for i=1:n%初始化D D(i,i)=A(i,i); end G=-inv(D+L)*U;%初始化G d=(D+L)\b;%初始化d %迭代开始 x1=x; x2=G*x+d; while norm(x2-x1,inf)>10^(-6)

SOR迭代法超松弛因子选取

《计算方法》实验报告(二) 实验名称:SOR 迭代法松弛因子的选取 班级: 数学1402班 姓名: 高艺萌 学号:14404210 一、 实验目的 通过本实验学习线性方程组的SOR 迭代解法以及SOR 迭代法的编程与应用。对比分析不同条件下的超松弛因子w 的取值大小会对方程组的解造成影响,通过这个实验我们可以了解的w 不同取值会对方程组的解产生的影响。培养编程与上机调试能力。 二、 实验题目 用逐次超松弛(SOR )迭代法求解方程组b Ax =,其中 ?????????? ????????????=????????????????????????????????????????????=555555122-12-122-112-122-112-122-112-122-12-12201918321 x x x x x x A (1)给定迭代误差,选取不同的超松弛因子1>ω进行计算,观察得到的近似解向量并分析计算结果,给出你的结论; (2)给定迭代误差,选取不同的超松弛因子1<ω进行计算,观察得到的近似解向量并分析计算结果,给出你的结论; 三、 实验原理 1.逐次超松弛迭代法可以看作Gauss-Seidel 迭代法的加速, b D Ux D Lx D x k k k 1)(1)1(1)1(--+-+++= 2.SOR 迭代计算格式 b D L wD I w x U wD I w L wD x k k 111)(111)1()(])1[()-1(------+-++-= 其中,w 叫松弛因子,当w>1时叫超松弛,0

线性方程组的迭代求解java

线性方程组的迭代求解 摘要 迭代法是一种逐次逼近方法,在使用迭代法解方程组时,其系数矩阵在计算过程中始终不变。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行。迭代法具有循环的计算方法,方法简单,适宜解大型稀疏矩阵方程组 本文总结了解线性方程组的三个迭代法,Jacobi迭代法,Gauss-Seidel迭代法,SOR 迭代法,并且介绍了软件JA V A在这方面的应用。 关键词: Jacobi迭代法;Gauss-Seidel迭代法;SOR迭代法;计算

SOLUTION OF LINEAR EQUATIONS OF ITERATION WITH THE EXPERIMENTAL ABSTRACT Iteration is a kind of method to solve questions by step-by-step approximation. When we are getting the solution of linear equations by using iteration, the coefficient matrix is always staying the same in computation process. Computer could operate fastly so that it is suitable for operating again and again. Iteration is easy to operate to solve the large matrix equations by using a calculate method called circulation. This summary understanding of linear equations three kind of iteration, Jacobi iteration, Gauss-Seidel iteration, successive over relaxation method ,and introduce modern software JA V A in this respect. Key words:Jacobi iteration; Gauss-Seidel iteration; Successive Over Relaxation method ; calculating

超松弛迭代法及其松弛因子的选取

2013届学士学位毕业论文 超松弛迭代法及其松弛因子的选取 学号:09404307 姓名:程启远 班级:信息0901 指导教师:崔艳星 专业:信息与计算科学 系别:数学系 完成时间:2013年5月

学生诚信承诺书 本人郑重声明:所呈交的论文《超松弛迭代中松弛因子的选取方法》是我个人在导师崔艳星指导下进行的研究工作及取得的研究成果.尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写的研究成果,也不包含为获得长治学院或其他教育机构的学位或证书所使用过的材料.所有合作者对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意. 签名:日期: 论文使用授权说明 本人完全了解长治学院有关保留、使用学位论文的规定,即:学校有权保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部分内容,可以采用影印、缩印或其他复制手段保存论文. 签名:日期: 指导教师声明书 本人声明:该学位论文是本人指导学生完成的研究成果,已经审阅过论文的全部内容,并能够保证题目、关键词、摘要部分中英文内容的一致性和准确性. 指导教师签名:时间

摘要 本文首先给出了超松弛迭代法解线性方程组的基本概念,引进了关于超松弛迭代法收敛性判别的一些定理.再基于超松弛迭代法收敛性快慢与松弛因子的选择密切相关,本文给出了能准确快速地确定最优松弛因子的方法逐步搜索法和黄金分割法,并且写出了其Matlab 程序(附录),最后通过实例验证了方法的准确性,快速性. 关键词线性方程组;超松弛迭代;Matlab程序;松弛因子

Abstract This paper firstly introduces the basic concept of the super relaxation iteration method for solving linear equations, introduced on some criterion theorem Overrelaxation iterative convergence, gives a simple Matlab program super relaxation iteration (Appendix 1). Then Overrelaxation iterative convergence speed and relaxation factor is selected based on the close relation is proposed in this paper, the rapid and accurate method of determining the optimal relaxation factor of the direct search method and the golden section method, and write the Matlab program (Appendix 2), finally the method is accurate, rapid. Key word:Linear equations; Successive Over Relaxation; Matlab program; relaxation factor

SOR迭代法求解线性方程组

实验三:用SOR 迭代法求解线性方程组 ?????? ? ??=??????? ????????? ??----------74.012.018.168.072.012.006.016.012.001.103.014.006.003.088.001.016.014.001.076.04321x x x x 取初始点T x )0,0,0,0()0(=,松弛因子05.1=ω,精度要求610-=ε。 1,建立SOR.m 函数文件,此函数文件可调用,程序源码如下: function [x,n]=SOR(A,b,x0,w,eps,M) if nargin==4 eps= 1.0e-6;%精度要求 M = 200; elseif nargin<4 error; return elseif nargin ==5 M = 200; end if(w<=0 || w>=2) error; return; end D=diag(diag(A)); %求A 的对角矩阵 L=-tril(A,-1); %求A 的下三角阵 U=-triu(A,1); %求A 的上三角阵 B=inv(D-L*w)*((1-w)*D+w*U); f=w*inv((D-L*w))*b; x=B*x0+f; n=1; %迭代次数 while norm(x-x0)>=eps x0=x; x =B*x0+f; n=n+1; if(n>=M) disp('Warning: 迭代次数太多,可能不收敛!'); return; end end

2,输入矩阵。并根据要求调用函数,运行结果如下图所示: 即经过7次迭代算出结果,且求得: 1.27151.28440.48581.2843x ?? ? ?= ? ???

Gauss-Seidel迭代法求解线性方程组

Gauss-Seidel迭代法求解线性方程组

一. 问题描述 用Gauss-Seidel 迭代法求解线性方程组 由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值。使用了两倍的存储空间,浪费了存储空间。若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量 ) 1(+k i x 时,用最新分量 ) 1(1 +k x , ???+) 1(2 k x ) 1(1 -+k i x 代替旧分量 ) (1 k x , ???) (2 k x ) (1 -k i x ,可以起 到节省存储空间的作用。这样就得到所谓解方程组的Gauss-Seidel 迭代法。 二. 算法设计 将A 分解成U D L A --=,则b x =A 等价于b x =--U)D (L 则Gauss-Seidel 迭代过程 ) ()1()1(k k k Ux Lx b Dx ++=++ 故 ) ()1()(k k Ux b x L D +=-+ 若设1 )(--L D 存在,则 b L D Ux L D x k k 1)(1)1()()(--+-+-= 令 b L D f U L D G 11)()(---=-=,

则Gauss-Seidel 迭代公式的矩阵形式为 f Gx x k k +=+) () 1( 其迭代格式为 T n x x x x ) ()0()0(2)0(1)0(,,,???= (初始向量), ) (1 1 1 1 1 )()1()1(∑∑-=-+=++--=i j i i j k j ij k j ij i ii i i x a x a b a x )210i 210(n k ???=???=,,,;,,, 或者 ?? ???--=???=???==?+=∑∑-=-+=+++) (1)210i 210(111 1)()1()1()()1(i j i i j k j ij k j ij i ii i i i k i k i x a x a b a x n k k x x x ,,,;,,, 三. 程序框图

数值计算_第4章 解线性方程组的迭代法

第4章解线性方程组的迭代法 用迭代法求解线性方程组与第4章非线性方程求根的方法相似,对方程组进行等价变换,构造同解方程组(对可构造各种等价方程组, 如分解,可逆,则由得到),以此构造迭代关系式 (4.1) 任取初始向量,代入迭代式中,经计算得到迭代序列。 若迭代序列收敛,设的极限为,对迭代式两边取极限 即是方程组的解,此时称迭代法收敛,否则称迭代法发散。我们将看到,不同于非线性方程的迭代方法,解线性方程组的迭代收敛与否完全决定于迭代矩阵的性质,与迭代初始值的选取无关。迭代法的优点是占有存储空间少,程序实现简单,尤其适用于大型稀疏矩阵;不尽人意之处是要面对判断迭代是否收敛和收敛速度的问题。 可以证明迭代矩阵的与谱半径是迭代收敛的充分必要条件,其中是矩阵的特征根。事实上,若为方程组的解,则有 再由迭代式可得到

由线性代数定理,的充分必要条件。 因此对迭代法(4.1)的收敛性有以下两个定理成立。 定理4.1迭代法收敛的充要条件是。 定理4.2迭代法收敛的充要条件是迭代矩阵的谱半径 因此,称谱半径小于1的矩阵为收敛矩阵。计算矩阵的谱半径,需要求解矩阵的特征值才能得到,通常这是较为繁重的工作。但是可以通过计算矩阵的范数等方法简化判断收敛的 工作。前面已经提到过,若||A||p矩阵的范数,则总有。因此,若,则必为收敛矩阵。计算矩阵的1范数和范数的方法比较简单,其中 于是,只要迭代矩阵满足或,就可以判断迭代序列 是收敛的。 要注意的是,当或时,可以有,因此不能判断迭代序列发散。

在计算中当相邻两次的向量误差的某种范数小于给定精度时,则停止迭代计算,视为方程组的近似解(有关范数的详细定义请看3.3节。) 4.1雅可比(Jacobi)迭代法 4.1.1 雅可比迭代格式 雅可比迭代计算 元线性方程组 (4.2) 写成矩阵形式为。若将式(4.2)中每个方程的留在方程左边,其余各项移到方程右边;方程两边除以则得到下列同解方程组: 记,构造迭代形式

迭代法解线性方程组

迭代法解线性方程组作业 沈欢00986096 北京大学工学院,北京100871 2011年10月12日 摘要 由所给矩阵生成系数矩阵A和右端项b,分析系数矩阵A,并用Jacobi迭代法、GS迭代法、SOR(逐步松弛迭代法)解方程组Ax=b 1生成系数矩阵A、右端项b,并分析矩阵A 由文件”gr900900c rg.mm”得到了以.mm格式描述的系数矩阵A。A矩阵是900?900的大型稀 疏对称矩阵。于是,在matlaB中,使用”A=zeros(900,900)”语句生成900?900的零矩阵。再 按照.mm文件中的描述,分别对第i行、第j列的元素赋对应的值,就生成了系数矩阵A,并 将A存为.mat文件以便之后应用。 由于右端项是全为1的列向量,所以由语句”b=ones(900,1)”生成。 得到了矩阵A后,求其行列式,使用函数”det(A)”,求得结果为”Inf”,证明行列式太大,matlaB无法显示。由此证明,矩阵A可逆,线性方程组 Ax=b 有唯一解。 接着,判断A矩阵是否是对称矩阵(其实,这步是没有必要的,因为A矩阵本身是对称矩阵,是.mm格式中的矩阵按对称阵生成的)。如果A是对称矩阵,那么 A?A T=0 。于是,令B=A?A T,并对B求∞范数。结果显示: B ∞=0,所以,B是零矩阵,也就是:A是对称矩阵。 然后,求A的三个条件数: Cond(A)= A ? A?1 所求结果是,对应于1范数的条件数为:377.2334;对应于2范数的条件数为:194.5739;对应 于3范数的条件数为:377.2334; 1

从以上结果我们看出,A是可逆矩阵,但是A的条件数很大,所以,Ax=b有唯一解并且矩阵A相对不稳定。所以,我们可以用迭代方法来求解该线性方程组,但是由于A的条件数太大迭代次数一般而言会比较多。 2Jacobi迭代法 Jacobi迭代方法的程序流程图如图所示: 图1:Jacobi迭代方法程序流程图 在上述流程中,取x0=[1,1,...,1]T将精度设为accuracy=10?3,需要误差满足: error= x k+1?x k x k+1

超松弛迭代法求解两点边值问题(二)

超松弛迭代法求解两点边值问题(二) 摘要 本文是在matlab环境下熟悉的运用计算机编程语言并结合超松弛变量超松弛迭代法的理论基础对方程组求解。 首先,本文以微分方程边值问题为例,导出了离散化后线性方程组即稀疏线性方程组,转化对稀疏线性方程组求解问题。其次,用超松弛( SOR) 迭代法编写matlab程序,对产生的稀疏线性方程组进行迭代法求解。然后,分别改变松弛因子ω和分段数n的值,分析其收敛性和收敛速度,做出各个方面的分析和比较得到相关结论。最后,将超松弛迭代算法在计算机上运用matlab语言实现, 得出了一组与精确解较接近的数值解,并画图比较,验证逐次超松弛( SOR) 迭代法的精确性。 关键词:稀疏线性方程组;逐次超松弛迭代法;松弛因子;matlab编程 OVERRELAXATION ITERATIVE METHOD FOR SOLVING TWO-BOUNDARY VALUE PROBLEM(TWO) ABSTRACT This 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)

高斯-赛德尔迭代法解线性方程组精选.

数值分析实验五 班级: 10信计二班 学号:59 姓名:王志桃 分数: 一.实验名称 高斯-赛德尔迭代法解线性方程组 二.实验目的 1. 学会利用高斯赛德尔方法解线性方程组 2. 明白迭代法的原理 3. 对于大型稀疏矩阵方程组适用于迭代法比较简单 三.实验内容 利用Gauss-Seidel 迭代法求解下列方程组 ?????=++=-+=+-36123633111420238321 321321x x x x x x x x x , 其中取→=0)0(x 。 四、算法描述 由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值,若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量)1(+k i x 时,用最新分量)1(1+k x ,???+)1(2k x )1(1-+k i x 代替旧分量)(1k x ,???)(2k x )(1-k i x ,就得到所谓解方程组的Gauss-Seidel 迭代法。 其迭代格式为 T n x x x x )()0()0(2)0(1)0(,,,???= (初始向量), )(11111)()1( ) 1(∑∑-=-+=++--=i j i i j k j ij k j ij i ii i i x a x a b a x )210i 210(n k ???=???=,,,;,,, 或者写为 ?? ???--=???=???==?+=∑∑-=-+=+++)(1)210i 210(1111)( )1()1()()1(i j i i j k j ij k j ij i ii i i i k i k i x a x a b a x n k k x x x ,,,;,,, 五、 编码 #include #include

相关文档
最新文档