搜档网
当前位置:搜档网 › #数学实验“线性方程组的J-迭代,GS-迭代,SOR-迭代解法”实验报告(内含matlab程序代码)

#数学实验“线性方程组的J-迭代,GS-迭代,SOR-迭代解法”实验报告(内含matlab程序代码)

#数学实验“线性方程组的J-迭代,GS-迭代,SOR-迭代解法”实验报告(内含matlab程序代码)
#数学实验“线性方程组的J-迭代,GS-迭代,SOR-迭代解法”实验报告(内含matlab程序代码)

西京学院数学软件实验任务书

课程名称数学软件实验班级数0901 学号0912020107 姓名李亚强

实验课题线性方程组的J-迭代,GS-迭代,SOR-迭代方法。

实验目的

熟悉线性方程组的J-迭代,GS-迭代,SOR-迭代方法。

实验要求运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成。

实验内容线性方程组的J-迭代;线性方程组的GS-迭代;线性方程组的SOR-迭代。

成绩教师

实验四实验报告

一、实验名称:线性方程组的J-迭代,GS-迭代,SOR-迭代。 二、实验目的:熟悉线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法,编程实现雅可比方法和高斯-赛德尔方法求解非线

性方程组121231

235210

64182514

x x x x x x x x +=??++=??++=-?的根,提高matlab 编程能力。

三、实验要求:已知线性方程矩阵,利用迭代思想编程求解线性方程组的解。 四、实验原理:

1、雅可比迭代法(J-迭代法):

线性方程组b X A =*,可以转变为:

迭代公式(0)(1)()

k 0,1,2,....k k J X

X

B X f +???=+=?? 其中b M f U L M A M I B J 111),(---=+=-=,称J B 为求解

b X A =*的雅可比迭代法的迭代矩阵。以下给出雅可比迭代的

分量计算公式,令),....,()()(2)(1)(k n k k k X X X X =,由雅可比迭代公式有

b X

U L MX

k k ++=+)

()

1()(,既有i n

i j k i ij

i j k i

ij k i

ij b X a

X

a X a +-

-=∑∑+=-=+1

)(1

1

)()

1(,于

是,解b X A =*的雅可比迭代法的计算公式为

??

???--==∑∑-=+=+)(1),....,(111)

()()1()0()0(2)0(1)0(i j n i j k j ij k j ij i ii k i

T

n X a X a b a X X X X X 2、 高斯-赛德尔迭代法(GS-迭代法):

GS-迭代法可以看作是雅可比迭代法的一种改进,给出了

迭代公式:??

???--==∑∑-=+=+++)(1),....,(111)1()1()1()0()0(2)0(1)0(i j n i j k j ij k j ij i ii k i

T

n X a X a b a X X X X X 其余部分和雅克比迭代类似。 3、逐次超松弛迭代法(SOR-迭代法):

选取矩阵A 的下三角矩阵分量并赋予参数w ,将之作为分裂矩阵M ,)(1

wL D w

M -=

,其中,w>0,为可选择的松弛因子,又(1)公式构造一个迭代法,其迭代矩阵为A wL D w I B s 1)(---≡从而得到解b X A =*的逐次超松弛迭代法。

(0)(1)()

k 0,1,2,....k k s X

X

B X f +???=+=?? 其中:

b

wL D w f wU D w wL D B s 1

1)())1(()(---=+--=

由此,解b X A =*的SOR-迭代法的计算公式为

??

???--+==∑∑-=+=+++)(),....,(111)1()1()()1()0()0(2)0(1)0(i j n i j k j ij k j ij i ii k i k i

T

n X a X a b a w X X X X X X (2) 观察(2)式,可得结论:

(1)、当w=1时,SOR-迭代法为J-迭代法。

(2)、当w>1时,称为超松弛迭代法,当w<1时,称为低松弛迭代法。

五、实验内容:

%1.J-迭代

function x1=jacobi(A,b,y);

m=input('请输入迭代次数m:');

eps=input('请输入精度eps:');

D=diag(diag(A));

L=triu(A)-A;

U=tril(A)-A;

M=D\(L+U);

g=D\b;

a=1;

k=0;

while a>eps

x2=M*x1+g;

a=norm(x2-x1,inf);

x1=x2;

k=k+1;

end

%输出方程组的近似解、精确值及误差

disp('近似解:');

disp(x1);

x2=x1-y;

a=norm(x2,inf);

fprintf('误差:%.6f;迭代次数:%d\n',a,k); %2.GS-迭代

function x1=G_S(A,b,y)

n=100;

m=input('请输入迭代次数m:');

eps=input('请输入精度eps:');

D=diag(diag(A));

L=triu(A)-A;

U=tril(A)-A;

%生成矩阵M,向量g

M=(D-L)\U;

g=(D-L)\b;

%迭代首项

x1=eye(n-1,1);

x2=eye(n-1,1);

for i=1:n-1

x1(i)=1;

x2(i)=0;

end

a=1;

k=0;

while a>eps

x2=M*x1+g;

a=norm(x2-x1,inf);

x1=x2;

k=k+1;

end

%输出方程组的近似解、精确值及误差disp('近似解:');

x2=x1-y;

a=norm(x2,inf);

fprintf('误差:%.4f;迭代次数:%d\n',a,k); %3.SOR-迭代

function a=p(A)

[n,n]=size(A);

x=eig(A);

a=0;

for i=1:n

b=abs(x(i));

if b>a

a=x(i);

end

end

a=abs(a);

function x1=SOR(A,b,y) %y为精确解

%超松弛迭代

D=diag(diag(A));

L=triu(A)-A;

U=tril(A)-A;

%求最佳松弛因子w

M=D\(L+U);

w=p(M);

w=2/(1+sqrt(1-w^2));

if w<0||w>2

disp('迭代不收敛'); return;

end

%生成矩阵M,向量g

M=(D-w*L)\((1-w)*D+w*U); g=(D-w*L)\b*w;

%进行迭代

w=1;

k=0;

%x1=eye(n,1);

while w>1e-6

x2=M*x1+g;

w=norm(x2-x1,inf); x1=x2;

k=k+1;

end

%输出方程组的近似解、精确值及误差

disp('近似解:');

disp(x1);

x2=x1-y;

w=norm(x2,inf);

disp('误差:');

disp(w);

disp('迭代次数:');

disp(k);

六、实验结果:

A=[5 2 0;6 4 1;1 2 5];b=[10 18 -14]';

X1= G_S (A,b,[0 0 0]')

X1 =

-0.8750

7.1874

-5.5000

MAAB计算方法迭代法牛顿法二分法实验报告

姓名 实验报告成绩 评语: 指导教师(签名) 年 月 日 说明:指导教师评分后,实验报告交院(系)办公室保存。 实验一 方程求根 一、 实验目的 用各种方法求任意实函数方程0)(=x f 在自变量区间[a ,b]上,或某一点附近的实根。并比较方法的优劣。 二、 实验原理 (1)、二分法 对方程0)(=x f 在[a ,b]内求根。将所给区间二分,在分点 2a b x -=判断是否0)(=x f ;若是,则有根2a b x -=。否则,继续判断是否0)()(

+)(0x f 0))(('0=-x x x f 设0)('0≠x f ,则=x -0x )(') (00x f x f 。取x 作为原方程新的近似根1x ,然后将1x 作为0x 代入上式。迭代公式为:=+1 k x -0x )(')(k k x f x f 。 三、 实验设备:MATLAB 软件 四、 结果预测 (1)11x = (2)5x = (3)2x =0,09052 五、 实验内容 (1)、在区间[0,1]上用二分法求方程0210=-+x e x 的近似根,要求误差不超 过3105.0-?。 (2)、取初值00=x ,用迭代公式=+1 k x -0x )(') (k k x f x f ,求方程0210=-+x e x 的近似根。要求误差不超过3105.0-?。 (3)、取初值00=x ,用牛顿迭代法求方程0210=-+x e x 的近似根。要求误差 不超过3105.0-?。 六、 实验步骤与实验程序 (1) 二分法 第一步:在MATLAB 软件,建立一个实现二分法的MATLAB 函数文件如下: function x=agui_bisect(fname,a,b,e) %fname 为函数名,a,b 为区间端点,e 为精度 fa=feval(fname,a); %把a 端点代入函数,求fa fb=feval(fname,b); %把b 端点代入函数,求fb if fa*fb>0 error('两端函数值为同号'); end

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

研究解线性方程组迭代收敛速度 一. 实验目的 科学研究与生产实践中许多问题都可归结为线性方程组的求解,高效求解线性方程组成为了许多科学与工程计算的核心.迭代法就是用某种极限过程去逼近线性方程组精确解的方法,该方法具有对计算机的存贮单元需求少,程序计算简单,原始系数矩阵在计算过程中不变等优点,是求解大型稀疏矩阵方程组的重要方法。常用的迭代法有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).

用SOR迭代法

一、数值求解如下正方形域上的Poisson 方程边值问 二、2222(,)2,0,1 (0,)(1,)(1),01(,0)(,1)0, 01u u f x y x y x y u y u y y y y u x u x x ??? ??-+==<

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

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

数值计算_第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

迭代法实验报告

迭代法实验报告 一. 实验目的:掌握迭代方法的用处 二. 实验环境:Cfree5.0 三. 实验时间:2013年6月20日 四. 实验地点:电子信息楼1201教室 五. 实验内容:运用编程实现迭代方法可以更好的解线性方程组,得到线性方程的解。 六. 实验理论依据: 高斯-赛德尔(Gauss-Seidel )迭代公式 我们注意到在雅可比迭代法中并没有对新算出的分量11k x +,12k x +, , 11k i x +-进行充分利用.不妨设想,在迭代收敛的条件下,我们把 (1)()()()11211331111(1)()()()22112332222(1)()()()1122,111()1(1(k k k k n n k k k k n n k k k k n n n n n n nn x a x a x a x b a x a x a x a x b a x a x a x a x b a +++--?=---+???=---+?????=---+?? 式中第一个方程算出的11k x +立即投入到第二个方程中,代替()1k x 进行计算,当12 k x +算出后代替()2k x 马上投入到第三个方程中计算,依次进行下去,这样也许会得到 更好的收敛效果.根据这种思路建立的一种新的迭代格式,我们称为高斯-赛德尔(Gauss-Seidel )迭代公式, 高斯=赛德尔迭代法的分量形式:

(1)()()()11211331111(1)(1)()()22112332222(1)(1)(1)(1)1122,111()1(1(k k k k n n k k k k n n k k k k n n n n n n nn x a x a x a x b a x a x a x a x b a x a x a x a x b a +++++++--?=---+???=---+?????=---+?? 高斯-赛德尔迭代法的矩阵形式: (1)(),(0,1,2,)k k x Bx f k +=+= 其中 1()B D L U -=- ,1()f D L b -=- B 称为高斯-赛德尔迭代矩阵,f 称为高斯-赛德尔迭代常量.. 七. 运行代码如下: #include"stdio.h" #include"math.h" int main() { bool pan1=true; int n,n1,n2=0,k=0; double num[100][100],L[100][100],U[100][100],x[100],y[100],num1=0,b[100],D[100][100],x1[200][200],x2[200][200]; printf("\n"); printf("*******************************高斯迭代法解如下********************************"); printf("输入要输入矩阵的阶数为(按Enter 输入矩阵数字):");//

线性方程组的迭代解法(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

解线性方程组基本迭代法实验(ca)

Lab .解线性方程组的基本迭代法实验 【实验目的和要求】 1.使学生深入理解Jacobi 迭代法、Gauss-Seidel 迭代法和SOR 迭代法; 2.通过对Jacobi 迭代法、Gauss-Seidel 迭代法和SOR 迭代法的程序设计,以提高学生程序设计的能力; 3.应用编写的程序解决具体问题,掌握三种基本迭代法的使用,通过结果的分析了解每一种迭代法的特点。 【实验内容】 1.根据Matlab 语言特点,描述Jacobi 迭代法、Gauss-Seidel 迭代法和SOR 迭代法。 2.编写Jacobi 迭代法、Gauss-Seidel 迭代法和SOR 迭代法的M 文件。 3.给定2020?∈R A 为五对角矩阵 ??????????????? ???????????????? ?---- -------- ------ 32 141213214 141213214141213214 141213 2141213 (1)选取不同的初始向量)0(x 及右端面项向量b ,给定迭代误差要求,分别用编写Jacobi 迭代 法和Gauss-Seidel 迭代法程序求解,观察得到的序列是否收敛?若收敛,通过迭代次数分析 计算结果并得出你的结论。 (2)用编写的SOR 迭代法程序,对于(1)所选取的初始向量) 0(x 及右端面项向量b 进行求解,松驰系数ω取1<ω<2的不同值,在5 )1()(10-+≤-k k x x 时停止迭代,通过迭代次数分析计算结果 并得出你的结论。 【实验仪器与软件】 1.CPU 主频在1GHz 以上,内存在128Mb 以上的PC ; 2.Matlab 6.0及以上版本。 实验讲评:

牛顿迭代法实验报告

用牛顿迭代法求非线性方程的根 一、 实验题目 求方程()013=--=x x x f 在5.1附近的根。 二、 实验引言 (1)实验目的 1. 用牛顿迭代法求解方程的根 2. 了解迭代法的原理 3. 改进和修缮迭代法 (2)实验意义 牛顿迭代法就是众多解非线性方程迭代法中比较普遍的一种,求解方便实用。 三、 算法设计 (1)基本原理 给定初始值0x ,ε为根的容许误差,η为()x f 的容许误差,N 为迭代次数的容许值。 1.如果()0='x f 或迭带次数大于N ,则算法失败,结束;否则执行2. 2.计算()() 0001x f x f x x '-=. 3.若ε<-21x x 或()η<1x f ,则输出1x ,程序结束;否则执行4. 4.令10x x =,转向1. (2)流程图

四、程序设计program nndd01 implicit none real,parameter::e=0.005 real,parameter::n=9 real::x1 real::x0=1.5 integer::k real,external::f,y do k=1,9 if (y(x0)==0) then write(*,*)"失败" else x1=x0-f(x0)/y(x0) if (abs(x1-x0)

else x0=x1 end if end if end do end function f(x) implicit none real::f real::x f=x*x*x-x-1 return end function function y(x) implicit none real::y real::x y=3*x*x-1 return end function 五、求解结果 3 1.324718 4 1.324718 5 1.324718 6 1.324718 7 1.324718 8 1.324718 9 1.324718 六、算法评价及讨论 1.在求解在1.5处附近的根,不难发现在输入区间左端值为1时 需要迭代6次,而输入区间左端值为1.5时,却只要4次。初

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

数值实验报告

数值实验报告五 班级:2017级学号:**** 姓名:*** 2017.12.5 1.数值实验问题 试用雅可比迭代法,高斯-赛德尔迭代法,超松驰迭代计算线性方程组: 取=(0,0,0,松弛因子分别取w=0.1t,1要求达到精度 。试通过数值计算得出不同的松弛因子所需要的迭代次数和收敛最快的松弛因子,并指出哪些松弛因子使得迭代发散。 2.数值方法 A=, L=-, U=-, D=diag() (1)雅可比迭代公式:

D. (2)高斯-赛德尔迭代法公式: (3)超松驰迭代方法公式: 其中w为松弛因子。 3.数值结果 如下表

最后四组,测得其在前10次内迭代所产生的结果,其中每一列为一

次迭代结果,分别如图: SOR-1.6 SOR-1.7 SOR-1.8 SOR-1.9 由于计算数据限制,其前五十列数据基本为空,所以取51到60列

由此看出,最后四组数据是发散的,数据结果不稳定,不收敛。所以最后四组得不到所需数据。 4.讨论 本次实验,分别用雅可比迭代公式,高斯-赛德尔迭代公式,超松驰迭代公式计算了此线性方程组。其中,雅可比和高斯迭代能够很好的进行运算,而超松驰迭代方法中,若松弛因子取得不够恰当,则会导致整个运算失败,得不到所需的结果,迭代不收敛,发散。此外,在进行初始值的赋值中,我是对每个矩阵都进行了赋值操作,而更简便的是,调用matlab中存在的函数,对矩阵进行运算,从而简化操作和代码,也使程序适用性更广。 程序代码: 1.雅可比迭代 function [x]=yakebi(D,L,U,b,j) format long B=D\(L+U);

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 ,,,;,,, 三. 程序框图

牛顿迭代法的实验报告

牛顿迭代法实验报告 1.功能 本程序采用牛顿法,求实系数高次代数方程 f(x)=a0x n+a1x n-1+…+a n-1x+a n=0(a n≠0)(1) 的在初始值x0附近的一个根。 2.使用说明 (1)函数语句 Y=NEWTON_1(A,N,X0,NN,EPS1) 调用M文件newton_1.m。 (2)参数说明 A n+1元素的一维实数组,输入参数,按升幂存放方程系数。 N整变量,输入参数,方程阶数。 X0 实变量,输入参数,初始迭代值。 NN整变量,输入参数,允许的最大迭代次数。 EPS1实变量,输入参数,控制根的精度。 3.方法简介 解非线性议程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数 f(x)=f(x0)+(x-x0)fˊ(x0)+(x-x0)2 !2) (0x f'' +… 取其线性部分,作为非线性方程f(x)=0的近似方程,则有 f(x0)+fˊ(x0)(x-x0)=0 设fˊ(x0)≠0则其解为 x1=x0-f(x0)/fˊ(x0) 再把f(x)在x1附近展开成泰勒级数,也取其线性部分作f(x)=0的近似方程。若f(x1)≠0,则得 x2=x1-f(x1)/fˊ(x1) 这样,得到牛顿法的一个迭代序列 x n+1=x n-f(x n)/fˊ(x n) 4.newton_1.m程序

function y=newton_1(a,n,x0,nn,eps1) x(1)=x0; b=1; i=1; while(abs(b)>eps1*x(i)) i=i+1; x(i)=x(i-1)-n_f(a,n,x(i-1))/n_df(a,n,x(i-1)); b=x(i)-x(i-1); if(i>nn)error(ˊnn is fullˊ); return; end end y=x(i); i 5.程序附注 (1)程序中调用n_f.m和n_df.m文件。n_f.m是待求根的实数代数方程的函数,n_df.m 是方程一阶导数的函数。由使用者自己编写。 (2)牛顿迭代法的收敛速度:如果f(x)在零点附近存在连续的二阶微商,ξ是f(x)的一个重零点,且初始值x0充分接近于ξ,那么牛顿迭代是收敛的,其收敛速度是二阶的,即平方收敛速度。 6.例题 用牛顿法求下面方程的根 f(x)=x3+2x2+10x-20 7.运行结果 >>a=[1,2,10,-20] ; >>n=3; >>x0=1; >>nn=1000; >>eps1=1e-8; >>y=newton_1(a,n,x0,nn,eps1)

数学实验“线性方程组的J-迭代,GS-迭代,SOR-迭代解法”实验报告(内含matlab程序代码)

西京学院数学软件实验任务书 课程名称数学软件实验班级数0901 学号0912020107 姓名李亚强 实验课题线性方程组的J-迭代,GS-迭代,SOR-迭代方法。 实验目的 熟悉线性方程组的J-迭代,GS-迭代,SOR-迭代方法。 实验要求运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成。 实验内容线性方程组的J-迭代;线性方程组的GS-迭代;线性方程组的SOR-迭代。 成绩教师

实验四实验报告 一、实验名称:线性方程组的J-迭代,GS-迭代,SOR-迭代。 二、实验目的:熟悉线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法,编程实现雅可比方法和高斯-赛德尔方法求解非线 性方程组121231 235210 64182514 x x x x x x x x +=?? ++=??++=-?的根,提高matlab 编程能力。 三、实验要求:已知线性方程矩阵,利用迭代思想编程求解线性方程组的解。 四、实验原理: 1、雅可比迭代法(J-迭代法): 线性方程组b X A =*,可以转变为: 迭代公式(0)(1)() k 0,1,2,....k k J X X B X f +???=+=?? 其中b M f U L M A M I B J 111),(---=+=-=,称J B 为求解 b X A =*的雅可比迭代法的迭代矩阵。以下给出雅可比迭代的 分量计算公式,令),....,() ()(2)(1)(k n k k k X X X X =,由雅可比迭代公式 有 b X U L MX k k ++=+) () 1()(,既有i n i j k i ij i j k i ij k i ij b X a X a X a +- -=∑∑+=-=+1 )(1 1 )() 1(, 于

MATLAB计算方法迭代法牛顿法二分法实验报告

姓名 ______________ 实验报告成绩 ________________________ 评语: 指导教师(签名) ___________________ 年月日 说明:指导教师评分后,实验报告交院(系)办公室保存。 实验一方程求根 一、实验目的 用各种方法求任意实函数方程f(x)0在自变量区间[a,b]上,或某一点附 近的实根。并比较方法的优劣。 二、实验原理 (1)、二分法 b a x 对方程f(x)0在[a,b]内求根。将所给区间二分,在分点2判断 b a x --------- 是否f(x)0;若是,则有根2。否则,继续判断是否f(a)?f(x) 0,若是,则令b x,否 则令a x。否则令a x。重复此过程直至求出方程f(x) °在[a,b]中的近似根为止。 (2)、迭代法 将方程f(x) °等价变换为x=? ( x)形式,并建立相应的迭代公式xk 1 9( x)。 (3)、牛顿法 若已知方程的一个近似根x°,则函数在点x°附近可用一阶泰勒多项式 P l(x) f(X°) f'(X0)(X X。)来近似,因此方程f(x) °可近似表示为

if fa*fb>0 error(' 两端函数值为同号'); f (X k ) 3 不超过 0.5 10 。 六、实验步骤与实验程序 (1)二分法 第一步:在MATLAB 7.0软件,建立一个实现二分法的 MATLABS 数文件 agui_bisect.m 女口下: fun cti on x=agui_bisect(fname,a,b,e) %fname 为函数名,a,b 为区间端点,e 为精度 fa=feval(fname,a); % 把a 端点代入函数,求fa fb=feval(fname,b); % 把b 端点代入函数,求fb f (X k ) 根X1,然后将X1作为X 。代入上式。迭代公式为: X k 1 X 0 f'(X k ) o f (X o ) f(X o ) f ' (Xo)(X X )0设f'(X o ) 0,则x X o f '(X o )。取x 作为原方程新的近似 实验设备: MATLAB 7.0 软 件 三、 四、 结果预测 (1) x n=0.09033 (2) X5=0.09052 (3) X 2 =0,09052 五、 实验内容 (1)、 在区间[0,1] 上用二分法求方程 10X 2 0的近似根,要求误差不超 过 05 103 O (2)、 x ° 似根。 取初值X0 0 ,用迭代公式Xk 1 3 要求误差不超过0.5 10。 x ° f '(Xk) ,求方程e x 10x 2 0的近 (3)、 取初值X0 0 ,用牛顿迭代法求方程 e X 10x 2 0的近似根。要求误差

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 ?? ? ?= ? ???

数值分析实验报告-Sor法分析

数值分析实验报告 一、 实验目的 1、会使用Sor 法求解一个线性方程组 2、熟悉matlab 语言并结合原理编程求方程组 3、改变ω的值观察实验结果 4、会分析实验结果 二、实验题目 编制Sor 迭代格式程序进行求解一个线性方程组的迭代计算情况,运行中要选用不同的松弛因子ω进行尝试 三、 实验原理 Jacobi 迭代和seidel 迭代对具体的线性方程组来说,逼近*x 的速度是固定不变的,遇到收敛很慢的情况时就显得很不实用。 Sor 法是一seidel 迭代为基础,并在迭代中引入参数ω以增加迭代选择的灵活性,具体为: ! 用seidel 迭代算出的,)()1()()1(k k J k k J x x x x x -=?++相减得到差向量与再用参数ω乘之再加上 )1()()()1()1()()()1(++++-=?+=k J k k k k k k x x x x x x x x ωωω,即的下一步迭代作为,由seidel 迭代的公式可以得到Sor 法的迭代格式为 n i x a x a b a x x k j n i j ij k j i j ij i ii k i k i ,2,1),()1()(1)1(11)()1( =--+-=∑∑+=+-=+ω ω 式中ω称为松弛因子。 四、 实验内容 用matlab 编程得到Sor 法求线性方程组的算法为: function [x,n]=SOR(A,b,x0,w,eps,M) if nargin==4

eps= ; 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) (

相关主题