迭代法解线性方程组-数值分析实验报告
迭代法解线性方程组数值分析实验报告

迭代法解线性方程组数值分析实验报告一、实验目的本次实验旨在深入研究和掌握迭代法求解线性方程组的基本原理和方法,并通过数值实验分析其性能和特点。
具体目标包括:1、理解迭代法的基本思想和迭代公式的推导过程。
2、掌握雅克比(Jacobi)迭代法、高斯赛德尔(GaussSeidel)迭代法和超松弛(SOR)迭代法的算法实现。
3、通过实验比较不同迭代法在求解不同类型线性方程组时的收敛速度和精度。
4、分析迭代法的收敛性条件和影响收敛速度的因素。
二、实验原理1、线性方程组的一般形式对于线性方程组$Ax = b$,其中$A$ 是$n×n$ 的系数矩阵,$x$ 是$n$ 维未知向量,$b$ 是$n$ 维常向量。
2、迭代法的基本思想迭代法是从一个初始向量$x^{(0)}$出发,按照某种迭代公式逐步生成近似解序列$\{x^{(k)}\}$,当迭代次数$k$ 足够大时,$x^{(k)}$逼近方程组的精确解。
3、雅克比迭代法将系数矩阵$A$ 分解为$A = D L U$,其中$D$ 是对角矩阵,$L$ 和$U$ 分别是下三角矩阵和上三角矩阵。
雅克比迭代公式为:$x^{(k+1)}= D^{-1}(b +(L + U)x^{(k)})$。
4、高斯赛德尔迭代法在雅克比迭代法的基础上,每次计算新的分量时立即使用刚得到的最新值,迭代公式为:$x_i^{(k+1)}=(b_i \sum_{j=1}^{i-1}a_{ij}x_j^{(k+1)}\sum_{j=i+1}^{n}a_{ij}x_j^{(k)})/a_{ii}$。
5、超松弛迭代法在高斯赛德尔迭代法的基础上引入松弛因子$\omega$,迭代公式为:$x_i^{(k+1)}= x_i^{(k)}+\omega((b_i \sum_{j=1}^{i-1}a_{ij}x_j^{(k+1)}\sum_{j=i}^{n}a_{ij}x_j^{(k)})/ a_{ii} x_i^{(k)})$。
解线性方程组的迭代法数值计算上机实习报告

解线性方程组的迭代法数值计算上机实习报告一.综述:考虑用迭代法求解线性方程组,取真解为,初始向量取为零,以范数为度量工具,取误差指标为.其中。
分别完成下面各小题:第六题:编制程序实现Jacobi迭代方法和Gauss-Seidel 方法。
对应不同的停机标准(例如残量,相邻误差,后验误差停机标准),比较迭代次数以及算法停止时的真实误差。
其中残量准则:、相邻误差准则:后验误差停机准则:解:为了结果的可靠性,这里我分别对矩阵阶数为400、2500、10000进行试验,得到对应不同的方法、取不同的停机标准,迭代次数和真实误差的数据如下:分析上面数据可知,对应不同的停机标准,GS方法的迭代次数都近似为J方法的一半,这与理论分析一致。
而且从迭代次数可以看出,在这个例子中,作为停机标准,最强的依次为后验误差,再到残量,再到相邻误差。
第七题:编写程序实现SOR 迭代方法。
以真实误差作为停机标准,数值观测SOR 迭代方法中松弛因子对迭代次数的影响,找到最佳迭代因子的取值。
解:本题中考虑n=50,即对2500阶的矩阵A。
由于我们已经知道要使SOR方法收敛,松弛因子需要位于。
下面来求SOR方法中对应的最佳松弛因子。
应用筛选法的思想,第一次我们取松弛因子,间距为0.05,得到的对应的图像如下,从图中可以看出迭代次数随着的增大,先减小后变大,这与理论相符。
同时可以看出最佳松弛因子.第二次将区间细分为10份,即取,可得下面第二幅图像,从图像中可以看出最佳松弛因子第八题:对于J 方法,GS方法和(带有最佳松弛因子的)SOR 方法,分别绘制误差下降曲线以及残量的下降曲线(采用对数坐标系),绘制(按真实误差)迭代次数与矩阵阶数倒数的关系;解:对于J方法,考虑n=50时,采用相邻误差为迭代的终止条件,误差下降曲线及残量的下降曲线如下:对于GS方法,考虑n=50的时候,采用相邻误差作为迭代的终止条件,所得到的残量和误差的下降曲线如下图:从中可以看出,当相邻误差满足误差指标时,真实误差却并不小于误差指标,而为2.6281e-04。
数值方法迭代法解线性方程组实验报告

附录1:源程序
附录2:实验报告填写说明
1.实验项目名称:要求与实验教学大纲一致。
2.实验目的:目的要明确,要抓住重点,符合实验教学大纲要求。
3.实验原理:简要说明本实验项目所涉及的理论知识。
4.实验环境:实验用的软、硬件环境。
5.实验方案(思路、步骤和方法等):这是实验报告极其重要的内容。
概括整个实验过程。
对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。
对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明。
对于创新性,还应注明其创新点、特色。
6.实验过程(实验中涉及的记录、数据、分析):写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析。
7.实验结论(结果):根据实验过程中得到的结果,做出结论。
8.实验小结:本次实验心得体会、思考和建议。
9.指导教师评语及成绩:指导教师依据学生的实际报告内容,给出本次实验报告的评价。
数值分析实验报告--解线性方程组的迭代法及其并行算法

disp('请注意:高斯-塞德尔迭代的结果没有达 到给定的精度,并且迭代次数已经超过最大迭 代次数max1,方程组的精确解jX和迭代向量X 如下: ') X=X';jX=jX' end end X=X';D,U,L,jX=jX'
高斯-塞德尔的输入为:
A=[10 2 3;2 10 1;3 1 10]; b=[1;1;2]; X0=[0 0 0]'; X=gsdddy(A,b,X0,inf, 0.001,100) A=[10 2 3;2 10 1;3 1 10]; 请注意:因为对角矩阵 D 非奇异,所以此方程组有解.
0.0301 0.0758 0.1834
8.心得体会:
这已经是第三次实验了, 或多或少我已经对 MATLAB 有了更多的了 解与深入的学习。通过这次实验我了解了雅可比迭代法和高斯- 塞德尔迭代法的基本思想,虽然我们不能熟练编出程序,但还是 能看明白的。运行起来也比较容易,让我跟好的了解迭代法的多 样性,使平常手算的题能得到很好的验证。通过这次实验让我对 MATLAB 又有了更深一层的认识,使我对这门课兴趣也更加浓厚。
运行雅可比迭代程序输入: A=[10
b=[1;1;2];X0=[0 0 0]'; X=jacdd(A,b,X0,inf,0.001,100)
2 3;2 10 1;3 1 10];
结果为:
k= 1 X=
0.1000 k= 2 X= 0.0200 k= 3 X= 0.0400 k= 4 X= 0.0276 k= 5 X= 0.0314 k= 6 X= 0.0294 k= 7 X= 0.0301 k= 8 X= 0.0297
6、 设计思想:先化简,把对角线的项提到左边,其它项
实验3 线性方程组的数值解—迭代法1

实验3 线性方程组数值解-迭代法一、实验目的:掌握Jaccobi 迭代法、Guass-Sidel 迭代法、松弛法求解线性方程组的数值解。
二、实验内容:1.1题目分别用雅格比法与高斯-赛德尔迭代法解下列方程组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.2原理和思路1.2.1 基本原理(1)Jacobi 迭代法设有n 阶方程组A x=b ,若系数矩阵非奇异,且0≠ii a (i = 1, 2,…, n ),将方程组改写成同解方程组:()()()⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧----=----=----=--11,221112323122221213132121111111n n n n n n nn n n n n n x ax a x a b a x x a x a x a b a x x a x a x a b a x然后写成迭代格式:()()()⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧----=----=----=--+++)(11,)(22)(11)1()(2)(323)(121122)1(2)(1)(313)(212111)1(1111k n n n k n k n n nn k n k n n k k k k n n k k k x a x a x a b a x x a x a x a b a x x a x a x a b a x上式也可以简单地写为:),,2,1(1)(1)1(n i x a b a x k j n i j j ij i iik i =⎪⎪⎪⎭⎫ ⎝⎛-=∑≠=+对以上两式给定一组任意初值(0)(0)(0)(0)12(,,)Tn x x x x =后,经反复迭代可得到一向量序列()()()1(,)k k k Tn x x x =,如果x (k )收敛于****12(,,)T n x x x x =,则),,2,1(*n i x i =就是方程组A x=b 的解,该方法称为雅克比(Jacobi)迭代法。
迭代法解线性方程组-数值分析实验报告

数学与计算科学学院《数值分析》课程设计题目:迭代法解线性方程组专业:信息与计算科学学号:*******-24*名:**指导教师:**成绩:二零一六年六月二十日一 、前言:(目的和意义)1.实验目的①掌握用迭代法求解线性方程组的基本思想和步骤。
②了解雅可比迭代法,高斯-赛德尔法和松弛法在求解方程组过程中的优缺点。
2.实验意义迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,它是解高阶稀疏方程组的重要方法。
迭代法的基本思想是用逐次逼近的方法求解线性方程组。
比较雅可比迭代法,高斯-赛德尔迭代方法和松弛法,举例子说明每种方法的试用范围和优缺点并进行比较。
二、数学原理:设有方程组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 xk k =∞→,则*x 就是方程①或方程②的解。
此时迭代公式②是收敛的,否则称为发散的。
构造的迭代公式③是否收敛,取决于迭代矩阵B 的性1.雅可比迭代法基本原理设有方程组),,3,2,1(1n i b x aj j nj ij==∑= …①矩阵形式为b Ax =,设系数矩阵A 为非奇异矩阵,且),,3,2,1(,0n i a ii =≠ 从式①中第i 个方程中解出x ,得其等价形式)(111j nj j ij ii i x a b a x ∑≠=-= …②取初始向量),,,()0()0(2)0(1)0(n x x x x=,对式②应用迭代法,可建立相应的迭代公式:)(111)()1(∑≠=++-=nj j i k j ij ii k ib x a a x…③ 也可记为矩阵形式: J x J k F B xk +==)()1( …④若将系数矩阵A 分解为A=D-L-U ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=--=--00000000000000111211212211212222111211n n n nn n nn nn n n n n a a a a a a a a a a a a a a a a a a U L D A式中⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=nn a a a D2211,⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=-0000121323121nn n n a a a a a a L ,⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=-0000122311312n n n n a a a a a a U 。
实验3求解线性方程组迭代法与插值法

数值分析实验报告三求解线性方程组的迭代方法和插值法(2学时)班级专业 信科3 姓名 梁嘉城 学号201130760314日期一 实验目的1.掌握求解线性方程组的简单迭代法; 2. 掌握求解线性方程组的赛德尔迭代法。
3. 掌握不等距节点下的牛顿插值公式以及拉格朗日插值公式。
二 实验内容1.使用简单迭代法求解方程组(精度要求为610-=ε):⎪⎩⎪⎨⎧=+-=++=++301532128243220321321321x x x x x x x x x 2.使用赛德尔迭代法求解上述方程组(精度要求为610-=ε): 3.已知函数表:用拉格朗日插值公式计算01.54.1==y x 以及所对应的近似值。
4. 已知函数表:用牛顿插值公式求)102(y 的近似值。
三 实验步骤(算法)与结果1#include<stdio.h>main(){float a[3][4]={20,2,3,24,1,8,1,12,2,-3,15,30};for(int i=0;i<=2;i++){for(int j=0;j<=2;j++){a[i][j]=(-1)*a[i][j];}}a[0][0]=20;a[1][1]=8;a[2][2]=15;float x=0,y=0,z=0;float X,Y,Z;for(int q=0;q<=1000;q++){X=(y*a[0][1]+z*a[0][2]+a[0][3])/a[0][0];Y=(x*a[1][0]+z*a[1][2]+a[1][3])/a[1][1];Z=(x*a[2][0]+y*a[2][1]+a[2][3])/a[2][2];x=X;y=Y;z=Z;}printf("方程组的解是X=%9.6f,Y=%9.6f,Z=%9.6f\n",X,Y,Z); }2#include<stdio.h>main(){float a[3][4]={20,2,3,24,1,8,1,12,2,-3,15,30};for(int i=0;i<=2;i++){for(int j=0;j<=2;j++){a[i][j]=(-1)*a[i][j];}}a[0][0]=20;a[1][1]=8;a[2][2]=15;float x=0,y=0,z=0;for(int q=0;q<=1000;q++){x=(y*a[0][1]+z*a[0][2]+a[0][3])/a[0][0];y=(x*a[1][0]+z*a[1][2]+a[1][3])/a[1][1];z=(x*a[2][0]+y*a[2][1]+a[2][3])/a[2][2];}printf("方程组的解是X=%9.6f,Y=%9.6f,Z=%9.6f\n",x,y,z); }3.#include<stdio.h>main(){float x[3]={1.14,1.36,1.45};float y[3]={5.65,4.15,3.14};float Y;Y=(1.4-x[2])*y[1]/(x[1]-x[2])+(1.4-x[1])*y[2]/(x[2]-x[1] );float X;X=(5.01-y[1])*x[0]/(y[0]-y[1])+(5.01-y[0])*x[1]/(y[1]-y[ 0]);printf("由拉格朗日插值公式得当X=1.4时,Y=%f,当Y=5.01时,X=%f\n",Y,X);}4.#include<stdio.h>main(){float x[5]={93.0,96.2,100.00,104.2,108.7};float y[5]={11.38,12.80,14.70,17.07,19.91};float dy1,dy2,dy3,dy4;float ddy1,ddy2,ddy3;float dddy1,dddy2;float ddddy;dy1=(y[0]-y[1])/(x[0]-x[1]);dy2=(y[1]-y[2])/(x[1]-x[2]);dy3=(y[2]-y[3])/(x[2]-x[3]);dy4=(y[3]-y[4])/(x[3]-x[4]);ddy1=(dy1-dy2)/(x[0]-x[2]);ddy2=(dy2-dy3)/(x[1]-x[3]);ddy3=(dy3-dy4)/(x[2]-x[4]);dddy1=(ddy1-ddy2)/(x[0]-x[3]);dddy2=(ddy2-ddy3)/(x[1]-x[4]);ddddy=(dddy1-dddy2)/(x[0]-x[4]);float Y;Y=y[3]+(102-x[3])*dy3+(102-x[3])*(102-x[2])*ddy2+(1002-x [3])*(102-x[2])*(102-x[1])*dddy1;printf("由牛顿插值公式得当X=102时,Y=%f\n",Y);}四实验收获与教师评语利用计算机实现了线性方程组的简单迭代法,赛德尔迭代法以及不等距节点下的牛顿插值公式以及拉格朗日插值公式。
数值分析实验报告3

实验报告一、实验名称 线性方程组迭代法 二、实验目的及要求1.掌握用迭代法求解线性方程组的基本思想和计算步骤;提高Matlab 编程能力; 2.能熟练地写出Jacobi 迭代法的迭代格式的分量形式,并能比较它们的各自特点及误差估计;3.理解迭代法的基本原理及特点,并掌握Jacobi 迭代和Gauss-Seidel 迭代的分量形式矩阵形式及其各自的特点。
三、实验环境计算机,MATLAB 软件 四、实验内容用迭代法分别对n=10解方程组Ax=b ,其中⎛⎫-- ⎪ ⎪ ⎪--- ⎪ ⎪ ⎪---- ⎪ ⎪ ----⎪ ⎪ ⎪----⎪ ⎪ ⎪---- ⎪ ⎪ ⎪----⎪ ⎪ ⎪---- ⎪ ⎪--- ⎪ ⎪ ⎪-- ⎪⎝⎭114351114335111145335111145335111145335111145335111145335111145335111453311453⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭1232112102 五、算法描述及实验步骤1.迭代法求线性方程组的基本思想和基本步骤 举例了解迭代法的基本思想。
如下例。
求解线性方程组⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧=++=+=+3612x 3x 6x 33x -11x 4x 202x 3x -8x 321321321(1.1)记Ax =b ,其中⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=12361114238A ,⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=321x x x x ,⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=363320b 此方程组的精确解是x *=(3,2,1)T .现将线性方程组(1.1)改写为⎪⎪⎪⎭⎪⎪⎪⎬⎫⎪⎪⎪⎩⎪⎪⎪⎨⎧+-=++=+-=36)3x (-6x 121x 33)x (-4x 111x 20)2x 3x (81x 213312321 (1.2) 或写为x =B 0x +f ,其中⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----=012/312/611/1011/48/28/300B ,⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=12/3611/338/20f 。
数值分析实验三(解线性方程组)

《数值分析》实验报告实验编号:实验三课题名称:解线性方程组一、算法介绍1、定义四个函数分别为:DieDai(),Newton(),XianWei(),DuiFen()。
在主函数中输入要选用方法所对应的序号后,用switch语句对函数进行调用。
2、迭代法的主要思想为:保留一个变量在等号的左边,其他都移到等号右边。
3、Newton法的主要算法为:把f(x)在x0附近展开成Taylor级数,取其线性部分,选取一点x0,该点所对应的值为f(x0),对于n=1,2,…,Nmax,按Xn+1=Xn-f(Xn)/f’(Xn)求出Xn+1,并计算f(Xn+1),若|Xn+1-Xn|小于容许误差,则停止计算。
4、弦位法:选定初始值x0,x1,并计算f(x0),f(x1);按迭代公式xn+1=xn-f(xn)(xn-xn-1)/(f(xn)-f(xn-1))计算x2,再求f(x2);如果相邻两次迭代值之差在容许的误差范围内则迭代停止,否则用(x2,f(x2)),(x1,f(x1))分别代替(x1,f(x1)),(x0,f(x0)),重复前两个步骤,直至相邻两次迭代值之差在容许的误差范围内。
5、对分区间法:选取方程的根所在的区间(a,b),取其中点c代入方程中得其值为f(c),如果f(c)与f(a)异号说明方程的根在(a,c)区间中,则令b=c,否则令a=c,如果f(c)的绝对值小于0.0001,则停止运算,否则继续计算,直至f(c)的绝对值小于0.0001。
二、程序代码#include <iostream>#include <iomanip>#include <cmath>using namespace std;double f(double x){x=x*x*x-3*x-1;return x;}void DieDai(){cout<<"迭代序列:\n";double x0=2,x1=0;int i=1;while(fabs(x0-x1)>=0.0001){x1=x0;x0=pow((3*x0+1),1.0/3);cout<<"x"<<i<<"="<<setiosflags(ios::fixed)<<setprecision(4)<<x0<<",f(x"<<i<<")="<<f(x0)<<",误差为:"<<x0*x0*x0-3*x0-1<<endl;i++;}cout<<"方程近似解x*="<<x0<<endl;cout<<"共进行"<<i-1<<"次迭代\n" ;}void Newton(){cout<<"迭代序列:\n";double x0=2,x1=0;int i=1;while(fabs(x0-x1)>=0.0001){x1=x0;x0=x0-f(x0)/(3*x0*x0-3);cout<<"x"<<i<<"="<<setiosflags(ios::fixed)<<setprecision(4)<<x0<<",f(x"<<i<<")="<<f(x0)<<",误差为:"<<x0*x0*x0-3*x0-1<<endl;i++;}cout<<"方程近似解x*="<<x0<<endl;cout<<"共进行"<<i-1<<"次迭代\n" ;}void XianWei(){double x0=1,x1=3,x2=2;cout<<"选定曲线y=f(x)上的两个点P0("<<x0<<","<<f(x0)<<")和P1("<<x1<<","<<f(x1)<<")\n";int i=2;while(fabs(f(x2))>=0.0001){x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0));cout<<setiosflags(ios::fixed)<<setprecision(4)<<"当前区间(";cout<<x0<<","<<x1<<"),与x轴交点("<<x2<<","<<f(x2)<<"),误差为:";if(f(x2)*f(x0)<0){cout<<x2*x2*x2-3*x2-1<<endl;x1=x2;}else{cout<<x2*x2*x2-3*x2-1<<endl;x0=x2;}i++;}cout<<"方程近似解x*="<<x2<<endl;cout<<"共进行"<<i-2<<"次迭代\n" ;}void DuiFen(){double a=1,b=3,c;cout<<"f(x)=0的根的存在区间("<<a<<","<<b<<")\n";cout<<"端点函数值f(a)="<<f(a)<<",f(b)="<<f(b)<<endl;int i=2;while(fabs(f(c))>=0.0001){c=(a+b)/2;cout<<setiosflags(ios::fixed)<<setprecision(4)<<"当前区间("<<a<<","<<b<<"),区间中点x="<<c;cout<<",f(x)="<<f(c)<<",误差为:";if(f(c)*f(a)<0){cout<<c*c*c-3*c-1<<endl;b=c;}else{cout<<c*c*c-3*c-1<<endl;a=c;}i++;}cout<<"方程近似解x*="<<c<<endl;cout<<"共进行"<<i-2<<"次迭代\n" ;}void Menu(){int n;cin>>n;switch(n){case 1:cout<<"*** 迭代法***\n";DieDai();Menu();break;case 2:cout<<"*** Newton法***\n";Newton();Menu();break;case 3:cout<<"*** 弦位法***\n";XianWei();Menu();break;case 4:cout<<"*** 对分区间法***\n";DuiFen();Menu();break;case 5:return;}}int main (){cout<<" *****问题:求f(x)=x*x*x-3x-1=0在x0=2附近的实根。
桂电数值分析实验:线性方程组迭代法求解

桂林电子科技大学数学与计算科学学院实验报告实验室:06406 实验日期: 2014年10月29日院(系)数学与计算科学学院年级专业班级12应数301 姓名成绩课程名称实验项目名称指导教师一,实验目的通过实验加深理解线性方程组的雅可比迭代法,高斯-赛德尔迭代法和SOR迭代法的算法思想,掌握三个迭代法Matlab程序的编写和使用。
二,实验原理线性方程组迭代解法的矩阵分解三,使用仪器,材料Matlab软件、实验指导书四,实验内容与步骤1. 编写高斯-赛德尔迭代法和SOR迭代法的Matlab程序。
(1)function [x,k]=Gauss(A,b,x0,e,n)%输入A为系数矩阵,b为常数的列向量,x0为迭代初始向量,n为最大迭代次数.%输出为解x和迭代次数k.format long;D=diag(diag(A));L=(-1).*tril(A,-1);U=(-1).*triu(A,1);k=0;x=(D-L)\(U*x0+b);while norm(x-x0)>=ex0=x;x=(D-L)\(U*x0+b);k=k+1;disp([k,x(1),x(2),x(3)]);if k>n break;endend(2)SOR迭代法程序:function [x,k]=SOR(A,b,x0,w,e,n)%输入A为系数矩阵,b为常数的列向量,x0为迭代初始向量,n为最大迭代次数.w为松弛因子%输出为解x和迭代次数k.format long;D=diag(diag(A));L=(-1).*tril(A,-1);U=(-1).*triu(A,1);k=0;x=(D-w*L)\((1-w)*D+w*U)*x0+w*(D-L)\b;while norm(x-x0)>=ex0=x;x=(D-w*L)\((1-w)*D+w*U)*x0+w*(D-L)\b;k=k+1;disp([k,x(1),x(2),x(3)]);if k>n break;endend2. 利用高斯-赛德尔迭代法的Matlab程序计算线性方程组并且在同样误差条件下和算例的雅可比迭代法比较收敛速度。
Jacobi迭代法求解线性方程组实验报告

仿真平台与工具应用实践Jacobi迭代法求解线性方程组实验报告院系:专业班级:姓名:学号:指导老师:一、实验目的熟悉Jacobi迭代法原理;学习使用Jacobi迭代法求解线性方程组;编程实现该方法;二、实验内容应用Jacobi迭代法解如下线性方程组:, 要求计算精度为三、实验过程(1)、算法理论迭代格式的引出是依据迭代法的基本思想: 构造一个向量系列, 使其收敛至某个极限, 则就是要求的方程组的准确解。
Jacobi迭代将方程组:在假设, 改写成如果引用系数矩阵, 及向量, , ,方程组(1)和(2)分别可写为: 及, 这样就得到了迭代格式用迭代解方程组时, 就可任意取初值带入迭代可知式, 然后求。
但是, 比较大的时候, 写方程组和是很麻烦的, 如果直接由, 能直接得到, 就是矩阵与向量的运算了, 那么如何得到, 呢?实际上, 如果引进非奇异对角矩阵将分解成:要求的解, 实质上就有而是非奇异的, 所以存在, 从而有我们在这里不妨令就得到迭代格式:(2)算法框图(3)、算法程序m 文件:function x=jacobi(A,b,P,delta,n)N=length(b); %返回矩阵b的最大长度for k=1:nfor j=1:Nx(j)=(b(j)-A(j,[1:j-1,j+1:N])*P([1:j-1,j+1:N]))/A(j,j);enderr=abs(norm(x'-P)); %求(x'-P)模的绝对值P=x';if(err<delta) %判断是否符合精度要求break;endendE=eye(N,N); %产生N行N列矩阵D=diag(diag(A));f=A*inv(D); %f是A乘D的逆矩阵B=E-f;Px=x';k,errBMATLAB代码:>> clear allA=[4, -1, 1;4, -8, 1;-2, 1, 5];b=[7, -21, 15]';P=[0,0,0]';x=jacobi(A,b,P,1e-7,20)(4)、算法实现用迭代法求解方程组:正常计算结果是2, 3, 4 , 下面是程序输出结果:P =2.00004.00003.0000k =17err =9.3859e-008B =0 -0.1250 -0.2000-1.0000 0 -0.20000.5000 0.1250 0x =2.00004.00003.0000四、实验体会五、MATLAB是非常实用的软件, 能够避免大量计算, 简化我们的工作, 带来便捷。
【分析】数值分析迭代法

【关键字】分析数值分析实验报告(3)学院:信息学院班级:计算机0903班姓名:王明强学号:课题三线性方程组的迭代法一、问题提出1、设线性方程组=x= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )2、设对称正定阵系数阵线方程组=x = ( 1, -1, 0, 2, 1, -1, 0, 2 )3、三对角形线性方程组=x= ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 )试分别选用Jacobi 迭代法,Gauss-Seidol迭代法和SOR方法计算其解。
二、要求1、体会迭代法求解线性方程组,并能与消去法做以比较;2、分别对不同精度要求,如由迭代次数体会该迭代法的收敛快慢;3、对方程组2,3使用SOR方法时,选取松弛因子=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;4、给出各种算法的设计程序和计算结果。
三、目的和意义1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;gauss消去法是一种规则化的加减消元法。
它的基本思想是:通过逐次消元计算把需要求求解的线性方程转化成上三角形方程组,也就是把线性方程组的系数矩阵转化为上三角矩阵,从而使一般线性方程组求解转化为等价(同解)的上三角方程组的求解。
消去法是直接方法的一种。
优点:对于简单的方程组可以很快得出结果,计算中如果没有舍入误差,在稳定的方程组中容易得到精确解,理论上可以求解任何可以求出解得方程组。
缺点:数值有的时候不稳定(可采用列主元gauss消去法),既要消去,又要回代,算法实现起来比较复杂,不适用于大规模方程组。
迭代法是从某一取定的初始向量x(0)出发,按照一个适当的迭代公式,逐次计算出向量x(1),x(2),......,使得向量序列{ x(k)}收敛于方程组的精确解,这样,对于适当大的k,可取x(k)作为方程组的近似解。
优点:算法简单,程序易于实现,特别适用求解庞大稀疏线性方程组。
数值分析实验报告--实验6--解线性方程组的迭代法

1 / 8数值分析实验六:解线性方程组的迭代法2016113 张威震1 病态线性方程组的求解1.1 问题描述理论的分析表明,求解病态的线性方程组是困难的。
实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组Hx=b 的求解,其中系数矩阵H 为Hilbert 矩阵,,,1(),,,1,2,,1i j n n i j H h h i j n i j ⨯===+-这是一个著名的病态问题。
通过首先给定解(例如取为各个分量均为1)再计算出右端b 的办法给出确定的问题。
实验要求:(1)选择问题的维数为6,分别用Gauss 消去法、列主元Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数(至少到100),仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法1.2 算法设计首先编写各种求解方法的函数,Gauss 消去法和列主元高斯消去法使用实验5中编写的函数myGauss.m 即可,Jacobi 迭代法函数文件为myJacobi.m ,GS 迭代法函数文件为myGS.m ,SOR 方法的函数文件为mySOR.m 。
1.3 实验结果1.3.1 不同迭代法球求解方程组的结果比较选择H 为6*6方阵,方程组的精确解为x* = (1, 1, 1, 1, 1, 1)T ,然后用矩阵乘法计算得到b ,再使用Gauss 顺序消去法、Gauss 列主元消去法、Jacobi 迭代法、G-S 迭代法和SOR 方法分别计算得到数值解x1、x2、x3、x4,并计算出各数值解与精确解之间的无穷范数。
Matlab 脚本文件为Experiment6_1.m 。
迭代法的初始解x 0 = (0, 0, 0, 0, 0, 0)T ,收敛准则为||x(k+1)-x(k)||∞<eps=1e-6,SOR方法的松弛因子选择为w=1.3,计算结果如表1。
线性方程组的直接解法迭代解法

广东金融学院实验报告课程名称:数值分析实验目的及要求实验目的:题一:通过数值实验,从中体会解线性方程组选主元的必要性和LU分解法的优点,以及方程组系数矩阵和右端向最的微小变化对解向最的影响。
比较各种直接接法在解线性方程组中的效果;题二:认识齐种迭代法收敛的含义、影响齐迭代法收敛速度的因素。
实验要求:题一:(1)在MATLAB中编写程序用列主元高斯消去法和LU分解求解上述方程组,输出曲b中矩阵A 及向量b和A二LU分解中的L及U, detA及解向量X.(2)将方程组中的2. 099999改为2. 1, 5. 900001改为5. 9,用列主元高斯消去法求解变换后的方程组,输出解向最x及detA,并与(1)中的结果比较。
(3)用MATLAB的内部函数inv求出系数矩阵的逆矩阵,再输入命令x=inv(A)*b,即可求出方程组的解。
请与列主元高斯消公法和LU分解法求出的解进行比较,体会选主元的方法具有良好的数值稳定性。
用MATLAB的内部曲数det求出系数行列式的值,并与(1)、(2)中输出的系数行列式的值进行比较。
(4)比较以上各种直接解法在解线性方程组中的效果。
题二:(1)选取不同的初始向M:X(0)及右端向最b,给泄迭代误差要求,用Jacobi迭代法和Gauss-Seidel迭代法求解,观察得到的序列是否收敛?若收敛,记录迭代次数,分析计算结果并得出你的结论。
列岀算法清单。
(2)用SOR迭代法求上述方程组的解,松弛系数血取1<69<2的不同的三个值,在< 10"5时停止迭代,记录迭代次数,分析计算结呆与松弛系数血的关系并得出你的结论。
(3)用MATLAB的内部函数inv求出系数矩阵的逆矩阵.再输入命令^inv(A)*b>即可求出上述各个方程组的解.并与上述三种方法求出的解进行比较。
请将比较结果列入卜表。
方程组的解X1 Xr■迭代次数误差楮确解Jacibi解法Gause・seidel 解法SOR 解法00= 60= 60=实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)1. Win72. Mat lab 7.0实验内容及步骤(包含简要的实验步骤流程) 实验内容:题一:解卜列线性方程组'10 -7‘X 】、(8、-3 2.099999 62Xr5.9000015-1 5 -15、12> 0< 1 >题二研究解线性方程组 做=b 迭代法的收敛性、收敛速度以及SOR 方法中/佳松弛因子的选取问题, 用迭代法求解做二b,其中・4 -1r■7 A=4 -81 ,b =-21-2 ■1515实验结果(包括程序或图表、结论陈述.数据记录及分析等,可附页)题一:直接解法解线性方程组(1)列主兀高斯消去法与LU 分解求解列主元高斯消去法:编写matalab 程序(见附录gaosi.m ),输出矩阵10.000 -7.000 0.000= 0.000 2.5000-5.000一 0.000 0.0006.0000020.000 0.000 0.000向量8 b =1 8.300 L5.0800J解向量:X = (0 ・-1 , 1 r I )7 其中系数行列式的值det (A )=762.00009LU 分解求解:编J matalab 程序(见附录zhjLU. m 和LU ・m ),执行输出:-1.5 2.300 5.080-3.0001.000000.00000.5000 -25000001.0000 0.2000 -24000000.9600 10.0000 -7.0000 0.0000 1.0000n = 0.0000-0.0000010.0000 2.3000 —0.0000 0.000015000000 57500000.0000 0.0000 0.0000 5.0800在matlab 命令窗II 输入L*U ,可以得到A 二L*U ,即分解结果正确。
数值计算线性方程迭代法实验

实验报告一一、实验目的理解线性方程组直接法与迭代法思想,掌握常用算法的设计,掌握用MATLAB 实现的数值解法。
二、实验题目实验一 线性方程组迭代法实验 1、 迭代法的收敛速度用迭代法分别对n=20,n=200解方程组,b Ax =其中nn A ⨯⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛------------------=431513143151513143151513143151513143151314(1) 选取不同的初值0x 和不同的右端向量b,给定迭代误差,用两种迭代法计算,观测得到的迭代向量并分析计算结果给出结论;(2) 取定初值0x 和右端向量b,给定迭代误差,将A 的主对角元成倍放大,其余元素不变,用Jacobi 迭代法计算多次,比较收敛速度,分析计算结果并给出结论。
2、 SOR 迭代法松弛因子的选取用逐次超松弛(SOR )迭代法求解方程组,b Ax =其中 .5555551221212211212212121221121221212200199198321⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛----------=x x x x x x A (1) 给定迭代误差,选取不同的超松弛因子1>ω进行计算,观测得到的近似值向量并分析计算结果,给出你的结论;(2) 给定迭代误差,选取不同的低松弛因子1<ω进行计算,观测得到的近似值向量并分析计算结果,给出你的结论。
三、实验原理Jacobi 迭代法算法:步1 取初始点()0x ,精度要求ε,最大迭代次数N ,置0:=k ;步 2 由()n i x a b a x ni j j j ij i ii k i,,1,1,11 =⎪⎪⎭⎫⎝⎛-=∑≠=+ 或()b D x A D D x k 111)(--++-= 计算()1+k x ; 步3 若()()ε≤-∞+k k xx1,则停算,输出()1+k x作为方程组的近似解; 步4 若N k =,则停算,输出迭代失败信息;否则置1+=k k ,转布2。
数值分析实验报告之迭代法求解线性方程组

1、计算机一台。
2、安装IIS。
实验步骤
Step1:将文件中线性方程组的增广矩阵读入内存;
Step2:选择雅可比迭代法或者高斯-赛德尔迭代法;
Step3:初始化迭代初值,设置迭代次数上限;
Step3:开始迭代,产生迭代后的新根,计算此时的误差;
Step4:如果误差不满足要求,转到Step5,否则转到Step6。
实验流程图
实验结果
主界面效果截图
选择雅可比迭代法结果截图
实验结果
使用高斯-塞德尔迭代法结果截图:
第5问第一个线性方程组用雅可比迭代是失败的,但高斯-塞德尔迭代成功:
第5问第一个线性方程组用雅可比迭代是成功的,但高斯-塞德尔迭代是失败的:
Step5:判断是否达到迭代次数上限,若没有达到,让迭代次数加1,返回到Step3,若到达迭代上限,则本次实验迭代失败,输出失败信息。
Step6用表格方式输出线性方程组的解,过程法和高斯-塞德尔迭代法求解线性方程组的解,编写程序的过程中,首先要对两个迭代法的数学原理十分熟悉,然后对程序的整个流程十分清楚才行。在实验中,我开始是对具体题目编写求解程序,虽然可以将具体的某一道题解出来,但是一旦线性方程组换成另一个,程序将无法求解,即编写的程序不能通用,于是,才开始设计能够实现求解线性方程组的通用算法,无论方程组是几阶方程组,只要知道它的增广矩阵(系数矩阵加常数项列),就可以使用这两个迭代算法求解。将线性方程组的增广矩阵存入文件,就可以通过查找文件名达到获取文件数据的效果。实验中,设置不同的初值,得到的迭代次数也非常不同,本实验我选择的初始值都是0。实验的第5问中,通过连两个迭代法的运用,发现确实是有的线性方程组用雅可比迭代法比高斯-塞德尔迭代法要快,有的线性方程组使用雅可比迭代法或高斯-塞德尔迭代法无法求解。因此,这两个迭代法也不是对所有的小行星方程组都是可以求解的,即使用这两个迭代法无法求解,线性方程组依然有可能有解。
数值分析实验四 方程组的迭代法1

数值分析实验四 方程组的迭代法组号 班级 学号 姓名 分数一:实验目的1、学会用Jacobi,Gauss-Seidel,SOR 方法计算方程组的数值解。
2、分析个算法的优劣。
二:实验内容及基本知识介绍1、迭代的原理:设线性方程组Ax=b,(3.13)这里,A=*()ij n n a 非奇异,1..0.n b b b ⎛⎫ ⎪ ⎪⎪=≠ ⎪ ⎪ ⎪⎝⎭,将式(3.13)变换成映射形式同解方程组x Gx f =+,(3.14)由此构造迭代格式()()f Gx x k k +=-1(3.15)对取定的初始向量()()0100...n x x x ⎛⎫ ⎪ ⎪ ⎪= ⎪ ⎪ ⎪⎝⎭,得迭代序列()()()010...k n x x x ⎛⎫ ⎪ ⎪⎪= ⎪ ⎪ ⎪⎝⎭().,...2,1=k若()()()*1**...k n x xx x ⎛⎫⎪ ⎪⎪→= ⎪ ⎪ ⎪⎝⎭()*0,.k k x x →∞⎛⎫-→ ⎪⎝⎭等价于为某种向量范数,由式(3.15)取极限得f Gx x +=**从而*x 为式(3.14)的解,即式(3.13)的解.当k 充分大时,()*k x x≈ .2. Jacobi 迭代法和Gauss-Seide 迭代法对式(3.13)的系数矩阵做分解: A=L+D+U其中,L 为严格下三角矩阵,D 为对角阵,U 为严格上三角矩阵,即⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=0002121n n a a a L ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=nn a a a D 2211,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=0002112 n n a a a U 代入式(3.13)得()()x U L b Dx b x U D L +-=⇒=++当D 可逆()0,1,...,ij a i n ≠=即时,有()[]()b D f U L D G f Gx x U L b D x 111,,---=+-=+=+-=对应迭代格式为()()f Gx x k k +=-1(3.16)其中,()U L D G +-=-1A D I 1--=,b D f 1-=称式(3.16)为Jacobi 迭代格式,它的分量形式为()()()n i x a b a x n i j j k j ii i iik i,...,11,11=⎥⎦⎤⎢⎣⎡-=∑≠=-迭代结束条件一般用()()1,k k xx εε--≤为精度要求,.为某种向量范数(常用∞-范数).Gauss-Seidel 迭代法选取分裂矩阵M 为A 的下三角部分,即选取M=D-L (下三角矩阵),A=M-N 于是得到解Ax=b 的Gauss-Seidel 迭代法()()()()01x 0,1,k k x Bx f k +⎧⎪⎨=+=⎪⎩ 初始向量 (2.7)其中()()()111,B I D LA D LU G f D L b ---=--=-≡=-称()1G D L U -=-为解A x b = 的Gauss-Seidel 迭代法的迭代阵下面给出Gauss-Seidel 迭代法的分量计算公式 记()()()()()1,,,,Tk k k k i nx x x x =由(2.7)式有()()()1k k D L x Ux b +-=+或()()()11k k k DxLx Ux b ++=++即()()()()111111,2,i nk k k ii ii ii jiijj j i a x b a x a x i n -++==+=--=∑∑于是解A x b =的Gauss-Seidel 迭代法计算公式为()()()()()()()()000111111,,/1,,;0,1,Tn i n k k k ii ii j ii j ii j j i x x x x b a x a x a i n k -++==+⎧=⎪⎪⎛⎫⎪=--⎨ ⎪⎝⎭⎪⎪==⎪⎩∑∑ 或()()()()()()()()()000111111,,/1,,;0,1,Tn k k i i i i n k k i i ii j ii j ii j j i x x x x x x x b a x a x a i n k +-+==+⎧=⎪⎪=+∆⎪⎪⎨⎛⎫⎪∆=-- ⎪⎪⎝⎭⎪==⎪⎩∑∑ 3、迭代加速——逐次超松弛法考虑Gauss-Seidel 迭代格式的加速算法 .方法是选取一个参数ω(称为超松弛因子),将Gauss-Seidel 迭代第k 步()()1111/i n k k i ii j ii jii j j i b a x a x a -+==+⎛⎫-- ⎪⎝⎭∑∑与第k+1步()1k i x -作适当加权平均得一新的迭代格式 ()()()()()111111/i n k k k k iiii i ii j ii j j j i x x a b a x a x ωω---==+⎛⎫=-+-- ⎪⎝⎭∑∑ (3.23)式(3.23)式称为主次超松弛迭代法(SOR )容易验证,式(3.23)定义合理,并可以证明其收敛的必要条件是0 2.1ωω<<=当时,SOR 法退化为Gauss-Seidel 迭代;当01ω<<时,称式(3.23)为低松弛法;当12ω<<时,称式(3.23)为超松弛法.SOR 法的加速效果依赖于松弛因子ω的选取三:实验问题及方法、步骤Jacobi 、Gauss-Seidel 和SOR 迭代算法都有向量和分量两种形式的表达形式,Jacobi 迭代算法见(3.16)和(3.17),Gauss-Seidel 迭代算法见(3.20)和(3.21),SOR 迭代算法见(3.23).这些迭代法都可能不收敛,对于这类大型稀疏线性方程组,可以考虑采用迭代法(主要用分量形式或稀疏存储)来进行计算,可以节省存储空间.1、程序1 解普通方程组的Gauss-Seidel 迭代 根据(3.21)编写 function x=nags(A,b,x0,e,N)%用途:用向量形式(普通存储格式)的Gauss-Seidel 迭代解线性方程组A %格式:x=nags(A,bx0,e,N) A 为系数矩阵,b 为右端向量,x 返回解向量,% x0为初值向量(默认原点),e 为精度(默认1e-4)设置迭代次数上限以防 % 发散(默认500) n=length(b);if nargin<5,N=500;end if nargin<4,e=1e-4;endif nargin<3,x0=zeros(n,1):end x=x0;x0=x+2*e;k=0;Al=tril(A);iAl=inv(Al); while norm(x0-x,inf)>e&k<n, k=k+1;x0=x;x=-iAl*(A-Al)*x0+iAl*b; disp(x') endif k==N,warning(‘已达迭代次数上限’); end2、 程序2 分量形式的SOR 迭代 根据式3.23编写 function x=nasor(A,b,omega,x0,e,N)%用途:用分量形式的SOR 迭代解线性方程组Ax=b%格式:x=nasor(A,b,omega,x0,e,N) A 为系数矩阵,b 未右端向量,x 返回解向量 %x0为初值向量(默认原点),e 为精度(默认1e-4),设置迭代次数上限以防发散 %(默认500),omega 是松弛因子,一般取1-2之间的数(默认1.5) n=length(b);if nargin<6,N=500;end if nargin<5,e=1e-4;endif nargin<4,x0=zeros(n,1):end x=x0;x0=x+2*e;k=o;L=tril(A ,-1);U=triu(A,l); while norm(x0-x,inf)>e&k<N, k=k+1 x0=x; fori=1:nx1(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-omega)*x0(i)+omega*x1(i); end disp(x ’) endif k==N,warning(‘已达迭代次数上限’);end3、实验实验1分别用 Gauss-Seidel 迭代法与SOR 解线性方程组⎪⎩⎪⎨⎧=+---=-+-=--3322242024321321321x x x x x x x x x初值取()()()001231x x x === 松弛因子ω=1.45,取精度610-解:使用程序1,在MA TLAB 命令窗口执行: A=[4-2-1;-24-2;-1-23];b=[0-23]’; format long;x=nags(A,b,[1,1,1]’,1e-6)计算结果如下>> x=nags(A,b,[1 1 1]',1e-6)0.750000000000000 0.375000000000000 1.5000000000000000.562500000000000 0.531250000000000 1.5416666666666670.651041666666667 0.596354166666667 1.614583333333334 x =0.651041666666667 0.596354166666667 1.614583333333334使用程序2 在命令窗口执行 nasor(A,b,1.45,[1,1,1]’,1e-6) format short 计算结果如下>> nasor(A,b,1.45,[1,1,1]',1e-6) k =10.6375 0.0122 1.3199 k = 20.2004 0.3718 1.3123 k = 30.6550 0.5340 1.6923 k = 40.7058 0.7733 1.7772 k =50.8873 0.8587 1.9092 k = 60.9154 0.9364 1.9385 k =70.9697 0.9620 1.9763 k = 80.9775 0.9836 1.9840 k =90.9924 0.9903 1.9941 k =100.9942 0.9959 1.9959 k =110.9982 0.9976 1.9986k =120.9985 0.9990 1.9990 k =130.9996 0.9994 1.9997 k =140.9996 0.9998 1.9997 k = 150.9999 0.9998 1.9999 k =160.9999 0.9999 1.9999 k =171.0000 1.00002.0000 k =181.0000 1.00002.0000 k = 191.0000 1.00002.0000 k =201.0000 1.00002.0000 k =211.0000 1.00002.0000 k =221.0000 1.00002.0000 k =231.0000 1.00002.0000 k =241.0000 1.00002.0000 ans = 1.0000 1.0000 2.0000实验2、试用SOR 迭代计算线性方程组1231231235551241213613522474712x x x x x x x x x --+=⎧⎪+-=⎨⎪++=⎩取()()T0x0,0,0=,松弛因子分别选取为0.1t,1t 19ω=≤≤要求达到精度()()k 1k 4x x 10+--≤ 试通过数值计算得出不同的松弛因子所需要的迭代次数和收敛最快的松弛因子,并指出那些松弛因子使得迭代发散 解:编写程序如下:function[it,ws]=test61(A,b,w,maxit) if nargin<4, maxit=20000;if nargin<3, w=linspace(o.1,1.9,19);if nargin<2, b=[41 52 12]';if nargin<1,A=[-55 -5 12;21 36 -13;24 7 47];end;end;end;end;n=length(b);for k=1:length(w),xold=zeros(n,1);it(k)=0;convg=0;while ~convg,it(k)=it(k)+1;x=xold;for j=1:n,x(j)=x(j)+w(k)/A(j,j)*(b(j)-A(j,:)*x);endif norm(x-xold)<1e-4,convg=1;elsexold=x;endif it(k)>maxit,it(k)=inf;convg=1;xendendend[minit,ind]=min(it);ws=w(ind);在命令行上运行>> [it,ws]=test61x =-0.85102.07740.3804x =-0.85122.07800.3805x =-0.85132.07830.3805x =-0.85132.0783 0.3805 x =-0.8514 2.0784 0.3805 x =-0.8514 2.0784 0.3805 x =-0.8514 2.0785 0.3805 x =-0.8514 2.0785 0.3805 x =-0.8514 2.0785 0.3805 x =-0.8514 2.0785 0.3805 x =-0.8514 2.0785 0.3805 x =-0.8514 2.0785 0.3805 x =-0.8514 2.0785 0.3805 x =-0.8514 2.0785 0.3805 x =-0.85142.0785 0.3805 it =Columns 1 through 1693 49 33 24 19 15 12 10 8 6 6 11 20 44 556 InfColumns 17 through 19 Inf Inf Inf ws = 1.0000四计算结果分析实验1的结果可见SOR 法加速收敛效果非常明显 实验2可得到满足精度的近似解()0.8514,2.0785,0.3805T x =-()0.8514,2.0785,0.3805Tx =- 当0.1,1:19t t ω==时所需的迭代次数分别为93,49,33,24,19,15,12,10,8,6,6,11,20,44,556,∞,∞,∞,∞其中∞代表不收敛 可知, 1.0 1.1ωω==和时迭代最快, 1.6ω≥时迭代不收敛五思考与提高1、雅可比迭代法计算公式比较简单,每迭代一次只需计算一次矩阵和向量的乘法且计算过程中原始矩阵A 始终不变雅克比迭代法不使用变量的最新信息计算()1k ix +,而由高斯-赛德尔迭代公式可知,计算()1k x +的第i 个分量()1k i x +时,利用了已经计算出的最新分量()1k j x +()1,2,,1j i =-2、高斯-塞德尔迭代法可以看做比雅可比迭代法的一种改进,高斯-赛德尔迭代法比雅可比迭代法收敛较快,但这个结论只当A 满足一定条件时才是对的。
数值分析线性方程组迭代法实验

实验报告
一、实验目的
体会求解线性方程组的Jacobi 迭代法和Gauss-Seidel 迭代法的收敛速度。
二、实验题目
用迭代法分别对200,20==n n 解方程组b Ax =,其中
n
n A ⨯⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛------------------=431513143151513143151513143151513143151314
(1)选取不同的初值0x 和不同的右端向量b ,给定迭代误差,用Jacobi 迭代法和Gauss-Seidel 迭代法计算,观测得到的迭代向量并分析计算结果给出结论;
(2)取定初值0x 和右端向量b ,给定迭代误差,将A 的主对角元成倍放大,其余元素不变,用Jacobi 迭代法计算多次,比较收敛速度,分析计算结果并给出结论。
三、实验原理
求解线性方程组的Jacobi 迭代法和Gauss —Seidel 迭代法
四、实验内容及结果
1.Jacobi 迭代法:
4。
设取定的初值x0=ones(n,1),b=2*ones(n,1);改变A的主对角线元素成倍放大,只需要将第二步中的
五、实验结果分析
(1)前面四个程序输出的结果,都有迭代次数和x的值,说明矩阵是收敛的。
Gauss-seidel的迭代速度比Jacobi的迭代速度快。
(2)观察k值发现迭代次数是减少的,再根据已学的知识,可以推断出随着A的主对角元值的成倍放大收敛的速度加快。
数值分析迭代法实验报告

数值分析实验报告第一题,雅克比迭代法题目:略解决方案:1,截图为:2,程序为#include<iostream>using namespace std;int main(){int n,i,j,k,count;double A[100][100],b[100],x[100]={0},B[100][100],f[100],t[100]={0};cout<<"***叶伟见计1307 133001***"<<endl;cout<<"***这是用雅克比迭代法求解线性方程组的过程***"<<endl;cout<<"***本程序只能解决方程个数少于100的方程组***"<<endl;cout<<"***系数矩阵是一个n阶方阵,n为方程的个数***"<<endl;cout<<"请输入方程的个数n=";cin>>n;cout <<"请依次输入系数矩阵:"<<endl;for(i=0;i<n;i++){for(j=0;j<n;j++)cin>>A[i][j];}cout<<"请输入方程组的常数矩阵:"<<endl;for(i=0;i<n;i++){cin>>b[i];}cout<<"请输入迭代次k的值k=";cin>>k;for(i=0;i<n;i++){for(j=0;j<n;j++){if(i==j)B[i][j]=0;elseB[i][j]=-A[i][j]/A[i][i];}}for(i=0;i<n;i++){f[i]=b[i]/A[i][i];}for(count=1;count<=k;count++){for(i=0;i<n;i++){for(j=0;j<n;j++){t[i]=t[i]+B[i][j]*x[j];}t[i]=t[i]+f[i];}for(i=0;i<n;i++){x[i]=t[i];t[i]=0;}}cout<<"方程组的解集是:"<<endl;for(i=0;i<n;i++){cout<<x[i]<<" ";}return 0;}第二题,高斯赛德尔迭代法题目,略解决方案:1,截图2,程序#include<iostream>using namespace std;int main(){int n,i,j,k,count;double A[100][100],b[100],x[100]={0},B[100][100],f[100],t[100]={0}; cout<<"***这是用高斯赛德尔迭代法求解线性方程组的过程***"<<endl;cout<<"***本程序只能解决方程个数少于100的方程组***"<<endl;cout<<"***系数矩阵是一个n阶方阵,n为方程的个数***"<<endl;cout<<"请输入方程的个数n=";cin>>n;cout <<"请依次输入系数矩阵:"<<endl;for(i=0;i<n;i++){for(j=0;j<n;j++)cin>>A[i][j];}cout<<"请输入方程组的常数矩阵:"<<endl;for(i=0;i<n;i++){cin>>b[i];}cout<<"请输入迭代次k的值k=";cin>>k;for(i=0;i<n;i++){for(j=0;j<n;j++){if(i==j)B[i][j]=0;elseB[i][j]=-A[i][j]/A[i][i];}}for(i=0;i<n;i++){f[i]=b[i]/A[i][i];}for(count=1;count<=k;count++){for(i=0;i<n;i++){for(j=0;j<n;j++){t[i]=t[i]+B[i][j]*x[j];}x[i]=t[i]+f[i];t[i]=0;}}cout<<"方程组的解集是:"<<endl;for(i=0;i<n;i++){cout<<x[i]<<" ";}return 0;}第三题,用二分法求解方程的零点题目:用二分法求方程f(x)=4x*x*x+x*x-10 在区间[1,1.5]上的根,要求求出具有3位有效数的近似根解决方法:1程序:#include<iostream>#include<cmath>using namespace std;double f(double x){double f;f=x*x*x+4*x*x-10;return f;}int main(){double a=1,b=1.5;int m;cout<<"请输入零点值的有效位数:";cin>>m;while((b-a)>=0.5*pow(10,-m)){if(f((a+b)/2)==0)break;elseif(f(a)*f((a+b)/2)<0)b=(a+b)/2;elsea=(a+b)/2;}cout<<"f零点的值是:"<<(a+b)/2;return 0;}2,截图:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学与计算科学学院《数值分析》课程设计题目:迭代法解线性方程组专业:信息与计算科学学号:*******-24*名:**指导教师:**成绩:二零一六年六月二十日一 、前言:(目的和意义)1.实验目的①掌握用迭代法求解线性方程组的基本思想和步骤。
②了解雅可比迭代法,高斯-赛德尔法和松弛法在求解方程组过程中的优缺点。
2.实验意义迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,它是解高阶稀疏方程组的重要方法。
迭代法的基本思想是用逐次逼近的方法求解线性方程组。
比较雅可比迭代法,高斯-赛德尔迭代方法和松弛法,举例子说明每种方法的试用范围和优缺点并进行比较。
二、数学原理:设有方程组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 xk k =∞→,则*x 就是方程①或方程②的解。
此时迭代公式②是收敛的,否则称为发散的。
构造的迭代公式③是否收敛,取决于迭代矩阵B 的性1.雅可比迭代法基本原理设有方程组),,3,2,1(1n i b x aj j nj ij==∑= …①矩阵形式为b Ax =,设系数矩阵A 为非奇异矩阵,且),,3,2,1(,0n i a ii =≠ 从式①中第i 个方程中解出x ,得其等价形式)(111j nj j ij ii i x a b a x ∑≠=-= …②取初始向量),,,()0()0(2)0(1)0(n x x x x=,对式②应用迭代法,可建立相应的迭代公式:)(111)()1(∑≠=++-=nj j i k j ij ii k ib x a a x…③ 也可记为矩阵形式: J x J k F B xk +==)()1( …④若将系数矩阵A 分解为A=D-L-U ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=--=--00000000000000111211212211212222111211n n n nn n nn nn n n n n a a a a a a a a a a a a a a a a a a U L D A式中⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=nn a a a D2211,⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=-0000121323121nn n n a a a a a a L ,⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=-0000122311312n n n n a a a a a a U 。
则方程Ax=b 变为 b x U L D =--)( 得 b x U L Dx ++=)(于是 b D x U L D x 11)(--++=bD x A D I b D x A D D 1111)()(----+-=+-=于是式中④中的 b D f A D I B J J 11,--=-=。
式③和式④分别称为雅克比迭代法的分量形式和矩阵形式,分量形式用于编程计算,矩阵型式用于讨论迭代法的收敛性。
2.高斯—赛德尔迭代法高斯—赛德尔(Gauss-Seidel )迭代法,其迭代公式为 )(1)(111)1()1(i k j i j ni j ijk j ij ii k ib x ax a a x +-=∑∑-=+=++ (i=1,2,…,n )也可以写成矩阵形式 S G k S G k f x B x--++=)()1(仍将系数矩阵A 分解为 U L D A --= 则方程组变为 b x U L D =--)( 得 b Ux Lx Dx ++= 将最新分量代替为旧分量,得 b Ux Lx Dxk k k ++=++)()1()1(即 b Ux x L D k k +=-+)()1()(于是有 b L D Ux L D xk k 1)(1)1()()(--+-+-=所以 U L D B S G 1)(---= b L D f S G 1)(---=3.超松弛迭代法设已知第k 次迭代向量)(k x ,及第k+1次迭代向量的前i-1个分量)1(+k jx ,(j=1,2,…i-1),现在研究如何求向量)1(+k x的第i 个分量)1(+k i x 。
首先,有高斯—赛德尔迭代法求出一个值,记为)(1~1)()1(11)1(∑∑+=+-=+--=ni j k j ij k j i j ij i ii k ix ax a b a x (i=1,2,…n )再将第k 次迭代向量的第i 个分量)(k j x 与)1(~+k i x 进行加权平均,得)1(+k i x ,即:)1(+k i x )1()(~)1(++-=k i k ix x ωω)~()()1()(k i k i k i x x x -+=+ω 于是的SOR 迭代公式 )()(1)1(11)()1(k j nj ij k ji j ij i iik ik ix a xa b a xx∑∑=+-=+--+=ω(i=1,2,…n) …①或 )()1()(1)1(11)()1(k j ni j ijk ji j ij i iik ik ix axa b a xx∑∑+=+-=+--+-=ωω (i=1,2,…n ) …②当ω=1时,式①即为高斯—赛德尔迭代法;当0<ω<1时,式①称为低松弛方法,当某些方程组用高斯—赛德尔迭代法不收敛时,可以用低松弛方法获得收敛;当ω>1时,式①称为超松弛方法,可以用来提高收敛速度。
将式②写成矩阵的形式,得:)()1()()1()()1(k k k k UX LX b DX DX+++-=++ωω即 b x U D x L D k k ωωωω++-=-+)()1(])1[()(于是得SOR 迭代的矩阵表示 ωωf X B xk k +=+)()1(式中 ])1[()(1U D L D B ωωωω+--=- b L D f 1)(--=ωωω三、举例说明及代码例1:解下面方程组.(雅克比迭代方法、高斯-赛德尔和松弛法的比较)⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡111x 1221112-21321x x解:先计算迭代矩阵:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=+=02-2-1-01-22-0U)L D B 1-J (⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡==203-2022-0U L)-D B 1-G( B J 与B G 的特征值跟收敛半径为10B 321i 0B J J i <===)(),,,,()(ρλ12B 2B 0B G G 32G 1>===)(,)(,)(,ρλλ所以,用雅可比迭代法求解,迭代过程收敛,而用高斯-塞德尔迭代法求解,迭代过程发散。
取x 0=(0;0;0),为达到精度10-5,取w=0.1。
代码: 1. 雅可比迭代法function [x,k]=jacobi(A,b,x0,esp) %k 为迭A=input('Input A='); b=input('Input b='); x0=input('Input x0='); esp=1.0e-5; k=0;n=length(b); x=x0;while max(abs(b-A*x0))>esp&k<=500; for i=1:n sum=0; for j=1:n if j~=isum=sum+A(i,j)*x0(j); end endx(i)=(b(i)-sum)/A(i,i); end x0=x; k=k+1; if k>500fprintf('迭代达到上限') return end end kInput A=[1 2 -2;1 1 1;2 2 1];Input b=[1 1 1]';Input x0=[0 0 0]'运行结果:k =3ans =-3312.高斯-赛德尔迭代法clear;clc;A=[1 2 -2;1 1 1;2 2 1];b=[1 1 1]';N=length(b);%解向量的维数fprintf('库函数计算结果:');x=inv(A)*b%库函数计算结果x=zeros(N,1);%迭代初始值%-----(A=D-E-F)------D=diag(diag(A));E=-tril(A,-1);%下三角F=-triu(A,1);%上三角B=inv(D-E)*F;g=inv(D-E)*b;eps=0.0001;%相邻解的距离小于该数时,结束迭代%--------开始迭代-------for k=1:1000%最大迭代次数为100fprintf('第%d次迭代:',k);y=B*x+g;fprintf('\n与上次计算结果的距离(2范数):%f?\n',norm(x-y)^2); if norm(x-y)<epsbreak;endx=yendx运行结果:(因为发散结果不能确定)3.松弛迭代法w=0.1;dalt=1.0e-5;A=[1 2 -2;1 1 1;2 2 1];b=[1 1 1]';r=size(b);a=b;x0=zeros(3,1);x=x0;r=r(1);m=0;e=1;for t=1:ra(t)=A(t,t);A(t,t)=0;A(t,:)=A(t,:)/a(t);endb=b./a;root=[0 x']while e>daltroot=m;e=0;for i=1:rt=x(i);x(i)=(1-w)*x(i)+w*(b(i)-A(i,:)*x);root=[root x(i)];t=abs(x(i)-t);if t>ee=t;endendrootm=m+1;end运行结果:root =184.0000 -3.0001 3.0000 1.0000例2:(超松弛法)达到同样的精度10-5,松弛因子的不同,会使得收敛速度大大不同(w 取1.0—1.9)⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡11114-11114-11114-111144321x x x x 代码:w=1;dalt=1.0e-5;A=[4 1 1 1;1 -4 1 1;1 1 -4 1;1 1 1 -4]; b=[1;1;1;1]; r=size(b);a=b; x0=zeros(4,1); x=x0;r=r(1);m=0;e=1; for t=1:r a(t)=A(t,t); A(t,t)=0;A(t,:)=A(t,:)/a(t); end b=b./a; root=[0 x'] while e>dalt root=m; e=0; for i=1:r t=x(i);x(i)=(1-w)*x(i)+w*(b(i)-A(i,:)*x); root=[root x(i)]; t=abs(x(i)-t); if t>e e=t; end end root m=m+1; end运行结果整理:例3:用三种方法分别计算下列方程组并进行比较:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡------2.43.82.751121012110321x x x 解: 雅克比迭代法1) 改写成等价形式⎪⎪⎪⎩⎪⎪⎪⎨⎧++=++=++=)..24(51),28.3(101),22.7(101213312321x x x x x x x x x 2) 构造迭代公式,即为雅可比迭代公式⎪⎪⎪⎩⎪⎪⎪⎨⎧=++=++=++=+++.,2,1,0),.24(51),28.3(101),27.2(101)(2)(1)1(3)(3)(1)1(2)(3)(2)1(1 k x x x x x x x x x k k k k k k k k k 3) 取初始向量T x )0,0,0()0(=,即,0)0(3)0(2)0(1===x x x 代入上式,求出0.84,0.83,0.72)1(3)1(2)1(1===x x x依次迭代,计算结果如下表:高斯-赛德尔迭代法1) 原方程组改为等价方程组⎪⎪⎪⎩⎪⎪⎪⎨⎧++=++=++=)..24(51),28.3(101),22.7(101213312321x x x x x x x x x 2) 构造迭代公式,即为高斯-赛德尔迭代公式⎪⎪⎪⎩⎪⎪⎪⎨⎧=++=++=++=++++++.,2,1,0),34.2(51),28.3(101),27.2(101)1(2)1(1)1(3)(3)1(1)1(2)(3)(2)1(1k x x x x x x x x x k k k k k k k k k 3) 取初始向量T x )0,0,0()0(=,即,0)0(3)0(2)0(1===x x x 代入上式,求出 0.72)1(1=x 0.902)1(2=x 1.1644)1(3=x 迭代计算下去,得下表.超松驰迭代法(取松驰因子3.1=ω).利用SOR 方法,构造迭代公式⎪⎪⎪⎩⎪⎪⎪⎨⎧-+++=+-++=++-+=+++++).52.4(2),2103.8(2),2107.2(2)(3)(2)1(1)(3)1(3)(3)(2)1(1)(2)1(2)(3)(2)(1)(1)1(1k 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 ωωω 与高斯-赛德尔方法相同,初值为T x )000()0(,,=.迭代计算结果列于下表.代码:1.雅可比迭代法function [x,k]=jacobi(A,b,x0,esp) %k 为迭A=input('Input A='); b=input('Input b='); x0=input('Input x0='); esp=1.0e-5; k=0;n=length(b); x=x0;while max(abs(b-A*x0))>esp&k<=500; for i=1:n sum=0; for j=1:n if j~=isum=sum+A(i,j)*x0(j); end endx(i)=(b(i)-sum)/A(i,i); end x0=x; k=k+1;if k>500fprintf('迭代达到上限')returnendendkInput A=[10 -1 -2;-1 10 -2;-1 -1 5];Input b=[7.2 8.3 4.2]';Input x0=[0 0 0]'运行结果:k =13ans =1.10001.20001.30002.高斯-赛德尔迭代法clear;clc;A=[10 3 1;2 -10 3;1 3 10];b=[14 -5 14]';N=length(b);%解向量的维数fprintf('库函数计算结果:');x=inv(A)*b%库函数计算结果x=zeros(N,1);%迭代初始值%-----(A=D-E-F)------D=diag(diag(A));E=-tril(A,-1);%下三角F=-triu(A,1);%上三角B=inv(D-E)*F;g=inv(D-E)*b;eps=0.0001;%相邻解的距离小于该数时,结束迭代%--------开始迭代-------for k=1:100%最大迭代次数为100fprintf('第%d次迭代:',k);y=B*x+g;fprintf('\n与上次计算结果的距离(2范数):%f?\n',norm(x-y)^2); if norm(x-y)<epsbreak;endx=yendx运行结果:k=7x =1.00001.00001.00003.松弛迭代法w=1.3;dalt=1.0e-2;A=[10,-1,-2;-1,10,-2;-1,-1,5];b=[7.2,8.3,4.2]';r=size(b);a=b;x0=zeros(3,1);x=x0;r=r(1);m=0;e=1;for t=1:ra(t)=A(t,t);A(t,t)=0;A(t,:)=A(t,:)/a(t);endb=b./a;root=[0 x']while e>daltroot=m;e=0;for i=1:rt=x(i);x(i)=(1-w)*x(i)+w*(b(i)-A(i,:)*x); root=[root x(i)];t=abs(x(i)-t);if t>ee=t;endendrootm=m+1; end运行结果:root =0 0 0 0 root =0 0.9360 1.2007 1.6475 root =1.0000 1.2396 1.3083 1.2602 root =2.0000 1.0618 1.1522 1.2896 root =3.0000 1.1025 1.2120 1.3069 root =4.0000 1.1026 1.1985 1.2982 root =5.0000 1.0986 1.1998 1.3001例4:用三种方法分别计算下列方程组并进行比较:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡------010121001210012100124321x x x x解:① 雅克比迭代法2) 改写成等价形式⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧=++=+=+=.21)1(21),(21),1(213442331221x x x x x x x x x x , 2) 构造迭代公式,即为雅可比迭代公式⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧==++=+=+=++++.,2,1,0.21),1(21),(21),1(21314)(4)(2)1(3)(3)(1)1(2)(2)1(1k x x x x x x x x x x k k k k k k k k k k 3) 取初始向量T x )11,1,1()0(,=,即,1)0(4)0(3)0(2)0(1====x x x x 代入上式,求出 0.5x 1.5,1,1(1)4)1(3)1(2)1(1====,x x x依次迭代,计算结果如下表:② 高斯-赛德尔迭代法1) 原方程组改为等价方程组⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧=++=+=+=.21)1(21),(21),1(213442331221x x x x x x x x x x , 2) 构造迭代公式,即为高斯-赛德尔迭代公式⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧==++=+=+=+++++++.,2,1,0.21),1(21),(21),1(211314)(4)1(2)1(3)(3)1(1)1(2)(2)1(1k x x x x x x x x x x k k k k k k k k k k )(3) 取初始向量T x )1111()0(,,,=,即,1)0(4)0(3)0(2)0(1====x x x x 代入上式,求出 0.75x 1.5,1,1(1)4)1(3)1(2)1(1====,x x x迭代计算下去,得下表.超松驰迭代法(取松驰因子4.1=ω).利用SOR 方法,构造迭代公式⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧-+=+-++=+-+=+-+=+++++++).2(2),21(2),2(2),21(2)(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 x x x x x x x x x x x x x x x x x x ωωωω与高斯-赛德尔方法相同,初值为T x )1111()0(,,,=.迭代计算结果列于下表.代码:1.雅可比迭代法function [x,k]=jacobi(A,b,x0,esp) %k 为迭A=input('Input A='); b=input('Input b='); x0=input('Input x0='); esp=1.0e-2; k=0;n=length(b); x=x0;while max(abs(b-A*x0))>esp&k<=500; for i=1:n sum=0; for j=1:n if j~=isum=sum+A(i,j)*x0(j); end endx(i)=(b(i)-sum)/A(i,i); end x0=x; k=k+1; if k>500fprintf('迭代达到上限') returnendkInput A=[2 -1 0 0;-1 2 -1 0;0 -1 2 -1;0 0 -1 2];Input b=[1 0 1 0]';Input x0=[1 1 1 1]'运行结果:k =21ans =1.19861.39391.59770.79622.高斯-赛德尔迭代法clear;clc;A=[2 -1 0 0;-1 2 -1 0;0 -1 2 -1;0 0 -1 2];b=[1 0 1 0]';N=length(b);%解向量的维数fprintf('库函数计算结果:');x=inv(A)*b%库函数计算结果x=ones(N,1);%迭代初始值%-----(A=D-E-F)------D=diag(diag(A));E=-tril(A,-1);%下三角F=-triu(A,1);%上三角B=inv(D-E)*F;g=inv(D-E)*b;eps=0.01;%相邻解的距离小于该数时,结束迭代%--------开始迭代-------for k=1:100%最大迭代次数为100fprintf('第%d次迭代:',k);y=B*x+g;fprintf('\n与上次计算结果的距离(2范数):%f?\n',norm(x-y)^2); if norm(x-y)<epsbreak;endx=yx运行结果:k=8x =1.18801.38431.58730.79363.松弛迭代法w=1.4;dalt=1.0e-2;A=[2 -1 0 0;-1 2 -1 0;0 -1 2 -1;0 0 -1 2]; b=[1 0 1 0]';r=size(b);a=b;x0=ones(4,1);x=x0;r=r(1);m=0;e=1;for t=1:ra(t)=A(t,t);A(t,t)=0;A(t,:)=A(t,:)/a(t);endb=b./a;root=[0 x']while e>daltroot=m;e=0;for i=1:rt=x(i);x(i)=(1-w)*x(i)+w*(b(i)-A(i,:)*x);root=[root x(i)];t=abs(x(i)-t);if t>ee=t;endendrootm=m+1;end运行结果:root =0 1.0000 1.0000 1.7000 0.7900root =1.0000 1.0000 1.4900 1.6160 0.8152root =2.0000 1.3430 1.4753 1.6569 0.8338root =3.0000 1.1955 1.4066 1.6055 0.7903root =4.0000 1.2064 1.4057 1.5950 0.8004root =5.0000 1.2014 1.3952 1.5989 0.7991root =6.0000 1.1961 1.3984 1.5987 0.7994四、实验结果比较和分析由例1可得,如果高斯-塞德尔迭代法不收敛,雅可比迭代法收敛,松弛法的迭代因子没取好,雅可比迭代法收敛更快。