数学实验“线性方程组的J-迭代,GS-迭代,SOR-迭代解法”实验报告(内含matlab程序代码)
迭代法解线性方程组数值分析实验报告
迭代法解线性方程组数值分析实验报告一、实验目的本次实验旨在深入研究和掌握迭代法求解线性方程组的基本原理和方法,并通过数值实验分析其性能和特点。
具体目标包括: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)})$。
实验一线性方程组迭代法实验
实验一线性方程组迭代法实验实验一线性方程组迭代法实验一、实验目的1.掌握用迭代法求解线性方程组的基本思想和计算步骤;2.能熟练地写出Jacobi迭代法的迭代格式的分量形式,并能比较它们各自的特点及误差估计;3.理解迭代法的基本原理及特点,并掌握Jacobi迭代Gauss-Seidel迭代和SOR迭代格式的分量形式、矩阵形式及其各自的特点;4.掌握Jacobi迭代Gauss-Seidel迭代和SOR 迭代算法的MATLAB程序实现方法,及了解松弛因子对SOR迭代的影响;5.用SOR迭代法求解线性方程组时,超松弛因子ω的取值大小会对方程组的解造成影响,目的就是能够探索超松弛因子ω怎样对解造成影响,通过这个实验我们可以了解ω的大致取值范围。
二、实验题目1、迭代法的收敛速度用迭代法分别对n=20,n=200解方程组Ax=b,其中n n A ⨯ ⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫------------------=444...444315131315151313151513131515131315131 (1)选取不同的初值x0和不同的右端向量b ,给定迭代误差,用两种迭代法计算,观测得到的迭代向量并分析计算结果给出结论;(2)取定初值x0和右端向量b ,给定迭代误差,将A 的主对角元成倍放大,其余元素不变,用Jacobi 迭代法计算多次,比较收敛速度,分析计算结果并给出结论。
2、SOR 迭代法松弛因子的选取不同的松弛因子对解得影响。
然后利用雅可比迭代求的的解与它们比较;三、 实验原理1、迭代法的收敛速度运用了Jacobi 迭代,Gauss-Seidel 迭代1)Jacobi 迭代算法:1. 取初始点x(0),精度要求ε,最大迭代次数N ,置k :=0;2. 由n 1i ),x a -(b x n i j 1,j (k)j j i i 11)(k i ,,⋯==∑≠=+ii a ,计算出x (k+1);3. 若ε≤-∞+)()1(k k x x ,则停算,输出x(k+1)作为方程组的近似解; 4. 若k=N ,则停算,输出迭代失败信息;否则置k :=k+1,转步2。
实验报告四线性方程组的求解_迭代
浙江大学城市学院实验报告课程名称 科学计算实验项目名称 线性方程组的求解-迭代法实验成绩 指导老师(签名 ) 日期 2012-4-6一. 实验目的和要求1. 掌握Jacobi 迭代方法.Gauss-Seidel 迭代方法.SOR 迭代方法的编程思想.能够分别用分量形式和矩阵形式编写相关程序。
2. 观察SOR 迭代法中松弛因子变化情况对收敛的影响。
3. 了解Hilbert 矩阵的病态性和作为线性方程组系数矩阵的收敛性。
二. 实验内容和原理编程题2-1要求写出Matlab 源程序(m 文件).并有适当的注释语句;分析应用题2-2.2-3.2-4要求将问题的分析过程、Matlab 源程序和运行结果和结果的解释、算法的分析写在实验报告上。
2-1 编程注释 设11121121222212,n n n n nn n a a a b a a a b A b a a a b ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦对下述求解线性方程组的Matlab 程序添上注释语句.其中A 和b 分别为线性方程组的系数矩阵和右端向量;0x 为迭代初始向量(0)X;max N 为容许迭代最大次数.eps 为迭代终止条件的精度(容许误差).终止条件为前后两次迭代解的差的向量2-范数。
1) Jacobi 迭代:Jacobimethod(A,b,x0,Nmax,eps)2) Gauss-Seidel 迭代:GaussSeidelmethod(A,b,x0,Nmax,eps)3) 松弛迭代:SORmethod(A,b,x0,Nmax,eps,w)2-2 分析应用题利用2-1中的程序来分析用下列迭代法解线性方程组:123456410100014101050141012101410501014120010146x x x x x x --⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥---⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥----=⎢⎥⎢⎥⎢⎥---⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦ 的收敛性.并求出使(1)()20.0001k k X X +-≤的近似解及相应的迭代次数.其中取迭代初始向量(0)X 为零向量。
《数学实验》实验报告——迭代法
3.线性方程组的迭代求解
给定一个 n 元线性方程组
a11 x1 a12 x 2 a1 n xn 0 a x a x a x 0 21 1 22 2 2n n am 1 x1 am 2 x 2 amn xn 0
9
观察序列,并且判断极限。 Mathematica 程序如下:
当 x0=0.1,n=10 时,运行程序得
当 x0=0.5,n=10 时,运行程序得
当 x0=0.9,n=10 时,运行程序得
当 x0=1,n=10 时,运行程序得
实验结论:
10
由以上实验可得,函数 f(x)=x/2+1/x 的极限为 1.41421
运行程序结果如下:
实验结论:
试验中假设矩阵 A 的对角元素 aii<>0,i=1,2,3,…n.令 D=diag(a11,a12,,,….ann),则可以将 方程 Ax=b 转化成 x=(U+L)x+D-1b 其中 U 为下三角阵,L 为上三角阵。如果 U+L 的行列式 最大特征值的绝对值小于 1,则线性方程组有解且唯一。
写成 Ax=b 的形式, 再将其改写成 x=M*x=f 其中 M 是 n 阶矩阵, f=(f1,f2,f3,f4….fn)T 是 n 维列向量,给定 x0,由迭代 x(n+1)=M*x^n+f,n=0,1,2,3,4…..对给定的矩阵 M 数组 f 和 初始值 x0,由 x(n+1)=M*x^n+f,n=0,1,2,3,4…..用 mathematic 可得迭代结果。 迭代程序如下:
《数学实验》实验报告
班级 实验 内容 **** 学号 **** 姓名 实验 类别 **** 成绩 实验 时间
SOR迭代法求解线性方程组
实验三:用SOR迭代法求解线性方程组
取初始点 ,松弛因子 ,精度要求 。
1,建立SOR.m函数文件,此函数文件可调用,程序源码如下:
function [x,n]=SOR(A,b,x0,w,eps,M)
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; %迭代次数
whix0+f;
n=n+1;
if(n>=M)
disp('Warning:迭代次数太多,可能不收敛!');
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的下三角阵
return;
end
end
2,输入矩阵。并根据要求调用函数,运行结果如下图所示:
即经过7次迭代算出结果,且求得:
(精校版)迭代法解线性方程组数值分析实验报告
(完整word版)迭代法解线性方程组-数值分析实验报告编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整word版)迭代法解线性方程组-数值分析实验报告)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整word版)迭代法解线性方程组-数值分析实验报告的全部内容。
数学与计算科学学院《数值分析》课程设计题目:迭代法解线性方程组专业:信息与计算科学学号: 1309302—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 x k k =∞→,则*x 就是方程①或方程②的解。
此时迭代公式②是收敛的,否则称为发散的。
构造的迭代公式③是否收敛,取决于迭代矩阵B 的性 1。
雅可比迭代法基本原理设有方程组),,3,2,1(1n i b x a j 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 x k +==)()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 。
数值计算实验9:线性方程组的迭代法
实验九:线性方程组的解(3)一、实验目的1.熟悉矩阵与向量的概念,理解向量的线性运算、数量积运算。
2.理解矩阵的基本运算、矩阵与向量的运算及行列式运算。
3.熟悉Mathematia数学软件做Gauss-Seide迭代法、Jacobi迭代法和SOR迭代法的命令。
二、实验内容1.程序设计基础知识:实现迭代求解关键是循环控制结构的使用,Mathematica中共有三种描述循环的语句,它们是Do、While和For。
Do循环类似于Fortran中的Do语句,它根据循环描述先计算循环次数,再做循环体。
在While和For中,做一次条件确认后,计算一次循环体的表达式2.Do语句的一般形式:Do[循环体,{循环范围}]3.While语句的一般形式:While[条件,循环体]4.For语句的一般形式:For[初始值,条件,修正循环变量,循环体]三、实验详细操作步骤或程序清单:代码程序:A={{10,-2,-1},{-2,10,-1},{-1,-2,5}};MatrixForm[%];b={11,-25,18};I1=IdentityMatrix[3];DD={{A[[1,1]],0,0},{0,A[[2,2]],0},{0,0,A[[3,3]]}} DDN=Inverse[DD];J=I1-DDN.A;MatrixFormn[%];R=Max[Abs[Eigenvalues[N[J]]]]f=DDN.b;xa={0,0,0};Do[xb=J.xa+f//N;z=Max[Abs[xb-xa]]//N;Print[k," ",xb," ",z];xa=xb,{k,1,10}]运行结果:代码程序:A={{20,2,3},{1,8,1},{2,-3,15}};MatrixForm[%];b={24,12,30};I1=IdentityMatrix[3];DD={{A[[1,1]],0,0},{0,A[[2,2]],0},{0,0,A[[3,3]]}}DDN=Inverse[DD];J=I1-DDN.A;MatrixFormn[%];R=Max[Abs[Eigenvalues[N[J]]]]f=DDN.b;xa={0,0,0};Do[xb=J.xa+f//N;z=Max[Abs[xb-xa]]//N;Print[k," ",xb," ",z];xa=xb,{k,0.5,10^-4}]运行结果:代码程序:A={{20,2,3},{1,8,1},{2,-3,15}};b={24,12,30};epsilon=10^(-4); n=3;M=20;x0=Table[0,{i,1,n}];DL={{20,2,3},{0,7.90,0.85},{0,0,15.04}};f=Inverse[DL].b;B=Inverse[DL].(DL-A);Print["The iterating matrix of G-S G=",MatrixForm[B]];rA=Max[Abs[Eigenvalues[B]]];Print[""];Print["The eigenvalues are:",Eigenvalues[B]];Print[" r(G)=",rA];If[rA<1,Print["The iteration method is ok!"];For[i=1,i?M,i++,x=B.x0+f//N;Print["X",i,"=",x];If[Max[Abs[x-x0]]>epsilon,x0=x,Return[]];]]If[rA?1,Print["The iteration method is a failure!"]] 运行结果:Jacobi迭代法:代码程序A={{1,2,-2},{1,1,1},{2,2,1}};MatrixForm[%];b={1,2,3};I1=IdentityMatrix[3];DD={{A[[1,1]],0,0},{0,A[[2,2]],0},{0,0,A[[3,3]]}}DDN=Inverse[DD];J=I1-DDN.A;MatrixFormn[%];R=Max[Abs[Eigenvalues[N[J]]]]f=DDN.b;xa={0,0,0};Do[xb=J.xa+f//N;z=Max[Abs[xb-xa]]//N;Print[k," ",xb," ",z];xa=xb,{k,1,10}]运行结果:Gauss迭代法:代码程序A={{1,2,-2},{1,1,1},{2,2,1}};b={1,2,3};epsilon=10^(-4); n=3;M=20;x0=Table[0,{i,1,n}];DL={{1,2,-2},{0,-1,3},{0,0,1}};f=Inverse[DL].b;B=Inverse[DL].(DL-A);Print["The iterating matrix of G-S G=",MatrixForm[B]];rA=Max[Abs[Eigenvalues[B]]];Print[""];Print["The eigenvalues are:",Eigenvalues[B]];Print[" r(G)=",rA];If[rA<1,Print["The iteration method is ok!"];For[i=1,i?M,i++,x=B.x0+f//N;Print["X",i,"=",x];If[Max[Abs[x-x0]]>epsilon,x0=x,Return[]];]]If[rA?1,Print["The iteration method is a failure!"]]运行结果:四、实验环境Mathematica 9五、疑难小结对Gauss-Seide迭代法、Jacobi迭代法和SOR迭代法都不熟悉,后来经过观看学习通视频,查阅相关资料以及学习中国大学MOOC数值计算方法这门课对Hermite插值公式,分段线性插值公式以及等距节点插值公式有了初步的了解,并开始进行试验。
实验五-解线性方程组的迭代法报告
实验五 解线性方程组的迭代法一、问题提出对实验四所列目的和意义的线性方程组,试分别选用Jacobi 迭代法,Gauss-Seidel 迭代法和SOR 方法计算其解。
二、要求1、体会迭代法求解线性方程组,并能与消去法做以比较;2、分别对不同精度要求,如34510,10,10ε---=由迭代次数体会该迭代法的收敛快慢;3、对方程组2,3使用SOR 方法时,选取松弛因子ω=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;4、给出各种算法的设计程序和计算结果。
三、目的和意义1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;3、体会上机计算时,终止步骤(1)k k xx ε+∞-<或k>(给予的迭代次数),对迭代法敛散性的意义;4、 体会初始解0x ,松弛因子的选取,对计算结果的影响。
四、实验学时:2学时五、实验步骤:1.进入C 或matlab 开发环境;2.根据实验内容和要求编写程序;3.调试程序;4.运行程序;5.撰写报告,讨论分析实验结果.解:J迭代算法:程序设计流程图:源程序代码:#include<stdlib.h>#include<stdio.h>#include<math.h>void main(){float a[50][51],x1[50],x2[50],temp=0,fnum=0;int i,j,m,n,e,bk=0;printf("使用Jacobi迭代法求解方程组:\n");printf("输入方程组的元:\nn=");scanf("%d",&n);for(i=1;i<n+1;i++)x1[i]=0;printf("输入方程组的系数矩阵:\n");for(i=1;i<n+1;i++){j=1;while(j<n+1){scanf("%f",&a[i][j]);j++;}}printf("输入方程组的常数项:\n");for(i=1;i<n+1;i++){scanf("%f",&a[i][n+1]);}printf("\n");printf("请输入迭代次数:\n");scanf("%d",&m);printf("请输入迭代精度:\n");scanf("%d",&e);while(m!=0){for(i=1;i<n+1;i++){for(j=1;j<n+1;j++){if (j!=i)temp=a[i][j]*x1[j]+temp;}x2[i]=(a[i][n+1]-temp)/a[i][i];temp=0;}for(i=1;i<n+1;i++){fnum=float(fabs(x1[i]-x2[i]));if(fnum>temp) temp=fnum;}if(temp<=pow(10,-4)) bk=1;for(i=1;i<n+1;i++)x1[i]=x2[i];m--;}printf("原方程组的解为:\n");for(i=1;i<n+1;i++){if((x1[i]-x2[i])<=e||(x2[i]-x1[i])<=e){printf("x%d=%7.4f ",i,x1[i]);}}}运行结果:GS迭代算法:#include<iostream.h>#include<math.h>#include<stdio.h>const int m=11;void main(){int choice=1;while(choice==1){double a[m][m],b[m],e,x[m],y[m],w,se,max; int n,i,j,N,k;cout<<"Gauss-Seidol迭代法"<<endl;cout<<"请输入方程的个数:";cin>>n;for(i=1;i<=n;i++){cout<<"请输入第"<<i<<"个方程的各项系数:"; for(j=1;j<=n;j++)cin>>a[i][j];}cout<<"请输入各个方程等号右边的常数项:\n"; for(i=1;i<=n;i++){cin>>b[i];}cout<<"请输入最大迭代次数:";cin>>N;cout<<"请输入最大偏差:";cin>>e;for(i=1;i<=n;i++){x[i]=0;y[i]=x[i];}k=0;while(k!=N){k++;for(i=1;i<=n;i++){w=0;for(j=1;j<=n;j++){if(j!=i)w=w+a[i][j]*y[j];}y[i]=(b[i]-w)/double(a[i][i]);}max=fabs(x[1]-y[1]);for(i=1;i<=n;i++){se=fabs(x[i]-y[i]);if(se>max)max=se;}if(max<e){cout<<endl;for(i=1;i<=n;i++)cout<<"x"<<i<<"="<<y[i]<<endl; break;}for(i=1;i<=n;i++){x[i]=y[i];}}if(k==N)cout<<"迭代失败!!"<<endl;choice=0;}}SOR方法:# include <stdio.h># include <math.h>#include<stdlib.h>/**********定义全局变量**********/float **a; /*存放A矩阵*/float *b; /*存放b矩阵*/float *x; /*存放x矩阵*/float p; /*精确度*/float w; /*松弛因子*/int n; /*未知数个数*/int c; /*最大迭代次数*/int k=1; /*实际迭代次数*//**********SOR迭代法**********/void SOR(float xk[]){int i,j;float t=0.0;float tt=0.0;float *xl;xl=(float *)malloc(sizeof(float)*(n+1)); for(i=1;i<n+1;i++){t=0.0;tt=0.0;for(j=1;j<i;j++)t=t+a[i][j]*xl[j];for(j=i;j<n+1;j++)tt=tt+a[i][j]*xk[j];xl[i]=xk[i]+w*(b[i]-t-tt)/a[i][i];}t=0.0;for(i=1;i<n+1;i++){tt=fabs(xl[i]-xk[i]);tt=tt*tt;t+=tt;}t=sqrt(t);for(i=1;i<n+1;i++)xk[i]=xl[i];if(k+1>c){if(t<=p)printf("\nReach the given precision!\n"); elseprintf("\nover the maximal count!\n");printf("\nCount number is %d\n",k);}elseif(t>p){k++;SOR(xk);}else{printf("\nReach the given precision!\n"); printf("\nCount number is %d\n",k);}}/**********程序*****开始**********/void main(){int i,j;printf("SOR方法\n");printf("请输入方程个数:\n");scanf("%d",&n);a=(float **)malloc(sizeof(float)*(n+1)); for(i=0;i<n+1;i++)a[i]=(float*)malloc(sizeof(float)*(n+1));printf("请输入三对角矩阵:\n");for(i=1;i<n+1;i++)for(j=1;j<n+1;j++)scanf("%f",&a[i][j]);for(i=1;i<n+1;i++)for(j=1;j<n;j++)b=(float *)malloc(sizeof(float)*(n+1)); printf("请输入等号右边的值:\n");for(i=1;i<n+1;i++)scanf("%f",&b[i]);x=(float *)malloc(sizeof(float)*(n+1)); printf("请输入初始的x:");for(i=1;i<n+1;i++)scanf("%f",&x[i]);printf("请输入精确度:");scanf("%f",&p);printf("请输入迭代次数:");scanf("%d",&c);printf("请输入w(0<w<2):\n");scanf("%f",&w);SOR(x);printf("方程的结果为:\n");for(i=1;i<n+1;i++)printf("x[%d]=%f\n",i,x[i]);}程序运行结果讨论和分析:①迭代法具有需要计算机的存贮单元较少,程序设计简单,原始系数矩阵在计算过程中始终不变等优点.②迭代法在收敛性及收敛速度等方面存在问题.[注:A必须满足一定的条件下才能运用以下三种迭代法之一.在Jacobi中不用产生的新数据信息,每次都要计算一次矩阵与向量的乘法,而在Gauss利用新产生的信息数据来计算矩阵与向量的乘法.在SOR中必须选择一个最佳的松弛因子,才能使收敛加速.]经过计算可知Gauss-Seidel方法比Jacobi方法剩点计算量,也是Jacobi方法的改进.可是精确度底,计算量高,费时间,需要改进.SOR是进一步改进Gauss-Seidel 而得到的比Jacobi,Gauss-Seidel方法收敛速度快,综合性强.改变松弛因子的取值范围来可以得到Jacobi,Gauss-Seidel方法.③选择一个适当的松弛因子是关键.结论:线性方程组1和2对于Jacobi 迭代法,Gauss-Seidol迭代法和SOR方法均不收敛,线性方程组3收敛。
SOR迭代法求解线性方程组
SOR迭代法求解线性方程组一实验名称:实验四:逐次超松弛迭代法。
二实验题目:求解下面的三元一次线性方程组:2x-y+2z=4;x+2y+3z=9;2x-2y-3z=-3;要求选取不同的松弛因子进行计算,并估计最优松弛因子的大小。
三实验目的:1.熟悉掌握逐次超松值迭代法的基本原理和基本方法。
2.学会用逐次超松弛迭代法解简单的方程组。
3.选取不同的w值(0<w<2)进行试探性的计算,从中摸索出近似的最佳松弛因子。
四基础理论:超松弛迭代法以及所涉及的主要算法为:Xi^(k+1)←(1-w)*Xi^(k)+w*Xi的共轭的(k+1)次幂。
五实验环境:Visual C++6.0。
六实验过程:1. 在程序中输入不同的数据时,会得到不同的结果。
2.大于1的时候的松弛因子,被称作超松弛法。
小于则被称做低松弛法。
由于松弛因子对方程组的收敛速度影响很大,所以在一定的误差范围内,选择不同的松弛因子时,迭代次数也会不同。
3. 按照实验题目中的数据输入时,比较结果当w=0.6时,会出现下面的结果:当w=0.7时得当w=0.8时得当w=0.9时,会出现下面的结果当w=1.0时得七结果分析:当在一定的误差范围内,有以上运行结果可以得出答案,最优松弛因子的范围为0.8。
八逐次超松弛迭代法程序代码:#include<iostream.h>#include<stdlib.h>#include<stdio.h>#include<math.h>void SOR(double w, double a[3][3], double b[3], double x[3], double esp) {double t[3];int flag=0;int n=0;while(!flag){flag=1;n++;t[0]=x[0]; t[1]=x[1]; t[2]=x[2];for(int i=0;i<3;i++){double m=b[i];for(int j=0;j<3;j++){m-=(a[i][j]*x[j]);}x[i]=x[i]+w*m/a[i][i];}for(int k=0;k<3;k++){if(fabs(x[k]-t[k])>=esp){flag=0;break;}}}printf("%d\n",n);}void main(){double a[3][3];double b[3];double x[3];double w,esp;a[0][0]=2; a[0][1]=-1; a[0][2]=2;a[1][0]=1; a[1][1]=2; a[1][2]=3;a[2][0]=2; a[2][1]=-2; a[2][2]=-3;b[0]=4; b[1]=9; b[2]=-3;x[0]= x[1]= x[2]=0;w=0.6;esp=0.0001;SOR(w,a,b,x,esp);for(int i=0;i<3;i++)printf("%f\n",x[i]);}。
数值分析线性方程组的迭代解法
数值分析课程实验报告实验名称 线性方程组的迭代解法Ax b =的系数矩阵对角线元素容许误差。
雅可比(Jacobi )迭代法解方程组的算法描述如下:任取初始向量(0)(0)1(xx =1+,并且 1,2,...,n ,计算 11(ni j ii j ib a a =≠-∑()k x ,结束;否则执行④,则不收敛,终止程序;否则转② 迭代法的算法描述)迭代法中,如果当新的分量求出后,马上用它来代替旧的分量,则可能会更快地接近方程组的准确解。
基于这种设想构造的迭代公式,n ,k = (2)算法可相应地从雅可比(Jacobi )迭代法改造得到(Gauss-Seidel)迭代得到的值进一()()()1((1k i ii k k i i x b a x x ωω==+-1,2,,n ,2,k =(3)为松弛因子(显然当1ω=塞德尔迭代公式) ()k ix 通常优于旧值(1)k ix -,在将两者加工成松弛值时,自然要求松弛因子1ω>,以尽量发挥新值的优势,这类迭代就称为逐次超松弛迭代法。
SOR 迭代的关键在于选取合适的松弛因子,松弛因子的取值对收敛速度影响很大,但如何选取最佳松弛因子的问题,至今仍未有效解决,在实际计算时,通常依据系数矩阵的特点,并结合以往的经验选取合适的松弛因子。
练习与思考题分析解答(0)(1,1,1,1)x =[ -0.999976, -0.999976, -0.999976, -0.999976]x =[ -0.99999, -0.999991, -0.999992, -0.999993]x =塞德尔迭代算法的收敛速度要比雅可比迭代算法的收敛速度快SOR 迭代实质上是高斯原理和基本方法相同。
如果选择合适的松弛因子,它能够加快收敛速度。
SOR 迭代算法更加普通,当选取一个合适的松弛因子后收敛速度明显加快。
迭代算法将前一步的结果[ -0.99999, -0.999991, -0.999992, -0.999993]x =[ -0.999992, -0.999993, -0.999994, -0.999995]x =[ -0.999993, -0.999994, -0.999995, -0.999995]x =[ -0.999992, -0.999993, -0.999994, -0.999995]x =[ -0.999999, -1.0, -1.0, -1.0]x =[ -0.999999, -1.0, -1.0, -1.0]x =因为为了保证迭代过程收敛,松弛因子1.3左右。
线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法
线性⽅程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代⽅法西京学院数学软件实验任务书【实验课题】雅克⽐迭代、⾼斯—赛德尔迭代、超松弛迭代【实验⽬的】学习和掌握线性代数⽅程组的雅克⽐迭代、⾼斯—赛德尔迭代、超松弛迭代法,并且能够熟练运⽤这些迭代法对线性⽅程组进⾏求解。
【实验内容】 1、问题重述:对于线性⽅程组A b X =,即:1111221n 12112222n 21122nn n n n n n na x a x a xb a x a x a x b a x a x a x b +++=??+++=??+++= (1),其中,111212122111 0 - - 0 - 0 0 () - - - 0 n ij n nn n nn nn a a a a a a a a a a ?--A ==--??0n D L U≡--()1,n b b b T=如何运⽤雅克⽐迭代、⾼斯—赛德尔迭代、超松弛迭代法对线性⽅程组进⾏求解。
2、⽅法原理: 2.1雅克⽐迭代迭代思想:⾸先通过A b X =构造形如()x f x =的等式,然后给定⼀个初值(0)(0)(0)(0)12(,,)n x x x X = ,再通过(1)()()k k f +X =X 进⾏迭代。
step1 :对(1)相应第i ⾏中的i x ⽤其它元素表⽰为:11111121111122,12211111()()11()()11()()n nj j j j j j n ni i ij ji j j j i j i j iin nn n nj j n n nj j j j nn nn x b a x x b a x a a x b a x x b a x a a x b a x x b a x a a ===≠=-==?=-=+-??=-=+-??=-=+-∑∑∑∑∑∑即:()D b L U X =-+XStep 2 :进⾏迭代(0)(0)(0)(0)12(1)11()(,,)()n k k x x x D b D L U +--?X =?X=-+X ? ,0,1,2k = ,取它的判断条件为()(1)k k -X -X ⼩于⼀个确定的误差值ε,跳出循环。
解线性方程组的迭代法资料
解线性方程组的迭代法Haha送给需要的学弟学妹摘要:因为理论的分析表明,求解病态的线性方程组是困难的,但是实际情况是否如此,需要我们来具体检验。
系数矩阵H 为Hilbert 矩阵,是著名的病态问题。
因而决定求解Hx b =此线性方程组来验证上述问题。
详细过程是通过用Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法四种方法求解Hx b =线性方程组。
关键词:病态方程组、Gauss 消去法、J 迭代法、GS 迭代法、SOR 迭代法目录:一、问题背景介绍二、建立正确额数学模型 三、求解模型的数学原理1、Gauss 消去法求解原理2、Jacobi 迭代法求解原理3、G-S 迭代法求解原理4、SOR 迭代法求解原理5、Jacobi 和G-S 两种迭代法收敛的充要条件 四、计算过程(一)Hilbert 矩阵维数n=6时1、Gauss 消去法求解2、Jacobi 迭代法求解3、G-S 迭代法求解4、SOR 迭代法求解(二)Hilbert 矩阵维数n=20、50和100时1、G-S 迭代法求解图形2、SOR 迭代法求解图形 五、编写计算程序 六、解释计算结果1、Gauss 消去法误差分析2、G-S 迭代法误差分析3、SOR 迭代法误差分析G-S 迭代法与SOR 迭代法的误差比较 七、心得体会正文:一、问题背景介绍。
理论的分析表明,求解病态的线性方程组是困难的。
实际情况是否如此,会出现怎样的现象呢?二、建立正确的数学模型。
考虑方程组Hx b =的求解,其中系数矩阵H 为Hilbert 矩阵,,,1(), , ,1,2,,1i j n n i j H h h i j n i j ⨯===+-这是一个著名的病态问题。
通过首先给定解(为方便计算,笔者取x 的各个分量等于1),再计算出右端,b Hx =这样Hx b =的解就明确了,再用Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法四种方法分别求解,Hx b =将求解结果与给定解比较,而后求出上述四种方法的误差,得出哪种方法比较好。
数值分析实验报告--实验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。
实验三:解线性方程组的迭代法
实验三:解线性方程组的迭代法系部学号实验题目数计系专业姓名计算机科学与技术日期成绩2010 年 12 月实验三:实验三:解线性方程组的迭代法一.实验目的 1.熟练运用已学过的迭代法求解线性方程组,包括雅克比迭代法、迭代法和 SOR 迭代法。
G-S 2.加深对计算方法技巧,选择正确的计算方法来求解各种线性方程组。
3.培养使用电子计算机进行科学计算和解决问题的能力。
二.实验环境 VC++6.0 实验语言:c++ 三.实验内容 1.试用雅克比迭代法和高斯塞德尔迭代法求解如下的线性方程组,设置精度为 1.0e-6:10 1 1 x1 6.2 1 10 2 x2 = 8.5 2 1 5 x 3.2 3 2. 用 w=1 及 w=1.25 的 SOR 方法求解如下的线性方程组,设置精度为 0.5e-7(初值为(1,1,1))4 3 0 x1 24 3 4 1 x2 = 30 0 1 4 x 24 3 四.实验公式迭代法的基本思想:根据方程组 Ax = b 设计出一个迭代公式,然后将任意选取的一初始向量 x 代公式,求出 x 序列 {xvvv (0)代入迭v (1),再以 xv (1)代入同一迭代公式,求出 xv (2),如此反复进行,得到向量v(k )v } .当 {x ( k ) } 收敛时,其极限即为原方程组的解。
v1.雅克比迭代法:v a ≠ 0(i = 1, 2,..., n) ,M 为最大迭代次数,ε设方程组 Ax = b 的系数矩阵对角线元素 ii为容许误差. 雅可比(Jacobi)迭代法解方程组算法步骤如下:①取初始向量 x = ( x1 , x2 ,..., xn ) ,令 k = 0 .(0) (0) (0) T v②对 i = 1, 2,..., n ,计算xi( k +1) =n 1 (bi ∑ aij x (jk ) ) . aii j =1 j ≠i。
数值分析报告用直接法和迭代法求解线性方程组
用直接法和迭代法求解线性方程组一、实验目的:通过实验,熟悉线性方程组的列主元消元法、LU 分解法、平方根法、追赶法、Jacobi 迭代法、Gauss-Seidel 迭代法和SOR 迭代法。
二、实验内容:1、用追赶法求解三对角方程组Ax=b ,其中⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--------=2100012100012100012100012A ,⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=00001b 2、用平方法求解方程组⎪⎪⎪⎭⎫ ⎝⎛-=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--103432122484548416x x x 。
三、实验要求:1.编程实现。
2.可以自拟实验题,要求同上。
四、实验程序及结果:1、用追赶法求解线性方程组a ={-1,-1,-1,-1};d={2,2,2,2,2};c={-1,-1,-1,-1};b={1,0,0,0,0};n=Length[d];l=Table[0,{i,1,n}];u=Table[0,{i,1,n-1}];l[[1]]=d[[1]];u[[1]]=c[[1]]/d[[1]];For[k=2,k<=n-1,k++,l[[k]]=d[[k]]-a[[k-1]]u[[k-1]];u[[k]]=c[[k]]/l[[k]];];l[[n]]=d[[n]]-a[[n-1]]u[[n-1]];y=Table[0,{i,n}];x=Table[0,{i,n}];y[[1]]=b[[1]]/l[[1]];For[k=2,k<=n,k++,y[[k]]=(b[[k]]-a[[k-1]]y[[k-1]])/l[[k]];] x[[n]]=y[[n]];For[k=n-1,k>=1,k+=-1,x[[k]]=y[[k]]-u[[k]]x[[k+1]];] Print["用追赶法求得的解为:x=",x]Print["x=",MatrixForm[x]]用追赶法求得的解为:x= {5/6,2/3,1/2,1/3,1/6} ⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=6131213265x 2、用平方根法求解方程组:A={{16,4,8},{4,5,-4},{8,-4,22}};b={-4,3,10};n=3;L=Table[0,{i,n},{j,n}];For[i=1,i<=n,i++,L[[i,i]]=Sqrt[A[[i,i]]-∑-=112]],[[i k k i L ];For[j=i+1,j<=n,j++,L[[j,i]]=(A[[j,i]]-∑-=11]]),[[]],[[(i k k i L k j L )/L[[i,i]];]]; Print["矩阵 L=",MatrixForm[L]]y=Table[0,{i,n}];y[[1]]=b[[1]]/L[[1,1]];For[i=2,i<=n,i++,y[[i]]=(b[[i]]-]][[*]],[[11j y j i L i j ∑-=)/L[[i,i]];]Print["由Ly=b,计算得 Y=",MatrixForm[y]](*由Ux=y,计算得x*)x=Table[0,{i,n}];L1=Transpose[L];For[i=n,i>0,i+=-1,x[[i]]=(y[[i]]-∑+=ni k k x i k L 1]][[*]],[[)/L[[i,i]];] Print["由LTx=y,计算得 X=",MatrixForm[x]]⎪⎪⎪⎭⎫ ⎝⎛-=300320214L 由Ly=b,计算得⎪⎪⎪⎭⎫ ⎝⎛-=621Y由LTx=y,计算得⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-=2494x 五、实验总结:通过本次实验我加深了对各种求解线性方程组方法的了解。
线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法
西京学院数学软件实验任务书【实验课题】雅克比迭代、高斯—赛德尔迭代、超松弛迭代 【实验目的】学习和掌握线性代数方程组的雅克比迭代、高斯—赛德尔迭代、超松弛迭代法,并且能够熟练运用这些迭代法对线性方程组进行求解。
【实验内容】 1、问题重述:对于线性方程组A b X =,即:1111221n 12112222n 21122nn n n n n n n a x a x a x b a x a x a x b a x a x a x b +++=⎧⎪+++=⎪⎨⎪⎪+++=⎩ (1),其中,111212122111 0 - - 0 - 0 0 () - - - 0 n ij n nn n nn nn a a a a a a a a a a ⨯--⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥A ==--⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ 0n D L U ⎡⎤⎢⎥⎢⎥≡--⎢⎥⎢⎥⎣⎦()1,n b b b T=如何运用雅克比迭代、高斯—赛德尔迭代、超松弛迭代法对线性方程组进行求解。
2、方法原理: 2.1雅克比迭代迭代思想:首先通过A b X =构造形如()x f x =的等式,然后给定一个初值(0)(0)(0)(0)12(,,)n x x x X =,再通过(1)()()k k f +X =X 进行迭代。
step1 :对(1)相应第i 行中的i x 用其它元素表示为:11111121111122,12211111()()11()()11()()n nj j j j j j n ni i ij ji j j j i j i j iin nn n nj j n n nj j j j nn nn x b a x x b a x a a x b a x x b a x a a x b a x x b a x a a ===≠=-==⎧=-=+-⎪⎪⎪⎪⎨=-=+-⎪⎪⎪=-=+-⎪⎩∑∑∑∑∑∑即:()D b L U X =-+XStep 2 :进行迭代(0)(0)(0)(0)12(1)11()(,,)()n k k x x x D b D L U +--⎧X =⎨X=-+X ⎩,0,1,2k =,取它的判断条件为()(1)k k -X -X 小于一个确定的误差值ε,跳出循环。
LAB07_解线性方程组的基本迭代法实验
Lab07.解线性方程组的基本迭代法实验【实验目的和要求】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 为五对角矩阵⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡------------------321412132141412132141412132141412132141213 (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及以上版本。
实验讲评:实验成绩:评阅教师: 200 年 月 日Lab07.解线性方程组的基本迭代法实验一、算法描述1、雅可比迭代法描述如下:将线性方程组b Ax =中的系数矩阵n n ij R a A ⨯∈=)(分为三部分UL D a a a a a a a a aa a a a a a A n n n n n n n n n n n n nn --=⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛-------⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛-------⎪⎪⎪⎪⎪⎭⎫⎝⎛=------00000000,121,211,1121,212,11,1212211设),,2,1(0n i a ii =≠选取M 为A 的对角元素部分,即选取M=D (对角矩阵),A=D-N,由⎪⎩⎪⎨⎧=+=+,,1,0,)(1)(k (0)k f Bx xx k初始向量得到解Ax=b 的雅可比迭代法 ⎪⎩⎪⎨⎧=+=+,,1,0,)(1)(k (0)k f Bx xx k初始向量其中b D f J U L D A D I B 111,)(---=≡+=-=,称J 为解Ax=b 的雅可比迭代法的迭代矩阵。
数值分析实验报告
实验五 解线性方程组的直接方法实验5.1 (主元的选取与算法的稳定性)问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。
但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。
主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。
实验内容:考虑线性方程组n n n R b R A b Ax ∈∈=⨯,,编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss 消去过程。
实验要求:(1)取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。
取n=10计算矩阵的条件数。
让程序自动选取主元,结果如何?(2)现选择程序中手动选取主元的功能。
每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。
若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。
(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。
(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。
重复上述实验,观察记录并分析实验结果。
思考题一:(Vadermonde 矩阵)设⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=∑∑∑∑====n i i n n i i ni i n i i n n n n n n nx x x x b x x x x x x x x x x x x A 002010022222121102001111 ,, 其中,n k k x k ,,1,0,1.01 =+=,(1)对n=2,5,8,计算A 的条件数;随n 增大,矩阵性态如何变化?(2)对n=5,解方程组Ax=b ;设A 的最后一个元素有扰动10-4,再求解Ax=b(3)计算(2)扰动相对误差与解的相对偏差,分析它们与条件数的关系。
数学实验“线性方程组的J-迭代,GS-迭代,SOR-迭代解法”实验报告(内含matlab程序代码)
西京学院数学软件实验任务书实验四实验报告一、实验名称:线性方程组的J-迭代,GS-迭代,SOR-迭代。
二、实验目的:熟悉线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法,编程实现雅可比方法和高斯-赛德尔方法求解非线性方程组12123123521064182514x x x x x x x x +=⎧⎪++=⎨⎪++=-⎩的根,提高matlab 编程能力。
三、实验要求:已知线性方程矩阵,利用迭代思想编程求解线性方程组的解。
四、实验原理:1、雅可比迭代法(J-迭代法):线性方程组b X A =*,可以转变为:迭代公式(0)(1)()k 0,1,2,....k k J XXB 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 XU L MXk k ++=+)()1()(,既有i ni j k i iji j k iij k iij b X aXa X a +--=∑∑+=-=+1)(11)()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 iTn 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 iTn X a X a b a X X X X X 其余部分与雅克比迭代类似。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西京学院数学软件实验任务书
实验四实验报告
一、实验名称:线性方程组的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。