数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组
- 格式:doc
- 大小:96.50 KB
- 文档页数:6
线性方程组的迭代解法(Jacobi迭代法Gauss-Seidel迭按照算法(Jacobi迭代法)编写Matlab程序(Jacobi.m) function [x, k, index]=Jacobi(A, b, ep, it_max)% 求解线性方程组的Jacobi迭代法,其中% A --- 方程组的系数矩阵% b --- 方程组的右端项% ep --- 精度要求。
省缺为1e-5% it_max --- 最大迭代次数,省缺为100% x --- 方程组的解% k --- 迭代次数% index --- index=1表示迭代收敛到指定要求;% index=0表示迭代失败if nargin <4 it_max=100; endif nargin <3 ep=1e-5; endn=length(A); k=0;x=zeros(n,1); y=zeros(n,1); index=1;while 1for i=1:ny(i)=b(i);for j=1:nif j~=iy(i)=y(i)-A(i,j)*x(j);endendif abs(A(i,i))<1e-10 | k==it_maxindex=0; return;endy(i)=y(i)/A(i,i);endif norm(y-x,inf)<epbreak;endx=y; k=k+1;end用Jacobi迭代法求方程组的解。
输入:A=[4 3 0;3 3 -1;0 -1 4];b=[24;30;-24];[x, k, index]=Jacobi(A, b, 1e-5, 100)输出:x =-2.999811.9987-3.0001k =100index =2. 熟悉Gauss-Seidel迭代法,并编写Matlab程序function[v,sN,vChain]=gaussSeidel(A,b,x0,errorBound,maxSp) %Gauss-Seidel迭代法求解线性方程组%A-系数矩阵 b-右端向量 x0-初始迭代点 errorBound-近似精度maxSp-最大迭代次数%v-近似解 sN-迭代次数 vChain-迭代过程的所有值step=0;error=inf;s=size(A);D=zeros(s(1));vChain=zeros(15,3);%最多能记录15次迭代次数k=1;fx0=x0;for i=1:s(1)D(i,i)=A(i,i);end;L=-tril(A,-1);U=-triu(A,1);while error>=errorBound & step<maxspx0=inv(D)*(L+U)*x0+inv(D)*b;vChain(k,:)=x0';k=k+1;error=norm(x0-fx0);fx0=x0;step=step+1;endv=x0;sN=step;用Gauss-Seidel迭代法求解上题的线性方程组,取。
数值分析迭代法数值分析实验报告 jacobi迭代和seidel迭代分析导读:就爱阅读网友为您分享以下“数值分析实验报告jacobi迭代和seidel迭代分析”资讯,希望对您有所帮助,感谢您对的支持!数值分析实验报告一、实验目的1、了解熟悉jacobi迭代法和seidel迭代法的解法2、将原理与matlab语言结合起来,编程解决问题3、分析实验结果二、实验题目设线性方程组为2 2 31 201 31 x1 1 7 x801240 2 x 103 10 15 x 1 4考察用jacobi迭代法和seidel迭代法求解该线性方程组的收敛情况。
如果收敛,给出误差满足x(k) x(k 1)10 4的解。
三、实验原理将A 作如下分解A D L U这里a11D a22 0 a ,L 21 anna n100 a n2 0 0 a12 a1n 0 0 0 a2n ,0 00 0 JacobiU迭代矩阵为BJ D 1(L U)Seidel迭代矩阵为BS (D L) 1U它们的迭代格式都可化为x(k 1) Bx(k) g则迭代格式对任何初值都瘦脸的充要条件是迭代矩阵谱半径 (B) max k 1,其中, k是矩阵B的n个特征值,k 1,2 ,n 1 k nJacobi迭代矩阵的特征方程为det( I B J) 0Seidel迭代矩阵的特征方程为det( I B S) det( (D L) U) 0四、实验内容用matlab编写计算jacobi迭代矩程序,建立m文件如下:function[M]=BJ(A)D=diag(diag(A));L=tril(-A)+D;U=triu(-A)+D;M=inv(D)*(L+U);输入:>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5];>> [M]=BJ(A)M:M =0 -0.0500 0.1500 0.0500-0.1667 0 0 -0.38890.0250 -0.0500 0 0.0500-0.2000 0 0.2000 00 0.050.150.05 0.166700 0.3889 则jacobi迭代矩阵为:BJ 0.025 0.0500.05 0.2 00.20用matlab求jacobi迭代矩阵的特征根的算法如下:>> A=[0 -0.05 0.15 -0.05;-0.67 0 0 -0.39;0.025 -0.05 0 0.05;-0.2 0 0.2 0];[V,D]=eig(A)V =-0.1892 + 0.0450i -0.1892 - 0.0450i -0.3812 -0.5005-0.9467 -0.9467 0.8867 0.5461 -0.1528 - 0.1181i -0.1528 + 0.1181i -0.2099 -0.0466 -0.1056 + 0.1325i -0.1056 - 0.1325i 0.1561 0.6701D =-0.1774 + 0.0864i 0 0 0 0 -0.1774 - 0.0864i 0 0 0 0 0.2194 0 0 0 0 0.1355 则最大特征根为:0.2194 则(BJ) 0.2194 1,所以jacobi迭代法收敛用matlab编程jacobi迭代法求根的算法:function [n,x]=jacobi(A,b,X,nm,w)%用雅克比迭代法求解方程组Ax=b%输入:A为方程组的系数矩阵,b为方程组右端的列向量,X为迭代初值构成的列向量,nm为最大迭代次数,w 为误差精度%输出:x为求得的方程组的解构成的列向量,n为迭代次数n=1;m=length(A);D=diag(diag(A)); %令A=D-L-U,计算矩阵DL=tril(-A)+D; %令A=D-L-U,计算矩阵LU=triu(-A)+D; %令A=D-L-U,计算矩阵UM=inv(D)*(L+U); %计算迭代矩阵g=inv(D)*b; %计算迭代格式中的常数项%下面是迭代过程while n<=nmx=M*X+g; %用迭代格式进行迭代if norm(x-X,2)<wdisp(…迭代次数为‟);ndisp(…方程组的解为‟);xreturn;%上面:达到精度要求就结束程序,输出迭代次数和方程组的解endX=x;n=n+1;end%下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并不是方程组的解)disp(…在最大迭代次数内不收敛!‟);输入数据:>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5];b=[1;2;10;-1];X=[0;0;0;0];>> nm=100;>> w=1e-4;>> [n,x]=jacobi1(A,b,X,nm,w)迭代次数为n =6方程组的解为x =0.06870.16450.2352-0.1667n =6x =0.06870.16450.2352-0.1667所以,满足精度的根为x = 0.0687 0.1645 0.2352用matlab编程计算seidel迭代矩阵算法为:function[M]=BS(A)D=diag(diag(A));L=tril(-A)+D;U=triu(-A)+D;M=inv(D-L)*U;输入:>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5]; >> [M]=BS(A)M =0 -0.0500 0.1500 0.0500 0 0.0083 -0.0250 -0.3972 -0.1667 迭代次数为6次0 -0.0017 0.0050 0.07110 0.0097 -0.0290 0.0042则seidel迭代矩阵为:0.150.05 0 0.05 00.0083 0.025 0.3972BS 0 0.00170.0050.0711 00.0097 0.0290.0042用matlab编程求得seidel矩阵的算法为:>> A=[0 -0.05 0.15 0.05;0 0.0083 -0.025 -0.3972;0 -0.0017 0.005 0.0711;0 0.0097 -0.029 0.0042];[V,D]=eig(A)V =1.0000 -0.1596 + 0.6750i -0.1596 - 0.6750i -0.91040 0.6965 0.6965 0.3924 0 -0.1250 + 0.0028i -0.1250 - 0.0028i 0.1313 0 0.0070 - 0.1348i 0.0070 + 0.1348i 0.0000D =0 0 0 0 0 0.0088 + 0.0768i 0 0 0 0 0.0088 - 0.0768i 0 0 0 0 -0.0001则特征根为 0 0.008+0.0768i 0.0088-0.0768i-0.0001则 (BS) 0.08 1,所以seidel迭代法收敛用seidel迭代法求根的算法为:function [n,x]=gaussseidel(A,b,X,nm,w)%用高斯-赛德尔迭代法求解方程组Ax=b%输入:A为方程组的系数矩阵,b为方程组右端的列向量,X为迭代初值构成的列向量,nm为最大迭代次数,w 为误差精度%输出:x为求得的方程组的解构成的列向量,n为迭代次数n=1;m=length(A);I=eye(m); %生成m*m阶的单位矩阵D=diag(diag(A)); %令A=D-L-U,计算矩阵DL=tril(-A)+D; %令A=D-L-U,计算矩阵LU=triu(-A)+D; %令A=D-L-U,计算矩阵U M=inv(D-L)*U; %计算迭代矩阵g=inv(I-inv(D)*L)*(inv(D)*b); %计算迭代格式中的常数项%下面是迭代过程while n<=nmx=M*X+g; %用迭代格式进行迭代if norm(x-X,2)<wdisp(…迭代次数为‟);ndisp(…方程组的解为‟);xreturn;%上面:达到精度要求就结束程序,输出迭代次数和方程组的解endX=x;n=n+1;end%下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并不是方程组的解)disp(…在最大迭代次数内不收敛!‟);disp(…最大迭代次数后的结果为‟);x输入数据:>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5];b=[1;2;10;-1];X=[0;0;0;0];nm=100;w=1e-4;[n,x]=gaussseidel(A,b,X,nm,w) 迭代次数为n =5方程组的解为x =0.06870.16450.2352-0.1667n =5x =0.06870.16450.2352-0.166满足精度的根为x =0.0687 0.1645 0.2352 -0.1667 迭代次数为5次五、实验分析从实验过程可以看到求出满足精度的根,seidel迭代要比jacobi迭代快,这是因为在jacobi迭代计算中,计算向量x(k 1)时是按分量的角标由小到大依次计算的。
运用雅可比迭代和高斯塞德尔迭代法求的解matlab雅可比迭代和高斯塞德尔迭代法是解线性方程组的常用方法,它们都是迭代法的一种。
在Matlab中,可以通过编写程序实现这两种迭代法来求解线性方程组。
首先,我们需要了解什么是线性方程组。
线性方程组是一组等式,其中每个等式都是由一些未知量的系数和一个已知量组成的,这些未知量和已知量的关系是线性的。
例如,下面的方程组就是一个线性方程组:2x + 3y = 85x - 2y = 1要求解这个方程组,我们可以使用矩阵的形式表示它:|2 3| |x| = |8||5 -2| |y| |1|接下来,我们可以用雅可比迭代法和高斯塞德尔迭代法来求解这个线性方程组。
雅可比迭代法是一种简单的迭代法,它的基本思想是将方程组的每个未知量视为新的未知量,然后用当前的未知量估计下一个未知量的值。
具体实现方法是将原方程组改写为下面的形式:x = D^(-1)(b - (L+U)x)其中,D是原方程组的对角线部分,L是原方程组的下三角部分(除去对角线),U是原方程组的上三角部分(除去对角线)。
这个迭代公式表示,每次使用上一次迭代得到的未知量来估计下一个未知量的值,直到达到一定的精度为止。
在Matlab中,可以使用以下代码来实现雅可比迭代法求解线性方程组:function [x,k]=jacobi(A,b,x0,maxk,tol)n=length(b); x=x0; k=0;while(k<maxk)k=k+1;for i=1:nx(i)=(b(i)-A(i,1:i-1)*x0(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);enderr=norm(x-x0);if err<tol; return; endx0=x;endend其中,A是系数矩阵,b是常数向量,x0是初始解向量,maxk是最大迭代次数,tol是迭代精度。
高斯塞德尔迭代法和雅可比迭代法类似,只是在推导迭代公式时使用了更多的新的未知量来计算下一个未知量的值。
实验五 线性方程组的迭代法实验一. 实验目的(1)深入理解线性方程组的迭代法的设计思想,学会利用系数矩阵的性质以保证迭代过程的收敛性,以及解决某些实际的线性方程组求解问题。
(2)熟悉Matlab 编程环境,利用Matlab 解决具体的方程求根问题。
二. 实验要求建立Jacobi 迭代公式、Gauss-Seidel 迭代公式和超松弛迭代公式,用Matlab 软件实现线性方程组求解的Jacobi 迭代法、Gauss-Seidel 迭代法和超松弛迭代法,并用实例在计算机上计算。
三. 实验内容1. 实验题目(1)分别利用Jacobi 迭代和Gauss-Seidel 迭代求解下列线性方程组,取()T 0,0,0,0,0,0=x ,要求精度510-=ε:⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡---------------626050410100141010014001100410010141001014654321x x x x x x ①Jacobi 迭代:②Gauss-Seidel迭代:(2)分别取1ω、1.05、1.1、1.25和1.8,用超松弛法求解上面的方程组,要求精度=为5ε。
=10-超松弛迭代代码如下所示:运行时初始化如下:分别以不同的松弛因子代入,W=1:W=1.05W=1.1:W=1.25W=1.8:当最大迭代次数增加时,我们可以看到,x向量的各个元素都变无穷大了,迭代发散2. 设计思想要求针对上述题目,详细分析每种算法的设计思想。
求解线性方程组的迭代法,其实质是将所给的方程组逐步地对角化或三角化,即将线性方程组的求解过程加工成对角方程组或三角方程组求解过程的重复。
⑴Jacobi迭代:将一般形式的线性方程组归结为对角方程组求解过程的重复;⑵Gauss-Seidel迭代:将一般形式的线性方程组的求解归结为下三角方程组求解过程的重复;⑶超松弛法:选择合适的松弛因子,利用旧值生成新值,使迭代加速;四.实验体会对实验过程进行分析总结,对比求解线性方程组的不同方法的优缺点,指出每种方法的设计要点及应注意的事项,以及自己通过实验所获得的对线性方程组求解问题的各种解法的理解。
Jacobi 迭代法与Gauss-Seidel迭代法算法比较目录1 引言 (1)1.1Jacobi迭代法 (2)1.2Gauss-Seidel迭代法 (2)1.3逐次超松弛(SOR)迭代法 (3)2算法分析 (3)3 结论 (5)4 附录程序 (5)参考文献 (8)Jacobi 迭代法与Gauss-Seidel 迭代法比较1 引言解线性方程组的方法分为直接法和迭代法,直接法是在没有舍入误差的假设下,能在预定的运算次数内求得精确解,而迭代法是构造一定的递推格式,产生逼近精确值的序列。
这两种方法各有优缺点,直接法普遍适用,但要求计算机有较大的存储量,迭代法要求的存储量较小,但必须在收敛性得以保证的情况下才能使用。
对于高阶方程组,如一些偏微分方程数值求解中出现的方程组,采用直接法计算代价比较高,迭代法则简单又实用,所以比较受工程人员青睐。
迭代法求解方程组就是构造一个无限的向量序列,使它的极限是方程组的解向量。
即使计算机过程是精确的,迭代法也不能通过有限次算术运算求得方程组的精确解,而只能逐步逼近它。
因此迭代法存在收敛性与精度控制的问题。
迭代法是常用于求解大型稀疏线性方程组(系数矩阵阶数较高且0元素较多),特别是某些偏微分方程离散化后得到的大型稀疏方程组的重要方法。
设n 元线性微分方程组b Ax = (1)的系数矩阵A 非奇异,右端向量0≠b ,因而方程组有唯一的非零解向量。
而对于这种线性方程组的近似解,前辈们发展研究了许多种有效的方法,有Jacobi 迭代法、Gauss —Seidel 迭代法,逐次超松弛迭代法(SOR 法),这几种迭代方法均属一阶线性定常迭代法,即若系数矩阵A 分解成两个矩阵N 和P 的差,即P N A -=;其中N 为可逆矩阵,线性方程组(1)化为:b x P N =-)(b Px Nx +=b N Px N x 11--+=可得到迭代方法的一般公式:d Gx xk k +=+))1(( (2)其中:P N G 1-=,b N d 1-=,对任取一向量)0(x 作为方程组的初始近似解,按递推公式产生一个向量序列)1(x ,)2(x ,...,)k x(,...,当k 足够大时,此序列就可以作为线性方程组的近似解。
应用Jacobi 迭代法和Gauss-Seidel 迭代法求解线性方程组数理学院 作者:耿志银(送给学弟学妹!)摘要:在面对解线性方程组的问题时,直接法虽然很方便,但直接法大多数均需对系数矩阵A 进行分解,无法保持A 的稀疏性。
但在实际应用中,我们常常得面对大型稀疏性方程的求解问题,此时,迭代法比直接法更适用。
迭代法是按照某种规则构造一个向量序列{x k },使其极限向量*x 是方程组Ax=b 的精确解。
这里主要介绍Jacobi 迭代和Gauss-Seidel 迭代。
关键词:Jacobi 迭代 Gauss-Seidel 迭代 向量序列 极限向量引言:Jacobi 迭代法和Gauss-Seidel 迭代法是两类重要的方法,他能充分利用系数矩阵的稀疏性,减少内存占用量,而且程序简单,缺点是计算量大,同时还有收敛性的问题需要讨论。
基本原理:Jacobi 迭代设有方程组AX=b ,方程形式为1nij jij a xb ==∑(i=1,2,…,n ),假设|A|≠0,且ii a ≠0(i=1,2,…,n ),从第i个方程中解出x i ,得11x ()(1,2,...,)ni i ij jj ii j ib a x i n a =≠=-=∑,写成易于迭代的形式:(1)()11x ()(1,2,...,nk k i i ij j j ii j ib a x i n a +=≠=-=∑;k=0,1,2,…)这就是Jacobi 迭代的分量形式。
令A=D-L-U ,,其中D=diag(11a ,22a ,…,nna ),L=21313212,10000n n n n a a a a a a -⎡⎤⎢⎥-⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥---⎣⎦,121312321,0000n n n n a a a a a U a ----⎡⎤⎢⎥--⎢⎥⎢⎥=⎢⎥-⎢⎥⎢⎥⎣⎦,此时AX=b可以写成x=Bx+g,其中B=11(),D L U g D b --+=.若给定初始向量(0)(0)(0)012(,,...,)T n x x x x =,并带入x=Bx+g 的右端,就能计算出一个新的向量1x ,即10x Bx g =+;再把1x 代入x=Bx+g 的右端,又得到了一个向量2x ;依次类推有1x Bx g k k -=+,k=1,2,3,…这个就是Jacobi 迭代格式。
4. 线性方程组求解4.用雅格比法与高斯-赛德尔迭代法解下列方程组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)雅可比法A 为所求方程组的系数矩阵,将系数矩阵()n n ij A a R ⨯=∈分为三部分,即111212221211000000n n nn n n a a a a a a A a a a --⎛⎫⎛⎫⎛⎫ ⎪ ⎪ ⎪-- ⎪ ⎪ ⎪=-- ⎪ ⎪ ⎪ ⎪⎪ ⎪--⎝⎭⎝⎭⎝⎭D L U ≡--构造迭代方程,选取M 为A 的对角元素部分,即选取M D =,A D N =-,由此构造得到解AX b =的雅可比迭代法如下:()()()01,,0,1,,k k x xBx f k +⎧⎨=+=⎩ 初始向量(4-1)其中()111B I D A D L U J f D b ---=-=+≡=,,J 为雅可比迭代矩阵。
若A 为n 阶矩阵,迭代公式如下:()()()()()()()00001211,,,()/1,2,,;0,1,T n n k k ii ij j ii j j ix x x x x b a x a i n k +=≠⎧=⎪⎪⎪=-⎨⎪⎪==⎪⎩∑初始向量表示迭代次数(4-2) 在运行程序时首先需要手动输入矩阵A ,阶数n 、向量b 和初始向量x 0,根据式(4-2)不断迭代可求解得近似解。
分别用 jacobi 迭代法和 gauss-seidel 迭代法,求解方程组【jacobi 迭代法和 gauss-seidel 迭代法分别应用于方程组的求解】1. 引言在数学领域中,方程组的求解一直是一个重要的课题。
为了解决复杂的线性方程组,人们提出了各种迭代方法,其中 jacobi 迭代法和gauss-seidel 迭代法是两种常见的方法。
本文将探讨这两种迭代方法在求解方程组中的应用。
2. jacobi 迭代法的原理和应用jacobi 迭代法是一种基于逐次逼近的迭代方法。
对于线性方程组AX=B,其中 A 是系数矩阵,X 是未知数向量,B 是已知向量。
我们可以通过以下公式进行逐次逼近:X(k+1) = D^(-1)*(B - (L+U)X(k))其中,D、L、U 分别是 A 的对角线、下三角和上三角矩阵。
jacobi 迭代法的优点在于易于理解和实现,但在收敛速度上较慢,需要进行多次迭代才能得到精确解。
在实际应用中,需要根据实际情况选择合适的迭代次数。
3. gauss-seidel 迭代法的原理和应用与 jacobi 迭代法类似,gauss-seidel 迭代法也是一种基于逐次逼近的迭代方法。
不同之处在于,gauss-seidel 迭代法在计算 X(k+1) 时利用了已经得到的 X(k) 的信息,即:X(k+1)_i = (B_i - Σ(A_ij*X(k+1)_j,j≠i))/A_ii这种方式使得 gauss-seidel 迭代法的收敛速度较快,通常比 jacobi 迭代法更快,尤其是对于对角占优的方程组。
4. 分别用 jacobi 迭代法和 gauss-seidel 迭代法求解方程组为了更具体地说明 jacobi 迭代法和 gauss-seidel 迭代法的应用,我们分别用这两种方法来求解以下方程组:2x1 + x2 = 9x1 + 3x2 = 11我们将该方程组写成矩阵形式 AX=B:|2 1| |x1| |9||1 3| * |x2| = |11|我们根据 jacobi 迭代法和 gauss-seidel 迭代法的原理,依次进行迭代计算,直到满足收敛条件。
数值分析课程实验报告实验名称 线性方程组的迭代解法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左右。
佛山科学技术学院实 验 报 告课程名称 数值分析实验项目 迭代法专业班级 机械工程 姓 名 余红杰 学 号 2111505010指导教师 陈剑 成 绩 日 期 月 日一. 实验目的1、 在计算机上用Jacobi 迭代法和Gauss-Seidel 迭代法求线性方程组 。
2、 在计算机上用二分法和Newton 迭代法求非线性方程 的根。
二. 实验要求1、按照题目要求完成实验内容;2、写出相应的Matlab 程序;3、给出实验结果(可以用表格展示实验结果);4、分析和讨论实验结果并提出可能的优化实验。
5、写出实验报告。
三. 实验步骤1、用Matlab 编写Jacobi 迭代法和Gauss-Seidel 迭代法求线性方程组Ax b =的程序。
2、用Matlab 编写二分法和Newton 法求非线性方程()0f x =的根程序。
3、设⎪⎪⎪⎭⎫ ⎝⎛--=212120203A ,T b )1,3,1(=,对于线性方程组b Ax =,考虑如下问题: (1)分别写出Jacobi 迭代矩阵和Gauss-Seidel 迭代矩阵(2)用Jacobi 迭代法和Gauss-Seidel 迭代法解该方程时,是否收敛?谁收敛的更快?(3)用实验步骤1编好的两种迭代法程序进行实验,通过数值结果验证(2)的结论。
4、用调试好的二分法和Newton 迭代法程序解决如下问题求020sin 35=-+-x x e x 的根,其中控制精度810-=eps ,最大迭代次数50=M 。
四. 实验结果1.%Jacob.mfunction [x,B] = Jacob(A,b,n)%Jacobi迭代求解方程组Ax=b,系数矩阵A,迭代次数n%求解的准备工作,构建各迭代系数阵等:m = length(A);D = diag(diag(A));L = -tril(A,-1);U = -triu(A, 1);J = D^(-1)*(L+U);B = J;f = D^(-1)*b;%初始化x即启动值:x = zeros(m,1);%根据x(k+1)=Jx(k)+f进行矩阵运算:for i=1:nx = J*x + f;end%GauSeid.mfunction [x,G] = GauSeid(A,b,n)%Gauss-Seidel迭代求解方程组Ax=b,系数矩阵A,迭代次数n %求解的准备工作,构建各迭代系数阵等:m = length(A);D = diag(diag(A));L = -tril(A,-1);U = -triu(A, 1);G = inv(D-L)*U;f = inv(D-L)*b;%初始化矩阵:%根据x(k+1)=Gx(k)+f进行矩阵运算:x = zeros(m,1);for i = 1:nx = G*x + f;end2.%Dichotomy.mfunction x=Dichotomy(x1,x2,p,n)%利用二分法求根,区间[x1,x2]%p为精度a = x1;b = x2;%进行n次二分:%第一个条件判断根在a,b区间内%第二个条件判断是否中间点就是根,是则迭代终止;%第三个条件判断二分后根在中点左侧还是右侧;%第四个条件判断精度是否达标,用区间长度代替for i=1:nif f(a)*f(b)<0x0 = (a+b)/2;p0 = (b-a)/(2^i);if f(x0)==0x = x0;elseif f(a)*f(x0)<0b = x0;else a= x0;endendendif p0>pcontinue;elsex = x0;break;endend%NewIterat.mfunction x=NewIterat(x0,p,n)%利用牛顿迭代法求根;%x0为启动点,估计的靠近根的值,p为精度,n为迭代次数;syms x1;%设置一个自变量x1,方便后面的求导:f1 = diff(f(x1));%进行n次迭代,精度达标会提前终止;%第一个判断是根据控制条件来确定真实误差是选绝对还是相对误差;%第二个判断是确定精度是否满足要求for i=1:nx1 = x0;x = x0-f(x0)/eval(f1);if x<1RealDiv = abs(x-x0);else RealDiv = abs(x-x0)/abs(x); endif RealDiv>px0 = x;else break;endend3.run43.mclc,clear;A = [3 0 -2;0 2 1;-2 1 2];b = [1;3;1];n1 = 50;n2 =100;%输入A,b矩阵,设置迭代次数为50次;%调用迭代函数,返回迭代矩阵;[x,B] = Jacob(A,b,n1);xj50 = x;f1 = max(abs(eig(B)))%显示谱半径,确定收敛性;[x,B] = GauSeid(A,b,n1);xg50 = x;f2 = max(abs(eig(B)))%谱半径;xj100 = Jacob(A,b,n2);xg100 = GauSeid(A,b,n2); Jacobi= [xj50,xj100]%对比迭代50次和100次的结果GauSei= [xg50,xg100]%很容易看出准确解为[1;1;1]4.f.mfunction y = f(x)%所有f(x)=0中f(x)函数;y = exp(5*x)-sin(x)+x^3-20; 下页是具体解时的程序:%run44.mclc,clear;%很容易看出在[0,1]间有解;x = Dichotomy(0,1,10^(-8),50)x = NewIterat(0,10^(-8),50)五. 讨论分析4.3实验中的迭代矩阵在上个部分,分别为J 和G ;对于收敛性,看下图中的f1,f2,也就是迭代矩阵的谱半径,都是小于1的,但是可以看出后者的谱半径更小,就是说它的收敛速度更快;最终求x 的值,每种迭代方法分别迭代50次(第一列)和100次(第二列); 实际值为[1;1;1]可以看出用高斯赛德尔迭代更精确,速度更快。
数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组————————————————————————————————作者:————————————————————————————————日期:作业六:分别编写用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组Ax=B的标准程序,并求下列方程组的解。
可取初始向量X(0) =(0,0,0)’;迭代终止条件||x(k+1)-x(k)||<=10e-6(1)[8 −1 12 10 −11 1 −5][x1x2x3]=[143](2)[5 2 1−1 4 22 −3 10][x1x2x3]=[−12203]Jacobi迭代法:流程图开判断b中的最大值有没给x赋初值进行迭代结求出x,弱到100次还程序clear;clc;A=[8,-1,1;2,10,01;1,1,-5];b=[1;4;3];e=1e-6;x0=[0;0;0]';n=length(A);x=zeros(n,1);k=0;r=max(abs(b));while r>efor i=1:nd=A(i,i);if abs(d)<ewarning('矩阵A输入有误');return;endsum=0;for j=1:nif j~=isum=sum+A(i,j)*x0(j);endendx1(i)=(b(i)-sum)/A(i,i);endk=k+1;r=max(abs(x1-x0));x0=x1;fprintf('第%d次迭代:',k)fprintf('\n与上次计算结果的距离:%f \n',r)disp(x1);if k>100warning('不收敛');endendx=x0;程序结果(1)(2)Gauss-Seidel迭代法:程序clear;clc;%A=[8,-1,1;2,10,01;1,1,-5];%b=[1;4;3];A=[5,2,1;-1,4,2;2,-3,10];b=[-12;20;3];m=size(A);if m(1)~=m(2)error('矩阵A不是方阵');endn=length(b);%初始化N=0;%迭代次数L=zeros(n);%分解A=D+L+U,D是对角阵,L是下三角阵,U是上三角阵U=zeros(n);D=zeros(n);G=zeros(n);%G=-inv(D+L)*Ud=zeros(n,1);%d=inv(D+L)*bx=zeros(n,1);for i=1:n%初始化L和Ufor j=1:nif i<jL(i,j)=A(i,j);endif i>jU(i,j)=A(i,j);endendendfor i=1:n%初始化DD(i,i)=A(i,i);endG=-inv(D+L)*U;%初始化Gd=(D+L)\b;%初始化d%迭代开始x1=x;x2=G*x+d;while norm(x2-x1,inf)>10^(-6)x1=x2;x2=G*x2+d;N=N+1;endx=x2;程序结果(1)(2)。
实验四线性方程组的迭代解法一、实验目的(1) 学会用Jacobi迭代法、Gauss- Seidel迭代法和超松弛迭代法求线性方程组解(2) 学会对各种迭代法作收敛性分析,研究求方程组解的最优迭代方法.(3) 按照题目要求完成实验内容,写出相应的Matlab程序,给出实验结果.(4) 对实验结果进行分析讨论.(5) 写出相应的实验报告.二、实验内容1.熟悉Jacobi迭代法,并编写Matlab程序matlab程序按照算法(Jacobi迭代法)编写Matlab程序(Jacobi.m)function [x,k,index]=Jacobi(A,b,ep,it_max)if nargin<4it_max=100;endif nargin<3ep=1e-5;endn=length(A);k=0;x=zeros(n,1);y=x;index=1;while 1for i=1:ny(i)=b(i);for j=1:nif j~=iy(i)=y(i)-A(i,j)*x(j);endendif abs(A(i,i))<1e-10||k==it_maxindex=0;return;endy(i)=y(i)/A(i,i);endif norm(y-x,inf)<ep;break;endx=y;k=k+1;end2. 熟悉Gauss-Seidel 迭代法,并编写Matlab 程序3.练习练习题1. 用Jacobi 迭代法求方程组123430243313001424x x x ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥-=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥--⎣⎦⎣⎦⎣⎦的解。
练习题2. 用Gauss-Seidel 迭代法求解上题的线性方程组,取(0)5(0,0,0),10T x ε-==。
function [x,k,index]=Gauss_Seidel(A,b,ep,it_max) if nargin<4it_max=100;endif nargin<3ep=1e-5;endn=length(A);k=0;x=zeros(n,1);y=x;y1=y;index=1;while 1for i=1:ny(i)=b(i);for j=1:nif j>iy(i)=y(i)-A(i,j)*y1(j);endif j<iy(i)=y(i)-A(i,j)*x(j);endendif abs(A(i,i))<1e-10||k==it_maxindex=0;return ;endy(i)=y(i)/A(i,i);y1(i)=y(i);endif norm(y-x,inf)<ep;break ;endx=y;k=k+1;end三、实验要求要求在实验前必须预习,将实验内容事先准备好,否则不允许上机。
Matlab线性方程组的迭代解法(Jacobi迭代法Gauss-Seidel迭代法)实验报告2008年11月09日星期日12:49Jacobi迭代法,并编写Matlab程序matlab程序按照算法(Jacobi迭代法)编写Matlab程序(Jacobi.m)function [x, k, index]=Jacobi(A, b, ep, it_max)%求解线性方程组的Jacobi迭代法,其中% A ---方程组的系数矩阵% b ---方程组的右端项% ep ---精度要求。
省缺为1e-5% it_max ---最大迭代次数,省缺为100% x ---方程组的解% k ---迭代次数% index --- index=1表示迭代收敛到指定要求;% index=0表示迭代失败if nargin <4 it_max=100; endif nargin <3 ep=1e-5; endn=length(A); k=0;x=zeros(n,1); y=zeros(n,1); index=1;while 1for i=1:ny(i)=b(i);for j=1:nif j~=iy(i)=y(i)-A(i,j)*x(j);endendif abs(A(i,i))<1e-10 | k==it_maxindex=0; return;endy(i)=y(i)/A(i,i);endif norm(y-x,inf)<epbreak;endx=y; k=k+1;end用Jacobi迭代法求方程组的解。
输入:A=[4 3 0;3 3 -1;0 -1 4];b=[24;30;-24];[x, k, index]=Jacobi(A, b, 1e-5, 100)输出:x =k =100index =Gauss-Seidel迭代法,并编写Matlab程序function [v,sN,vChain]=gaussSeidel(A,b,x0,errorBound,maxSp)%Gauss-Seidel迭代法求解线性方程组%A-系数矩阵b-右端向量x0-初始迭代点errorBound-近似精度maxSp-最大迭代次数%v-近似解sN-迭代次数vChain-迭代过程的所有值step=0;error=inf;s=size(A);D=zeros(s(1));vChain=zeros(15,3);%最多能记录15次迭代次数k=1;fx0=x0;for i=1:s(1)D(i,i)=A(i,i);end;L=-tril(A,-1);U=-triu(A,1);while error>=errorBound & step<maxSpx0=inv(D)*(L+U)*x0+inv(D)*b;vChain(k,:)=x0';k=k+1;error=norm(x0-fx0);fx0=x0;step=step+1;endv=x0;sN=step;用Gauss-Seidel迭代法求解上题的线性方程组,取。
用jacobi和gauss迭代法求解方程组概述及说明解释1. 引言1.1 概述在科学计算和工程领域中,求解线性方程组是一个常见且重要的问题。
解决方程组的准确、高效求解方法对于实际应用具有重要意义。
本文将介绍两种常用的迭代法:Jacobi迭代法和Gauss迭代法,并通过实例分析来说明它们的使用情况。
1.2 文章结构本文共包含五个主要部分。
引言部分首先对文中内容进行概述,并介绍文章的结构。
接下来,将详细介绍Jacobi迭代法和Gauss迭代法的算法原理、实现步骤以及收敛性分析。
然后,通过具体案例分析,比较使用Jacobi方法和Gauss方法求解方程组的效果。
最后,在结论与展望部分总结并展望了该研究领域未来可能的发展方向。
1.3 目的本文旨在全面了解和掌握Jacobi迭代法和Gauss迭代法在求解线性方程组中的应用。
通过深入理解这两种方法的原理、步骤以及收敛性分析,读者可以对其优缺点、适用范围有更清晰的认识。
同时,通过实例分析的比较,读者可以更好地把握两种方法在实际问题中的应用情况。
最终,本文将为读者提供一个全面而深入的总结,并展望可能的未来研究方向。
以上是文章“1. 引言”部分的内容,希望对您的长文撰写有所帮助。
2. Jacobi迭代法:2.1 算法原理:Jacobi迭代法是一种用于求解线性方程组的迭代方法。
对于一个n阶线性方程组Ax=b,其中A为系数矩阵,x为未知数向量,b为常数向量。
Jacobi迭代法的基本思想是将方程组表示为两个部分:对角线和非对角线部分,然后通过不断迭代来逐渐逼近最终解。
具体而言,Jacobi迭代法的计算公式如下:(1) 对于第i个方程,其解x_i(k+1)的计算公式为:x_i(k+1) = (b_i - Σ(a_ij * x_j(k))) / a_ii其中,k表示迭代步骤的索引号。
(2) 不断重复第(1)步骤,直到收敛或达到预定的迭代次数。
2.2 实现步骤:实现Jacobi迭代法求解方程组的步骤如下:(1) 初始化未知向量x(0),可以选择零向量或任意初始估计值。
求解奇异线性方程组的迭代算法分析奇异线性方程组是一个特殊的线性方程组,其中存在矩阵的其中一行或几行完全由0组成。
这样的方程组对于常规的线性方程组求解方法是无法直接求解的,因此需要通过特殊的迭代算法来解决。
本文将分析奇异线性方程组求解的迭代算法,并对其进行讨论和比较。
奇异线性方程组的求解可以通过迭代方法来进行,常见的迭代算法包括Jacobi迭代法、Gauss-Seidel迭代法和超松弛迭代法。
首先,我们来看Jacobi迭代法。
Jacobi迭代法将方程组的每个方程独立地求解,然后根据求解得到的结果来更新下一次迭代的值。
具体的步骤如下:1.将方程组表示为Ax=b的形式,其中A是系数矩阵,x是未知向量,b是结果向量。
2.初始化解向量x,可以选择任意初始值。
3. 对于每个未知数 x_i,计算如下迭代公式:x_i^(k+1) = (b_i -Σ (a_ij * x_j^k)) / a_ii,其中 k 是迭代次数,a_ij 是系数矩阵 A的第 i 行第 j 列的元素。
4.根据上一步计算得到的新解向量x^(k+1)判断是否满足停止条件,如果满足则迭代结束,否则返回第3步。
5.输出迭代得到的解向量x^(k+1)。
接下来是Gauss-Seidel迭代法。
Gauss-Seidel迭代法与Jacobi迭代法类似,但是它是逐个更新解向量中的每个未知数。
具体的步骤如下:1.将方程组表示为Ax=b的形式,其中A是系数矩阵,x是未知向量,b是结果向量。
2.初始化解向量x,可以选择任意初始值。
3. 对于每个未知数 x_i,计算如下迭代公式:x_i^(k+1) = (b_i -Σ (a_ij * x_j^k)) / a_ii,其中 k 是迭代次数,a_ij 是系数矩阵 A的第 i 行第 j 列的元素。
4.根据上一步计算得到的新解向量x^(k+1)判断是否满足停止条件,如果满足则迭代结束,否则返回第3步。
5.输出迭代得到的解向量x^(k+1)。