Jacobi G-S SOR迭代法在matlab中的例子

合集下载

运用雅可比迭代和高斯塞德尔迭代法求的解matlab

运用雅可比迭代和高斯塞德尔迭代法求的解matlab

运用雅可比迭代和高斯塞德尔迭代法求的解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是迭代精度。

高斯塞德尔迭代法和雅可比迭代法类似,只是在推导迭代公式时使用了更多的新的未知量来计算下一个未知量的值。

jacobi迭代法matlab

jacobi迭代法matlab

jacobi迭代法matlabJacobi迭代法是一种常用的线性方程组求解方法,它是一种迭代法,通过不断迭代来逼近线性方程组的解。

Jacobi迭代法的基本思想是将线性方程组的系数矩阵分解为一个对角矩阵和一个非对角矩阵的和,然后通过迭代求解对角矩阵和非对角矩阵的乘积,最终得到线性方程组的解。

Jacobi迭代法的具体步骤如下:1. 将线性方程组的系数矩阵A分解为一个对角矩阵D和一个非对角矩阵R的和,即A=D+R。

2. 将线性方程组的右端向量b分解为一个对角矩阵D和一个非对角矩阵N的乘积,即b=Dx。

3. 对于任意的初始解向量x0,计算下一次迭代的解向量x1,即x1=D^(-1)(b-Rx0)。

4. 重复步骤3,直到达到预定的精度或迭代次数。

Jacobi迭代法的优点是简单易懂,易于实现,收敛速度较快。

但是,它的缺点也很明显,即收敛速度较慢,需要进行大量的迭代才能达到较高的精度。

在Matlab中,可以使用以下代码实现Jacobi迭代法:function [x,k]=jacobi(A,b,x0,tol,maxit)% Jacobi迭代法求解线性方程组Ax=b% 输入:系数矩阵A,右端向量b,初始解向量x0,精度tol,最大迭代次数maxit% 输出:解向量x,迭代次数kn=length(b); % 系数矩阵A的阶数D=diag(diag(A)); % 对角矩阵DR=A-D; % 非对角矩阵Rx=x0; % 初始解向量for k=1:maxitx1=D\(b-R*x); % 计算下一次迭代的解向量if norm(x1-x)<tol % 判断是否达到精度要求break;endx=x1; % 更新解向量end输出结果可以使用以下代码实现:A=[4 -1 0; -1 4 -1; 0 -1 4]; % 系数矩阵b=[15; 10; 10]; % 右端向量x0=[0; 0; 0]; % 初始解向量tol=1e-6; % 精度要求maxit=1000; % 最大迭代次数[x,k]=jacobi(A,b,x0,tol,maxit); % Jacobi迭代法求解线性方程组fprintf('解向量x=[%f; %f; %f]\n',x(1),x(2),x(3)); % 输出解向量fprintf('迭代次数k=%d\n',k); % 输出迭代次数以上就是Jacobi迭代法的主要内容,通过Matlab实现Jacobi迭代法可以更好地理解其基本思想和具体步骤。

数值分析(hilbert矩阵)病态线性方程组的求解matlab程序

数值分析(hilbert矩阵)病态线性方程组的求解matlab程序

(Hilbert 矩阵)病态线性方程组的求解理论分析表明,数值求解病态线性方程组很困难。

考虑求解如下的线性方程组的求解Hx = b ,期中H 是Hilbert 矩阵,()ij n n Hh ,11ij h i j ,i ,j = 1,2,…,n 1.估计矩阵的2条件数和阶数的关系2.对不同的n ,取(1,1,,1)nx K ?,分别用Gauss 消去,Jacobi 迭代,Gauss-seidel 迭代,SOR 迭代和共轭梯度法求解,比较结果。

3.结合计算结果,试讨论病态线性方程组的求解。

第1小题:condition.m %第1小题程序t1=20;%阶数n=20x1=1:t1;y1=1:t1;for i=1:t1H=hilb(i);y1(i)=log(cond(H));endplot(x1,y1);xlabel('阶数n');ylabel('2-条件数的对数(log(cond(H))');title('2-条件数的对数(log(cond(H))与阶数n 的关系图');t2=200;%阶数n=200x2=1:t2;y2=1:t2;for i=1:t2H=hilb(i);y2(i)=log(cond(H));endplot(x2,y2);xlabel('阶数n');ylabel('2-条件数的对数(log(cond(H))');title('2-条件数的对数(log(cond(H))与阶数n 的关系图');画出Hilbert 矩阵2-条件数的对数和阶数的关系n=200时n=20时从图中可以看出,1)在n小于等于13之前,图像近似直线log(cond(H))~1.519n-1.8332)在n大于13之后,图像趋于平缓,并在一定范围内上下波动,同时随着n的增加稍有上升的趋势第2小题:solve.m%m第2小题主程序N=4000;xGauss=zeros(N,1);xJacobi=zeros(N,1);xnJ=zeros(N,1);xGS=zeros(N,1);xnGS=zeros(N,1);xSOR=zeros(N,1);xnSOR=zeros(N,1);xCG=zeros(N,1);xnCG=zeros(N,1);for n=1:N;x=ones(n,1);t=1.1;%初始值偏差x0=t*x;%迭代初始值e=1.0e-8;%给定的误差A=hilb(n);b=A*x;max=100000000000;%可能最大的迭代次数w=0.5;%SOR迭代的松弛因子G=Gauss(A,b);[J,nJ]=Jacobi(A,b,x0,e,max);[GS,nGS]=G_S(A,b,x0,e,max);[S_R,nS_R]=SOR(A,b,x0,e,max,w);[C_G,nC_G]=CG(A,b,x0,e,max);normG=norm(G'-x);xGauss(n)=normG;normJ=norm(J-x);nJ;xJacobi(n)=normJ;xnJ(n)=nJ;normGS=norm(GS-x);nGS;xGS(n)=normGS;xnGS(n)=nGS;normS_R=norm(S_R-x);nS_R;xSOR(n)=normS_R;xnSOR(n)=nS_R;normC_G=norm(C_G-x);nC_G;xCG(n)=normC_G;xnCG(n)=nC_G;endGauss.m%Gauss消去法function x=Gauss(A,b)n=length(b);l=zeros(n,n);x=zeros(1,n);%消去过程for i=1:n-1for j=i+1:nl(j,i)=A(j,i)/A(i,i);for k=i:nA(j,k)=A(j,k)-l(j,i)*A(i,k);endb(j)=b(j)-l(j,i)*b(i);endend%回代过程x(n)=b(n)/A(n,n);for i=n-1:-1:1c=A(i,:).*x;x(i)=(b(i)-sum(c(i+1:n)))/A(i,i);endJacobi.m%Jacobi迭代,x0表示迭代初值,e表示允许误差(迭代停止条件),n表示迭代次数,m 可能最大的迭代次数function [x,n]=Jacobi(A,b,x0,e,m)n=length(A);D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);B=D\(L+U);f=D\b;x=B*x0+f;n=1;while norm(x-x0)>ex0=x;x=B*x0+f;n=n+1;if n>mdisp('Jacobi迭代次数过多,迭代可能不收敛');break;endendG_S.m%Gauss-Seidel迭代,x0表示迭代初值,e表示允许误差(迭代停止条件),n表示迭代次数,m可能最大的迭代次数function [x,n]=G_S(A,b,x0,e,m)n=length(A);D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);B=(D-L)\U;f=(D-L)\b;x=B*x0+f;n=1;while norm(x-x0)>ex0=x;x=B*x0+f;n=n+1;if n>mdisp('Gauss-Seidel迭代次数过多,迭代可能不收敛');break;endendSOR.m%SOR超松弛迭代,x0表示迭代初值,e表示允许误差(迭代停止条件),n表示迭代次数,m可能最大的迭代次数,w松弛因子function [x,n]=SOR(A,b,x0,e,m,w)n=length(A);D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);B=(D-w*L)\((1-w)*D+w*U);f=(D-w*L)\b*w;x=B*x0+f;n=1;while norm(x-x0)>ex0=x;x=B*x0+f;n=n+1;if n>mdisp('SOR超松弛迭代次数过多,迭代可能不收敛');break;endendCG.m%CG共轭梯度法,x0表示迭代初值,e表示允许误差(迭代停止条件),n表示迭代次数,m可能最大的迭代次数function [x,n]=CG(A,b,x0,e,m)r=b-A*x0;p=r;alpha=(r'*r)/(p'*(A*p));x=x0+alpha*p;r1=b-A*x;n=1;while norm(r1)>ebelta=(r1'*r1)/(r'*r);p=r1+belta*p;r=r1;x0=x;alpha=(r'*r)/(p'*(A*p));x=x0+alpha*p;r1=b-A*x;n=n+1;if n>mdisp('CG共轭梯度法迭代次数过多,迭代可能不收敛');break;endend。

matlab jacobi迭代法代码

matlab jacobi迭代法代码

matlab jacobi迭代法代码Matlab是一种常用的数学软件,它具有强大的矩阵计算和绘图功能。

在数值计算中,迭代法是一种重要的求解方法。

本文将介绍如何使用Matlab实现Jacobi迭代法,并运用实例来说明其应用。

Jacobi迭代法是一种经典的迭代法,用于解线性方程组。

它的基本思想是通过迭代逐步逼近方程组的解。

具体而言,对于线性方程组Ax=b,Jacobi迭代法通过以下步骤进行计算:1. 将方程组表示为x=D^(-1)(L+U)x+b的形式,其中D为A的对角矩阵,L为A的严格下三角矩阵,U为A的严格上三角矩阵。

2. 初始化解向量x^(0)为一个初始猜测值,通常取零向量。

3. 根据迭代公式x^(k+1)=D^(-1)(b-(L+U)x^(k)),计算下一迭代解x^(k+1)。

4. 重复步骤3,直到解向量收敛于方程组的解。

下面是一个使用Matlab实现Jacobi迭代法的示例代码:```matlabfunction x = Jacobi(A, b, maxIter, tolerance)n = size(A, 1);x = zeros(n, 1);xPrev = x;iter = 0;while iter < maxIterfor i = 1:nsigma = A(i, 1:i-1) * xPrev(1:i-1) + A(i, i+1:n) * xPrev(i+1:n);x(i) = (b(i) - sigma) / A(i, i);endif norm(x - xPrev) < tolerancebreak;endxPrev = x;iter = iter + 1;endend```在上面的代码中,函数Jacobi接受四个参数:系数矩阵A,右侧常数向量b,最大迭代次数maxIter和收敛容限tolerance。

函数返回解向量x。

在迭代过程中,我们使用了一个for循环来更新解向量x的每个分量。

matlab中jacobi迭代法

matlab中jacobi迭代法

一、简介Matlab中jacobi迭代法是一种用于求解线性方程组的迭代方法,适用于系数矩阵为对称、正定矩阵的情况。

该迭代方法通过将系数矩阵分解为对角矩阵、上三角矩阵和下三角矩阵的形式,然后通过迭代计算得到方程组的解。

在Matlab中,可以利用矩阵运算和迭代循环来实现jacobi迭代法。

二、 jacobi迭代法原理1. 基本思想jacobi迭代法的基本思想是将系数矩阵分解为对角矩阵D、上三角矩阵U和下三角矩阵L的形式,即A=D+L+U,其中D为系数矩阵A 的对角线元素组成的对角矩阵,L为系数矩阵A的下三角部分,U为系数矩阵A的上三角部分。

令x为方程组的解向量,b为方程组的右端向量,则方程组可表示为Ax=b。

根据方程组的性质,可将方程组表示为(D+L+U)x=b,然后利用迭代的方式逐步逼近方程组的解。

2. 迭代公式假设迭代到第k次,方程组可表示为(D+L+U)x=b,将其转化为迭代形式x(k+1)=(D+L)^(-1)(b-Ux(k)),利用迭代公式可以逐步计算出方程组的解。

3. 收敛条件对于jacobi迭代法,收敛条件为系数矩阵A为对角占优矩阵或正定矩阵。

如果满足这一条件,迭代计算会逐步收敛于方程组的解。

三、 Matlab中jacobi迭代法实现在Matlab中,可以利用矩阵运算和迭代循环来实现jacobi迭代法。

具体步骤如下:1. 对系数矩阵进行分解将系数矩阵A分解为对角矩阵D、上三角矩阵U和下三角矩阵L的形式。

2. 初始化迭代变量初始化迭代的初始值x0、迭代次数k、逐次逼近解向量x(k+1)。

3. 迭代计算利用迭代公式x(k+1)=(D+L)^(-1)(b-Ux(k))来逐步计算出方程组的解。

4. 判断收敛条件在迭代计算过程中,需要实时判断迭代计算是否满足收敛条件,如果满足则停止迭代计算,得到方程组的解。

四、实例分析假设有如下方程组:2x1 + x2 + 4x3 = 103x1 + 4x2 - x3 = 10x1 + 2x2 + 3x3 = 0可以利用jacobi迭代法来求解该方程组,在Matlab中可以通过编程实现迭代计算过程。

高斯-赛德尔迭代法matlab程序

高斯-赛德尔迭代法matlab程序

高斯-赛德尔迭代法m a t l a b程序-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIANdisp('划分为M*M个正方形')M=5 %每行的方格数,改变M可以方便地改变剖分的点数u=zeros(M+1);%得到一个(M+1)*(M+1)的矩阵disp('对每个剖分点赋初值,因为迭代次数很高,所以如何赋初值并不重要,故采用对列线性赋值。

')disp('对边界内的点赋初值并使用边界条件对边界赋值:')for j=1:M-1for i=1:M-1u(i+1,j+1)=100*sin(pi/M*j)/M*(M-i);%对矩阵(即每个刨分点)赋初值endendfor i=1:M+1u(1,i)=100*sin(pi*(i-1)/M);%使用边界条件对边界赋值u(1,M+1)=0;endutic %获取运行时间的起点disp('迭代次数为N')N=6 %迭代次数,改变N可以方便地改变迭代次数disp('n为当前迭代次数,u为当前值,结果如下:')for n=1:Nfor p=2:Mi=M+2-p;for j=2:Mu(i,j)=*(u(i,j-1)+u(i+1,j)+u(i-1,j)+u(i,j+1));%赛德尔迭代法endendn %输出nu %输出uenddisp('所用的时间:')t=toc %获取算法运行需要的时间[x,y]=meshgrid(0:1/M:1,0:1/M:1);z=u(1,:);for a=2:M+1z=[z;u(a,:)];%获取最终迭代的结果,幅值给z,z的值代表该点的点位值endmesh(x,y,z)%绘制三维视图以便清楚地显示结果mesh(x,y,z,'FaceColor','white','EdgeColor','black') %绘制三维视图以便清楚地显示结果。

雅可比迭代法的MATLAB程序

雅可比迭代法的MATLAB程序

雅可比迭代法的MATLAB程序:Function[x,k,index]=Jacobi(A,b,ep,it-max)% 求线性方程组的雅可比法;% A为方程组的系数矩阵;% b为方程组的右端项;% x为方程组的解;% ep为精度要求,缺省值为le-5;% it_max为最大迭代次数,缺省值为100;% k为迭代次数;% index 为指标变量,index=0表示计算失败,index=1表示计算成功; if nargin<4it_max=100;endif nargin<3ep=le-5;endn=length(A);k=0;x=zeros(n,1);y=zeros(n,1);index=1;while k<=it_maxfor i=1:nif abs (A(i,i))<le-10index=0;return;endy(i)=(b(i)-A(i,1:n)*x(1:n)+A(i,i)*x(i))/A(i,i);endif norm(y-x,inf)<epbreak;endk=k+1;x=y;end高斯-赛德尔迭代的MATLAB程序Function[x,k,index]=Gau-seidel(A,b,ep,it-max)% 求线性方程组的高斯-赛德尔迭代法;% A为方程组的系数矩阵;% b为方程组的右端项;% x为方程组的解;% ep为精度要求,缺省值为le-5;% it_max为最大迭代次数,缺省值为100;% k为迭代次数;% index 为指标变量,index=0表示计算失败,index=1表示计算成功; if nargin<4it_max=100;endif nargin<3ep=le-5;endn=length(A);k=0;x=zeros(n,1);y=zeros(n,1);index=1; while k<=it_maxfor i=1:nif abs (A(i,i))<le-10index=0;return;Endif i==1y(i)=(b(i)-A(i,i+1:n)*x(i+1:n)/A(i,i);elseif i==ny(i)=(b(i)-A(i,1:i-1)*y(1:i-1)/A(i,i);elsey(i)=(b(i)-A(i,1:i-1)*y(1:i-1)-A(i,i+1:n)*x(i+1:n)/A(i,i); endendif norm(y-x,inf)<epbreak;endk=k+1; x=y; endTHANKS !!!致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求欢迎您的下载,资料仅供参考。

matlab 迭代法求特征值和特征向量

matlab 迭代法求特征值和特征向量

在MATLAB中,使用迭代法求解特征值和特征向量,一般需要用到eig函数,以及Jacobi方法或QR方法等迭代方法。

下面是一个使用Jacobi方法在MATLAB中求解特征值和特征向量的示例:```matlabfunction [V, D] = jacobi(A, tol, maxiter)% A: nxn matrix% tol: error tolerance% maxiter: maximum number of iterationsn = size(A, 1);V = eye(n);D = A;for k = 1:maxiterw = D * V(:, k);alpha = (w' * w) / (w' * A * w);V(:, k+1) = w - alpha * V(:, k);D = D - alpha * V(:, k) * V(:, k+1)';endif norm(D - eig(A), 'fro') < tolbreak;endend```这个函数使用Jacobi方法来迭代求解矩阵的特征值和特征向量。

输入参数A是待求解的特征值和特征向量的矩阵,tol是误差容忍度,maxiter是最大迭代次数。

输出参数V是特征向量矩阵,D是对角线元素为特征值的矩阵。

使用这个函数时,只需要将待求解的矩阵A,误差容忍度和最大迭代次数作为输入参数传入即可。

例如:```matlabA = [3 -1; -1 3];[V, D] = jacobi(A, 1e-6, 1000);disp(['Eigenvalues: ', num2str(diag(D))]);disp('Eigenvectors:');disp(V);```这个例子中,我们要求解矩阵A的特征值和特征向量,并将结果输出到控制台。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4 / 15
[数值分析报告]
[数学基地班 赵晨晓 2011301000007]
x0=zeros(20,1),运行程序,得到i=38。 Jacobi迭代法绘图程序: function y=jacobian1(A,b,x0) residue=zeros(1000,1); if size(b,2)~=1 b=b'; end if size(x0,2)~=1 x0=x0'; end D=diag(diag(A)); B=D\(D-A); g=D\b; x1=B*x0+g; i=1; while(norm(x1-x0,inf)>1e-10) residue(i)=norm(x1-x0,inf); x0=x1; x1=B*x1+g; i=i+1; end semilogy(residue);
(k)
已经算出,用它代替 x1(k-1) ,其他分量仍用 xi(k-1) 。类似
的,计算 xl(k)时,因 x1(k) , , ,xl-1(k)都已算出,用它们代替 x1(k-1) , , , ,xl-1(k-1) ,其他分量仍用 xk-1 的分量,于是有 Xk=D-1Lxk+D-1Uxk-1+g, k=1,2, , , (6)
10 / 15
[数值分析报告]
[数学基地班 赵晨晓 2011301000007]
end D=diag(diag(A)); L=-tril(A-D); U=-triu(A-D); M=(D-w*L)\((1-w)*D+w*U); g=w*(D-w*L)\b; x1=M*x0+g; i=1; while(norm((x1-x0),2)>1.0e-6) residue(i)=norm(x1-x0,inf); x0=x1; x1=M*x0+g; i=i+1; end semilogy(residue); y=x1; i 由公式 wopt=
3 / 15
[数值分析报告]
[数学基地班 赵晨晓 2011301000007]
if size(b,2)~=1 b=b'; end if size(x0,2)~=1 x0=x0'; end D=diag(diag(A)); B=D\(D-A); g=D\b; x1=B*x0+g; i=1; while(norm((x1-x0),2)>0.0001) x0=x1; x1=B*x1+g; i=i+1; end y=x0; i-1 其中,A是一个20阶矩阵。由于Jacobi迭代法需满足条件A及 2D-A均正定,故可取A=rand(20),令A=A*A’,然后令 A=A+100*eye (20) , 使A满足严格对角占优。 算得cond (A , inf)=3.1223,说明该矩阵条件数较好。令b=ones(20,1),
B <1 或者 B
1
2、 设 B 是 jacobi 迭代的迭代矩阵。 若 则 G-S 迭代收敛。
<1,
3、 若系数矩阵 A 对称, 对角线元素 aii>0 (i=1, 2, , , n) , 则 jacobi 迭代收敛的充分必要条件是 A 和 2D-A 都正定;若 A 正定,则 G-S 迭代收敛。 三、MATLAB 中的矩阵实验 Jacobi 矩阵算法: function y=jacobian(A,b,x0)
[数学基地班 赵晨晓 2011301000007]
可以看出图像弯曲不平,性质没有上一条好。
可以看出, 只需要 6 次迭代, 就能满足要求。 因为 w 较小时, 收敛稳定性高,w 较大时,收敛速度较快。 另一方面,当矩阵条件数没有那么好的时候,例如可令 A=rand(20) ,A=A*A’, cond(A,inf)= 2.8346e+04,此时, 由于 jacobi 迭代条件较为苛刻,jacobi 迭代图像如下所示:
5 / 15
[数值分析报告]
[数学基地班 赵晨晓 2011301000007]
y=x0; i 可 得 到 此 矩 阵 的 收 敛 图 像 :
G-S迭代法算法: function y=GS(A,b,x0) if size(b,2)~=1 b=b'; end if size(x0,2)~=1 x0=x0'; end
9 / 15
[数值分析报告]
[数学基地班 赵晨晓 2011301000007]
L=-tril(A-D); U=-triu(A-D); M=(D-w*L)\((1-w)*D+w*U); g=w*(D-w*L)\b; x1=M*x0+g; i=1; while(norm((x1-x0),2)>1.0e-6) residue(i)=norm(x1-x0,inf); x0=x1; x1=M*x0+g; i=i+1; end y=x1; i SOR 迭代法绘图算法: function y=SOR(A,b,x0,w) residue=zeros(1000,1); if size(b,2)~=1 b=b'; end if size(x0,2)~=1 x0=x0';
13 / 15
[数值分析报告]
[数学基地班 赵晨晓 2011301000007]
这说明此时 jacobi 迭代法不收敛; 而 G-S 迭代法图像如下所示:
14 / 15
[数值分析报告]
[数学基地班 赵晨晓 2011301000007]
这说明它需要迭代 3000 多次才能达到预期目标。 而对于 SOR 迭代法,由于ρ(B)过大,它不收敛。 综上,可以得到结论: (1) 当矩阵收敛时, G-S 迭代法收敛速度总比 Jacobi 迭代法收敛速度要快。而选取恰当 w 后,SOR 迭代法速度比 G-S 迭代法收敛速度 还要快。 (2) 当矩阵条件数较小时,即此时矩阵性质比较 好,三种算法的收敛速度都比较快。 (3) 以上启示我们在进行矩阵迭代之前,最好对 其进行预处理,以使其条件数较小,性质优 良。
6 / 15
[数值分析报告]
[数学基地班 赵晨晓 2011301000007]
D=diag(diag(A)); L=-tril(A-D); U=-triu(A-D); M=(D-L)\U; g=(D-L)\b; x1=M*x0+g; i=1; while(norm((x1-x0),2)>1.0e-6) x0=x1; x1=M*x0+g; i=i+1; end y=x1; i-1 同样的 A,得到 i=8。 C-G 迭代法绘图算法: function y=GS(A,b,x0) residue=zeros(1000,1); if size(b,2)~=1 b=b'; end if size(x0,2)~=1
1 1 1 ( B)* ( B)
利用函数 vrho,代入计算,得到
wopt=0.9,此时收敛图像为:
11 / 15
[数值分析报告]
[数学基地班 赵晨晓 2011301000007]
可以看出这是一条较为光滑且下降较快的曲线。作为对比, 当 w=1.5 时,其图像为:
12 / 15
[数值分析报告]
其中,D 为严格下三角阵,L 为严格上三角阵,那个(1)可 写为 x=Bx+g (4)
其中,B=D-1(L+U),g=D-1b.若给定初始向量 X0=(x1(0) , x2 ( 0 ) , , , , x n( 0 ) )T,并代入(4)的右端,就 可以计算出一个新的向量 x1,即 x1=Bx0+g;
[数值分析报告]
[数学基地班 赵晨晓 2011301000007]
关于 Jacobi G-S SOR 方法的收敛速度比较 摘要: 本论文主要通过判断比较 Jacobi G-S SOR 三种
计算方法的收敛速度,来分析三种算法的优劣。辅助软件为 MATLAB。 随着计算技术的发展,计算机的存储量日益增大,计算速 度也迅速提高,直接法在计算机上可以求解的线性方程组的 规模也越来越大, 但直接法大多需要对系数矩阵 A 进行分解, 因此一般不能保证 A 的稀疏性。而实际应用中,特别是偏微 分方程的数值求解时,常常遇到的就是大型稀疏线性方程的 求解问题。因此寻求能够保持稀疏性的有效算法就成为数值 线性代数中的一个非常重要的研究课题。 一、三种迭代方法内容简介 Jacobi 迭代 考虑非奇异线性代数方程组 Ax=bHale Waihona Puke 令 A=D-L-U (1) (2 )
1 / 15
[数值分析报告]
[数学基地班 赵晨晓 2011301000007]
再把 x1 代入(4)右端,又可得到一个向量 x2;以此类推有 Xk=Bxk-1+g,k=1,2,3, , , (5 )
这被称为 jacobi 迭代格式。B 称为 jacobi 迭代的迭代矩阵,g 称为常数项。 Gauss-Seidel 迭代 假设不按 jacobi 格式,而是在计算 xk 的第一个分量用 xk-1 的各个分量计算。但当计算 xk 的第二个分量 x2(k)时,因 x1
k+1
-xk,则有
xk+1= x+xk。
Xk+1 可以看作是在向量 xk 上加上修正项 x 而得到的。 若
2 / 15
[数值分析报告]
[数学基地班 赵晨晓 2011301000007]
修正项的前面加上一个参数ω,便得到松弛法的计算公式 Xk+1=xk+ω x=(1-ω)xk+ω(D-1Lxk+1+D-1Uxk+D-1b) 其中ω叫做松弛因子。当ω>1 时叫做超松弛;ω<1 时叫 做低松弛; ω=1 即为 G-S 迭代。 我们把超松弛迭代简称为 SOR。
可得到此矩阵的收敛图像:
8 / 15
[数值分析报告]
相关文档
最新文档