六、线性方程组超松弛迭代方法

六、线性方程组超松弛迭代方法
六、线性方程组超松弛迭代方法

1、用谱半径判别超松弛迭代法产生的迭代序列的脸敛散性。

function H=ddpbj(A,om)

D=diag(diag(A));U=-triu(A,1);

L=-tril(A,-1);iD=inv(D-om*L);

B2=iD*(om*U+(1-om)*D);

H=eig(B2);mH=norm(H,inf);

if mH>=1

disp('谱半径不小于1,序列发散,谱半径和特征值如下:')

else

disp('谱半径小于1,序列收敛,谱半径和特征值如下:')

end

mH

>> A=[5 1 -1 -2;2 8 1 3;1 -2 -4 -1;-1 3 2 7];

>> H=ddpbj(A,1.15)

谱半径小于1,序列收敛,谱半径和特征值如下:

mH =

0.1596

H =

0.1049 + 0.1203i

0.1049 - 0.1203i

-0.1295 + 0.0556i

-0.1295 - 0.0556i

>> H=ddpbj(A,5)

谱半径不小于1,序列发散,谱半径和特征值如下:

mH =

14.1082

H =

-14.1082

-2.5107

0.5996 + 2.6206i

0.5996 - 2.6206i

2、超松弛迭代法的程序。

function X=sordd(A,b,X0,P,om,wucha,max1)

D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);dD=det(D);

if dD==0

disp('因为对角矩阵D奇异,所以此方程组无解。')

else

disp('因为对角矩阵D非奇异,所以此方程组有解。')

iD=inv(D-om*L);B2=iD*((1-om)*D+om*U);f2=om*iD*b;jX=A\b;X=X0;

[n m]=size(A);

for k=1:max1

X1=B2*X+f2;djwcX=norm(X1-X,P);

xdwcX=djwcX/(norm(X,P)+eps);

if (djwcX

return

else

k,X1',k=k+1;X=X1;

end

end

if (djwcX

disp('收敛,A的分解矩阵D,U,L和方程组的精确解jX和近似解X如下;') else

disp('没有达到给定的精度,迭代次数超过最大次数,方程组的精确解jX和近似解X如下;')

X=X';jX=jX'

end

end

X=X';D,U,L,jX=jX'

>> A=[5 1 -1 -2;2 8 1 3;1 -2 -4 -1;-1 3 2 7];

>> b=[4;2;6;-3];

>> X0=[0;0;0;0];

>> X=sordd(A,b,X0,inf,1.15,0.00001,10)

因为对角矩阵D非奇异,所以此方程组有解。

k =

1

ans =

0.9200 0.0230 -1.4737 0.1312

k =

2

ans =

0.4981 0.2961 -1.5687 -0.0612

k =

3

ans =

0.3882 0.3834 -1.5809 -0.0894

k =

4

ans =

0.3689 0.3898 -1.5802 -0.0917

k =

5

ans =

0.3694 0.3896 -1.5794 -0.0915

k =

6

ans =

0.3697 0.3893 -1.5793 -0.0913

k =

ans =

0.3698 0.3892 -1.5793 -0.0913

X =

0.3698

0.3892

-1.5793

-0.0913

>> X=sordd(A,b,X0,inf,5,0.00001,10)

因为对角矩阵D非奇异,所以此方程组有解。k =

1

ans =

4.0000 -3.7500 6.8750 -1.0714

k =

2

ans =

-3.5179 18.3594 -83.9565 80.2264

k =

3

ans =

1.0e+003 *

0.0762 -0.2654 0.9868 -1.1096

k =

4

ans =

1.0e+004 *

-0.1268 0.4111 -1.4431 1.5336

k =

5

ans =

1.0e+005 *

0.1721 -0.5769 2.0427 -2.1726

k =

6

ans =

1.0e+006 *

-0.2414 0.8122 -2.8777 3.0672

k =

7

ans =

1.0e+007 *

0.3410 -1.1464 4.0599 -4.3266

k =

ans =

1.0e+008 *

-0.4811 1.6174 -5.7281 6.1040

k =

9

ans =

1.0e+009 *

0.6787 -2.2818 8.0812 -8.6118

k =

10

ans =

1.0e+011 *

-0.0958 0.3219 -1.1401 1.2150

没有达到给定的精度,迭代次数超过最大次数,方程组的精确解jX和近似解X如下; jX =

0.3698 0.3892 -1.5793 -0.0913

D =

5 0 0 0

0 8 0 0

0 0 -4 0

0 0 0 7

U =

0 -1 1 2

0 0 -1 -3

0 0 0 1

0 0 0 0

L =

0 0 0 0

-2 0 0 0

-1 2 0 0

1 -3 -

2 0

jX =

0.3698

0.3892

-1.5793

-0.0913

X =

1.0e+011 *

[-0.0958

0.3219

-1.1401

1.2150]

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

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

实验五 解线性方程组的迭代法 【实验内容】 对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;

研究线性方程组迭代收敛速度

研究解线性方程组迭代收敛速度 一. 实验目的 科学研究与生产实践中许多问题都可归结为线性方程组的求解,高效求解线性方程组成为了许多科学与工程计算的核心.迭代法就是用某种极限过程去逼近线性方程组精确解的方法,该方法具有对计算机的存贮单元需求少,程序计算简单,原始系数矩阵在计算过程中不变等优点,是求解大型稀疏矩阵方程组的重要方法。常用的迭代法有Jacobi 迭代法、Gauss —seidel 迭代法、逐次超松驰法(SOR 法)等。 二. 实验摘要 由迭代法平均收敛速度与渐进收敛速度的关系引入近似估计法,即通过对迭代平均收敛速度取对数,然后利用Mathematica 软件对其进行拟合,给出拟合函数,最终得到了Jacobi 迭代法、Gauss —seidel 法的平均收敛速度收敛到渐进收敛速度的近似收敛阶,以及逐次超松驰法(SOR 法)的渐进收敛速度,且该法适用于其他迭代法收敛速度的估计。 三. 迭代法原理 1.Jacobi 迭代法(J 法) 设方程组b Ax =,其中, n n n n ij R a A ??∈=)(,。n R b x ∈, A 为可逆矩阵,可分裂为,U D L A ++=其中, ??????? ???? ???? ?=-00 00 1 ,21323121 n n n n a a a a a a L ΛO O M M ??????? ????? ??? ?=-00 0,1223 11312n n n n a a a a a a U M O O ΛΛ

??????? ? ???? ??? ?=nn a a a D O O 22 11 从而由b Ax =得到, b D x A D I b D x A D D b D x U L D x 111111)()()(------+-=+-=++-= 令 A D I B J 1--=, b D f J 1-=, 由此可构造出迭代公式:J k J k f x B x +=+)()1( 令初始向量)0,...,0,0()0(=x ,即可得到迭代序列,从而逼近方程组的解 这种方法称为Jacobi 迭代法,其中J B 称为Jacobi 迭代矩阵。 2. Gauss-Seidel 迭代法(GS 法) 与Jacobi 迭代法类似,将方程组b Ax =中的系数矩阵 A 分裂为 ,U D L A ++=,其中U L D ,,与前面相同。 与Jacobi 迭代法所不同的是,Gauss-Seidel 迭代法将Jacobi 迭代公式中的 b Ux Lx Dx k k k +--=+)()()1( 改为 b Ux Lx Dx k k k +--=++)()1()1( 从而b Ax =可写成矩阵形式 b Ux x D L k k +-=++)()1()(, 若设1 )(-+D L 存在,则 b D L Ux D L x k k 1)(1)1()()(--++++-=, 其中, U D L B G 1)(-+-=,b D L f 1)(-+=, 于是Gauss —Seidel 迭代公式的矩阵形式为f x B x k G k +=+)() 1(。

线性方程组迭代解法

实验六:线性方程组迭代解法 1)实验目的 ? 熟悉Matlab 编程; ? 学习线性方程组迭代解法的程序设计算法 2)实验题目 1.研究解线性方程组Ax=b 迭代法收敛速度。A 为20阶五对角距阵 ??????????????? ?????????????????------------------=321 412132141412132141412132141 412132 141213 O O O O O A 要求: (1)选取不同的初始向量x 0 及右端向量b ,给定迭代误差要求,用雅可比迭代和高斯-赛 德尔迭代法求解,观察得到的序列是否收敛?若收敛,记录迭代次数,分析计算结果并得出你的结论。 (2)用SOR 迭代法求解上述方程组,松弛系数ω取1< ω <2的不同值,在 时停止迭代.记录迭代次数,分析计算结果并得出你的结论。 2.给出线性方程组b x H n =,其中系数矩阵n H 为希尔伯特矩阵: ()n n ij n h H ??∈=,.,,2,1,,1n j i j i i h ij Λ=-+= 假设().,1,,1,1*x H b x n n T =?∈=Λ若取,10,8,6=n 分别用雅可比迭代法及SOR 迭代 (5.1,25.1,1=ω)求解,比较计算结果。 3)实验原理与理论基础 1.雅克比(Jacobi )迭代法算法设计: ①输入矩阵a 与右端向量b 及初值x(1,i); ②按公式计算得 ),,2,1(1)(1)1(n i x a b a x k j n i j j ij i ii k i Λ=????? ??-=∑≠=+ 2.高斯――赛得尔迭代法算法设计: 1. 输入矩阵a 与右端向量b 及初值x(1,i).

数值分析大作业 超松弛迭代法如何选取最佳松弛因子

超松弛迭代法如何选取最佳松弛因子 船建学院B1301095 wj 一、课题背景 逐次超松弛迭代法是Gauss-Seidel方法的一种加速方法,是解大型稀疏矩阵方程组的有效方法之一,它具有计算公式简单,程序设计容易,占用计算机内存较少等优点,但需要选择好的加速因子(即最佳松弛因子)。 最佳松弛因子ω的确定是数值代数中的一个理论难题,对于不同的矩阵,其最佳松弛因子往往相差很大,没有统一的计算公式来确定ω。由于对称正定矩阵sor方法收敛的充分必要条件为w在0到2之间,故利用对称正定矩阵一定收敛的性质,本文提供一种针对于系数矩阵为对称正定矩阵时,如何选取合适的最佳松弛因子的方法。 二、课题研究流程图 三、SOR迭代公式 逐次超松弛(Successive Over Relaxation)迭代法,简称SOR迭代法,它是在GS法基础上为提高收敛速度,采用加权平均而得到的新算法,设解方程的GS法记为 (1)

再由与加权平均得 这里ω>0称为松弛参数,将(1)式代入则得 (2) 称为SOR迭代法,[WTBX]ω>0称为松弛因子,当ω=1时(2)式即为GS法,将(2)式写成矩阵形式,则得 即 于是得SOR迭代的矩阵表示 (3) 四、Matlab程序 %sor法确定对称正定矩阵的最佳松弛因子w% clc;clear; n=100; %矩阵的阶数% for num=1:100 X=diag(rand(n,1)); U=orth(rand(n,n)-0.5); a=U'*X*U; %以上是利用随机对角矩阵和随机正交矩阵,产生随机的对称正定矩阵,正交变化不改变特征值% L=zeros(n,n); U=zeros(n,n); %分配L和U的内存空间% step=0.02; %定义w的计算精度% for k=1:(2/step) %由于对称正定矩阵sor方法收敛的充分必要条件为w在0到2之间% w=(k-1)*step; for i=1:n %一个总的for循环给三个矩阵赋值D-L-U=A,% for j=1:i-1 L(i,j)=-a(i,j);%L矩阵的赋值% end for j=i+1:n U(i,j)=-a(i,j);%U矩阵的赋值% end D(i,i)=a(i,i);%D矩阵的赋值% 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,即当两次迭代结果相差不超过ε时停止,这里只得是九点都满足不超过ε,而并不是其中某一点达到即可。这样可以保证不是陷入死循环,从而输出结果。 这样可以画出流程图如下所示:

数值计算_第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)中每个方程的留在方程左边,其余各项移到方程右边;方程两边除以则得到下列同解方程组: 记,构造迭代形式

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

线性方程组的迭代法及程序实现 学校代码: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

线性方程组的迭代解法(Matlab)

第六章线性方程组的迭代解法 2015年12月27日17:12 迭代法是目前求解大规模稀疏线性方程组的主要方法之一。包括定常迭代法和不定常迭代法,定常迭代法的迭代矩阵通常保持不变,包括有雅可比迭代法(Jacobi)、高斯-塞德尔迭代法(Gauss-Seidel)、超松弛迭代法(SOR) 1.雅可比迭代法(Jacobi) A表示线性方程组的系数矩阵,D表示A的主对角部分,L表示下三角部分,U表示上三角部分。 A=D+L+U 要解的方程变为Dx+Lx+Ux=b x=D^(-1)(b-(L+U)x) 所以Jocabi方法如下: Matlab程序 function [x,iter] =jacobi(A,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); x=zeros(size(b)); for iter=1:500 x=D\(b+L*x+U*x); error=norm(b-A*x)/norm(b); if(error

求解线性方程组——超松弛迭代法(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

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

解线性方程组的几种迭代算法

解线性方程组的几种迭代算法 内容摘要: 本文首先总结了分裂法解线性方程组的一些迭代算法,在此基础上分别通过改变系数矩阵A的分裂形式和对SSOR算法的改进提出了两种新的算法,并证明了这两种算法的收敛性.与其它方法相比,通过改变系数矩阵A的分裂形式得到的新算法具有更好的收敛性,改进的SSOR算法有了更快的收敛速度.最后通过数值实例验证了这两种算法在有些情况下确实可以更有效的解决问题. 关键词: 线性方程组迭代法算法收敛速度 Several kinds of solving linear equations iterative algorithm Abstract: In this paper, we firstly summarize some Iterative algorithms of Anti-secession law solution of linear equations. Based on these, two new algorithms are put forward by changing the fission form of coefficient matrix A and improving the algorithm of SSOR, and the convergence of the two algorithms is demonstrated. Compared with other methods, the new algorithm acquired by changing the fission form of coefficient matrix A is possessed of a better convergence. And the improved SSOR algorithm has a faster convergence speed. Finally, some numerical examples verify that the two algorithms can solve problems more effectively in some cases. Key words: Linear equations Iteration method algorithm Convergence speed

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

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

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

一. 问题描述 用Gauss-Seidel 迭代法求解线性方程组 由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值。使用了两倍的存储空间,浪 费了存储空间。若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量) 1(+k i x 时, 用最新分量) 1(1 +k x ,???+) 1(2 k x ) 1(1 -+k i x 代替旧分量)(1k 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(,,,???= (初始向量), )(1111 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 ,,,;,,, 三. 程序框图

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

超松弛迭代法求解两点边值问题(二) 摘要 本文是在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)

线性方程组的直接法和迭代法

线性方程组的直接法 直接法就是经过有限步算术运算,无需迭代可直接求得方程组精确解的方法。 线性方程组迭代法 迭代法就是用某种极限过程去逐步逼近线性方程组精确解的方法.该方法具有对计算机的存贮单元需求少,程序设计简单、原始系数矩阵在计算过程中不变等优点,是求解大型稀疏矩阵方程组的重要方法.迭代法不是用有限步运算求精确解,而是通过迭代产生近似解逼近精确解.如Jacobi 迭代、Gauss — Seidel 迭代、SOR 迭代法等。 1. 线性方程组的直接法 直接法就是经过有限步算术运算,无需迭代可直接求得方程组精确解的方法。 1.1 Cramer 法则 Cramer 法则用于判断具有n 个未知数的n 个线性方程的方程组解的情况。当方程组的系数行列式不等于零时,方程组有解且解唯一。如果方程组无解或者有两个不同的解时,则系数行列式必为零。如果齐次线性方程组的系数行列式不等于零,则没有非零解。如果齐次线性方程组有非零解,则系数行列式必为零。 定理1如果方程组Ax b =中0D A =≠,则Ax b =有解,且解事唯一的,解为1212,,...,n n D D D x x x D D D ===i D 是D 中第i 列换成向量b 所得的行列式。 Cramer 法则解n 元方程组有两个前提条件: 1、未知数的个数等于方程的个数。 2、系数行列式不等于零 例1 a 取何值时,线性方程组

1231231 2311x x x a ax x x x x ax ++=??++=??++=?有唯一解。 解:2111111 11011(1)11001 A a a a a a a ==--=--- 所以当1a ≠时,方程组有唯一解。 定理2当齐次线性方程组0Ax =,0A ≠时该方程组有唯一的零解。 定理3齐次线性方程组0Ax =有非零解0A <=>=。 1.2 Gauss 消元法 Gauss 消元法是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。 1.2.1 用Gauss 消元法为线性方程组求解 eg :Gauss 消元法可用来找出下列方程组的解或其解的限制: ()()()123283211223x y z L x y z L x y z L +-=??--+=-??-++=-? 这个算法的原理是:首先,要将1L 以下的等式中的x 消除,然后再将2L 以下的等式中的y 消除。这样可使整个方程组变成一个三角形似的格式。之后再将已得出的答案一个个地代入已被简化的等式中的未知数中,就可求出其余的答案了。 在刚才的例子中,我们将132 L 和2L 相加,就可以将2L 中的x 消除了。

迭代法解线性方程组(C语言描述)

用Gauss-Seidel迭代法解线性方程组的C语言源代码:#include #include #include struct Line{ int L; struct Row *head; struct Line *next; }; struct Row{ int R; float x; struct Row *link; }; //建立每次迭代结果的数据存储单元 struct Term{ float x; float m; }; struct Line *Create(int Line,int Row){ struct Line *Lhead=NULL,*p1=NULL,*p2=NULL; struct Row*Rhead=NULL,*ptr1,*ptr2=NULL; int i=1,j=1; float X; while(i<=Line){ while(j<=Row+1){ scanf("%f",&X); if(X!=0||j==Row+1){ ptr1=(struct Row*)malloc(sizeof(Row)); if(ptr1==NULL){ printf("内存分配错误!\n"); exit(1); } ptr1->x=X; ptr1->R=j; if(ptr2==NULL){ ptr2=ptr1; Rhead=ptr1; } else{

ptr2->link=ptr1; ptr2=ptr1; } } j++; } if(ptr2!=NULL){ ptr2->link=NULL; ptr2=NULL; } if(Rhead!=NULL){ p1=(struct Line*)malloc(sizeof(Line)); if(p1==NULL){ printf("内存分配错误!\n"); exit(1); } p1->L=i; p1->head=Rhead; if(p2==NULL){ Lhead=p1; p2=p1; } else{ p2->next=p1; p2=p1; } } i++; Rhead=NULL; j=1; } if(p2!=NULL) p2->next=NULL; return Lhead; } struct Line *Change(struct Line*Lhead,int n){ struct Line*p1,*p2,*p3,*p; struct Row*ptr; int i=1,k,j; float max,t; if(Lhead==NULL){ printf("链表为空!\n");

相关文档
最新文档