实验目的:了解SOR法迭代矩阵谱半径和迭代参数的关系
迭代法解线性方程组数值分析实验报告

迭代法解线性方程组数值分析实验报告一、实验目的本次实验旨在深入研究和掌握迭代法求解线性方程组的基本原理和方法,并通过数值实验分析其性能和特点。
具体目标包括: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)})$。
线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法

西京学院数学软件实验任务书课程名称数学软件实验班级数0901学号0912020119姓名王震实验课题雅克比迭代、高斯—赛德尔迭代、超松弛迭代实验目的熟悉雅克比迭代、高斯—赛德尔迭代、超松弛迭代实验要求运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成实验内容雅克比迭代法高斯—赛德尔迭代法、超松弛迭代法成绩教师【实验课题】雅克比迭代、高斯—赛德尔迭代、超松弛迭代【实验目的】学习和掌握线性代数方程组的雅克比迭代、高斯—赛德尔迭代、超松弛迭代法,并且能够熟练运用这些迭代法对线性方程组进行求解。
【实验内容】1、问题重述:对于线性方程组,即:A b X = (1),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 +++=⎧⎪+++=⎪⎨⎪⎪+++=⎩ 其中,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 x11111121111122,12211111()()11()()11()()n nj j j j j j n ni i ij j i j j j i j i j ii n 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.掌握用迭代法求解线性方程组的基本思想和计算步骤;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 为零向量。
sor迭代法手算例题

sor迭代法手算例题SOR迭代法是求解线性方程组的一种经典方式,其基本思想是通过不断迭代来逼近方程组的解。
这种方法在大规模问题上具有很好的效率,因此得到了广泛的应用。
本文将介绍SOR迭代法的基本原理,并以一个手算例题来展示其具体步骤和计算结果。
一、SOR迭代法的基本原理在介绍SOR迭代法的原理之前,我们先来看一下迭代法本身的思想。
假设有一个线性方程组:$$Ax=b$$其中,A是一个$n\times n$的系数矩阵,b是一个$n\times 1$的常数向量,x是一个$n\times 1$的未知向量。
迭代法的基本思想是将方程组表示为:$$x^{(k+1)}=Tx^{(k)}+C$$其中,$x^{(k)}$表示第k次迭代的近似解,$T$是一个$n\times n$的矩阵,$C$是一个$n\times 1$的常数向量。
迭代法的步骤是从一个初始点$x^{(0)}$开始,不断应用上述公式来寻找更好的解$x^{(k+1)}$。
当接近真解时,迭代的过程会不断收敛,即$x^{(k+1)}$会不断逼近真解$x$。
那么,如何确定矩阵$T$和向量$C$呢?最简单的方法是将方程组表示为:$$x^{(k+1)}=(I-\omega A)x^{(k)}+\omega b$$其中,I是$n\times n$的单位矩阵,$\omega$是一个常数,称作松弛因子。
当$\omega=1$时,这就是最基本的迭代法——雅克比迭代法。
但是,雅克比迭代法的收敛速度比较慢,因此需要调整$\omega$的值,从而得到更好的迭代效果。
SOR迭代法就是一种改良的迭代方法,其基本思想是通过加速松弛因子的变化来改善雅克比迭代法的效率。
具体来说,SOR迭代法的公式为:$$x_i^{(k+1)}=(1-\omega)x_i^{(k)}+\frac{\omega}{a_{ii}}\left(b_i-\sum_{j<i}a_{ij}x_j^{(k+1)}-\sum_{j>i}a_{ij}x_j^{(k)}\right)$$其中,$i=1,2,\cdots,n$。
数值分析实验报告-Sor法分析

数值分析实验报告一、 实验目的1、会使用Sor 法求解一个线性方程组2、熟悉matlab 语言并结合原理编程求方程组3、改变ω的值观察实验结果4、会分析实验结果 二、实验题目编制Sor 迭代格式程序进行求解一个线性方程组的迭代计算情况,运行中要选用不同的松弛因子ω进行尝试三、 实验原理Jacobi 迭代和seidel 迭代对具体的线性方程组来说,逼近*x 的速度是固定不变的,遇到收敛很慢的情况时就显得很不实用。
Sor 法是一seidel 迭代为基础,并在迭代中引入参数ω以增加迭代选择的灵活性,具体为:!用seidel 迭代算出的,)()1()()1(k k J k k Jx x x x x -=∆++相减得到差向量与再用参数ω乘之再加上)1()()()1()1()()()1(++++-=∆+=k Jk k k k k k x x x x x x x x ωωω,即的下一步迭代作为,由seidel 迭代的公式可以得到Sor 法的迭代格式为n i x a x a b a x x k j n i j ij k j i j ij i ii k i k i ,2,1),()1()(1)1(11)()1( =--+-=∑∑+=+-=+ωω式中ω称为松弛因子。
四、 实验内容用matlab 编程得到Sor 法求线性方程组的算法为:function [x,n]=SOR(A,b,x0,w,eps,M)if nargin==4eps= ;M = 200;elseif nargin<4errorreturn:elseif nargin ==5M = 200;endif(w<=0 || w>=2)error;return;endD=diag(diag(A)); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵(U=-triu(A,1); %求A的上三角阵B=inv(D-L*w)*((1-w)*D+w*U);f=w*inv((D-L*w))*b;x=B*x0+f;n=1; %迭代次数while norm(x-x0)>=epsx0=x;x =B*x0+f;n=n+1;if(n>=M)(disp('Warning: 迭代次数太多,可能不收敛!'); return;endend输入数据:>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5];b=[1;2;10;-1];x0=[0;0;0;0];w=1;eps=1e-4;;M=100;>> [x,n]=SOR(A,b,x0,w,eps,M)x =n =;5error;>> A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5];b=[1;2;10;-1];x0=[0;0;0;0];w=;eps=1e-4;M=100;[x,n]=SOR(A,b,x0,w,eps,M)/x =n =@21>>A=[20 1 -3 -1;3 18 0 7;-1 2 40 -2;1 0 -1 5]; b=[1;2;10;-1];x0=[0;0;0;0];w=;eps=1e-4;M=100;[x,n]=SOR(A,b,x0,w,eps,M)Error using ==> errorNot enough input arguments.,Error in ==> SOR at 13用实验3中的线性方程组作为例子比较得当ω=时,x = 迭代次数为n=21当ω=1时,x = 迭代次数为n=5当ω=时,出现error五、实验分析由定理,Sor法收敛的必要条件是0<ω<2,因此,当ω=和1时,算法收敛,能够求出根,并且迭代次数根据ω的不同而不同,在求方程组的根时,只要选择恰当的ω,收敛是很快的。
sor迭代法

SOR迭代法的Matlab程序function [x]=SOR_iterative(A,b)% 用SOR迭代求解线性方程组,矩阵A是方阵x0=zeros(1,length(b)); % 赋初值tol=10^(-2); % 给定误差界N=1000; % 给定最大迭代次数[n,n]=size(A); % 确定矩阵A的阶w=1; % 给定松弛因子k=1;% 迭代过程while k<=Nx(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1);for i=2:nx(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')/A(i,i);endif max(abs(x-x0))<=tolfid = fopen('SOR_iter_result.txt', 'wt');fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n');fprintf(fid,'迭代次数: %d次\n\n',k);fprintf(fid,'x的值\n\n');fprintf(fid, '%12.8f \n', x);break;endk=k+1;x0=x;endif k==N+1fid = fopen('SOR_iter_result.txt', 'wt');fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n');fprintf(fid,'迭代次数: %d次\n\n',k);fprintf(fid,'超过最大迭代次数,求解失败!');fclose(fid);end常微分方程的数值解法实验目的:熟悉在Matlab平台上直接求解常微分方程初值问题试验方法1、利用改进欧拉法解方程:程序内容为:fun=@(x,y)x^(-2)-y/x;h=0.05;X=1:h:2;Y(1)=1;for i=2:21Y(i)=Y(i-1)+h/2*(fun(X(i-1),Y(i-1))+fun(X(i),Y(i-1))+h*fun(X(i-1),Y(i-1))); end;Y运行结果为:Y =Columns 1 through 91.0000 0.9989 0.9957 0.9909 0.9848 0.9778 0.9701 0.9618 0.9530Columns 10 through 180.9440 0.9348 0.9254 0.9160 0.9065 0.8971 0.8876 0.8783 0.8690Columns 19 through 210.8598 0.8508 0.8418真实解的求法为:x=1:0.05:2;y=1./x.*(log(x)+1)y =Columns 1 through 81.0000 0.9988 0.9957 0.9911 0.9853 0.9785 0.9710 0.9630Columns 9 through 160.9546 0.9459 0.9370 0.9279 0.9188 0.9096 0.9004 0.8912Columns 17 through 210.8821 0.8731 0.8641 0.8553 0.8466用四阶R-K算法解常微分方程的程序为:fun=@(x,y)x^(-2)-y/x;h=0.1;X=1:h:2;Y(1)=1;for n=2:11k1=fun(x(n-1),Y(n-1));k2=fun(x(n-1)+h/2,Y(n-1)+h/2*k1);k3=fun(x(n-1)+h/2,Y(n-1)+h/2*k2);k4=fun(x(n-1)+h,Y(n-1)+h*k3);Y(n)=Y(n-1)+h/6*(k1+2*k2+2*k3+k4)end;Y运行后了结果为:Y =Columns 1 through 91.0000 0.9957 0.9853 0.9710 0.9546 0.9370 0.9188 0.9004 0.8821Columns 10 through 110.8641 0.8466真实解的求法为:x=1:0.1:2;y=1./x.*(log(x)+1)y =Columns 1 through 91.0000 0.9957 0.9853 0.9710 0.9546 0.9370 0.9188 0.9004 0.8821Columns 10 through 110.8641 0.8466可见其精确度至少已达到0.0012、MATLAB中数值解法“ode45”为:[x1,y1] = ode45(@(x,y)x^(-2)-y/x,[1,2],y0);符号解法“dsolve”求解为:dsolve('Dy=x^(-2)-y/x','y(1) = 1','x')ans =(log(x)+1)/x画出两种算法的图形位:[x1,y1] = ode45(@(x,y)x^(-2)-y/x,[1,2],1);fplot('(log(x)+1)/x',[1,2]);hold on, plot(x1,y1,'ro');数值算法同解析算法几乎完全吻合。
实验五-解线性方程组的迭代法报告

实验五 解线性方程组的迭代法一、问题提出对实验四所列目的和意义的线性方程组,试分别选用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收敛。
数学实验“线性方程组的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 其余部分与雅克比迭代类似。
数值分析实验报告-清华大学--线性代数方程组的数值解法

数值分析实验报告-清华大学--线性代数方程组的数值解法(总15页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--线性代数方程组的数值解法实验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)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。
重复上述实验,观察记录并分析实验结果。
程序清单n=input('矩阵A 的阶数:n=');A=6*diag(ones(1,n))+diag(ones(1,n-1),1)+8*diag(ones(1,n-1),-1); b=A*ones(n,1);p=input('计算条件数使用p-范数,p='); cond_A=cond(A,p) [m,n]=size(A);Ab=[A b];r=input('选主元方式(0:自动;1:手动),r=');Abfor i=1:n-1switch rcase(0)[aii,ip]=max(abs(Ab(i:n,i)));ip=ip+i-1;case (1)ip=input(['第',num2str(i),'步消元,请输入第',num2str(i),'列所选元素所处的行数:']);end;Ab([i ip],:)=Ab([ip i],:);aii=Ab(i,i);for k=i+1:nAb(k,i:n+1)=Ab(k,i:n+1)-(Ab(k,i)/aii)*Ab(i,i:n+1);end;if r==1Abendend;x=zeros(n,1);x(n)=Ab(n,n+1)/Ab(n,n);for i=n-1:-1:1x(i)=(Ab(i,n+1)-Ab(i,i+1:n)*x(i+1:n))/Ab(i,i);endx运行结果(1)n=10,矩阵的条件数及自动选主元Cond(A,1) =×103Cond(A,2) = ×103Cond(A,inf) =×103程序自动选择主元(列主元)a.输入数据矩阵A的阶数:n=10计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=0b.计算结果x=[1,1,1,1,1,1,1,1,1,1]T(2)n=10,手动选主元a. 每步消去过程总选取按模最小或按模尽可能小的元素作为主元矩阵A 的阶数:n=10计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=1(1)(1)61786115[]861158614A b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第1步消元,请输入第1列所选元素所处的行数:1(2)(2) 6.0000 1.00007.00004.6667 1.0000 5.66678.0000 6.000015.0000[]8.00001.000015.00006.0000 1.00008.0000 6.0000 1.000015.00008.0000 6.000014.0000A b ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第2步消元,请输入第2列所选元素所处的行数:2…(实际选择时,第k 步选择主元处于第k 行) 最终计算得x=[, , , , , , , , , ]Tb. 每步消去过程总选取按模最大的元素作为主元 矩阵A 的阶数:n=10计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=1(1)(1)61786115[]861158614A b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第1步消元,请输入第1列所选元素所处的行数:2(2)(2)8.0000 6.0000 1.000015.0000-3.50000.7500-4.250008.0000 6.0000 1.000015.0000[]8.0000 6.000015.00008.0000 1.00006.0000 1.000015.00008.0000 6.000014.0000A b ⎡⎤⎢⎥-⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第2步消元,请输入第2列所选元素所处的行数:3…(实际选择时,第k 步选择主元处于第k+1行) 最终计算得x=[1,1,1,1,1,1,1,1,1,1]T(3)n=20,手动选主元a. 每步消去过程总选取按模最小或按模尽可能小的元素作为主元 矩阵A 的阶数:n=20计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=1(1)(1)61786115[]861158614A b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第1步消元,请输入第1列所选元素所处的行数:1(2)(2) 6.0000 1.00007.00004.6667 1.0000 5.66678.0000 6.000015.0000[]8.00001.000015.00006.0000 1.00008.0000 6.0000 1.000015.00008.0000 6.000014.0000A b ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第2步消元,请输入第2列所选元素所处的行数:2…(实际选择时,第k 步选择主元处于第k 行) 最终计算得x=[,,,,,,,,,,,,,,,,,,,]T b. 每步消去过程总选取按模最大的元素作为主元 矩阵A 的阶数:n=20计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=1(1)(1)61786115[]861158614A b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第1步消元,请输入第1列所选元素所处的行数:2(2)(2)8.0000 6.0000 1.000015.0000-3.50000.7500-4.250008.0000 6.0000 1.000015.0000[]8.0000 6.000015.00008.0000 1.00006.0000 1.000015.00008.0000 6.000014.0000A b ⎡⎤⎢⎥-⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第2步消元,请输入第2列所选元素所处的行数:3…(实际选择时,第k步选择主元处于第k+1行)最终计算得x=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]T(4)A分别为幻方矩阵,Hilbert矩阵,pascal矩阵和随机矩阵简要分析计算(1)表明:对于同一矩阵,不同范数定义的条件数是不同的;Gauss消去法在消去过程中选择模最大的主元能够得到比较精确的解。
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]);}。
SOR与SSOR迭代法收敛速度的关系

P s) 1 I+l() (: ≤1 I+l() 1 Vl 0 1,() 0 1 (: ≤( 一l I J) ≤PL ) 一l I J < , I∈( ,lPJ ∈[ ,] , , p , , p ,
这推广了 W zi i on k 的结果 。 c 最后给 出一个例子来 验证 我们的结果 。 关键词 : S R迭代方 法;S R迭代方法 ; O SO 谱半径
中图分类号 : 04 . 文献标识码 : A 2 16 文章 编 号 : 10 9 9 (0 8 0 0 0 0 0 7— 73 20 )4— 0 7— 3
对于线 性方程 组
A x=b ・ () 1
其 中 A=( R 非 奇异 , bE 口)∈ , R . 设 A=D— L—U, 中 D、 和 一 分 别是 A的对 角 、 格下 三 角 和严 格 上 三角 矩 阵 。不 失一 般 其 一 严 性 , D=, 取 。则 S R与 SO 0 S R迭代 方法分 别 为
Vo . 8 No 4 12 .
J1 0 8 u .2 0
S R与 S O 0 S R迭 代 法 收敛 速 度 的 关 系 ‘
李 爱 娟
( 山东理工大学数学与信息科学学院 , 山东 淄博 254 ) 509
摘 要: 当 A 为非奇异的 肘一 阵时, zii Wo c 只指出了 SO nk S R迭代矩阵的谱半径P .) S R迭代 (:小于 0 s
维普资讯
‘
8‘
云南师范大学学报 ( 自然科学 版) Nhomakorabea第2 8卷
P ) I 一∞I t ( ) ( ≤ I + o J p p ) I 一∞I t ( ) ( ≤ I +o J ) p
() 8 () 9
第五章 第三节 SOR迭代法

k
即
DX
k 1
LX
k 1
1 DX UX b
k k
于是有
( D L) X X
k 1 k 1
[1 D U ] X b
k k
( D L) 1[1 D U ] X ( D L) 1 b
阵来说,这一条件是充分的。
定理7 如果矩阵 A 是对称正定的,则 SOR 法 对于0 2 是收敛的。 这一定理说明, 对于对称正定矩阵 ,只要 0 2 , SOR 迭代法总是收敛的。
用 SOR 法计算方程组时,选取合适的松弛因
子很重要,松弛因子选取得好,可能使得收敛速 度大大加快,下面举例来说明松弛因子的选取对 收敛速度的影响。
将方程组 AX b 写成
ai1 x1 ai 2 x2 ai ,i 1 xi 1 aii xi ain xn bi , (i 1, 2,, n)
aii xi bi ai1 x1 ai 2 x2 ai ,i 1 xi 1 ai ,i 1 xi 1 ain xn aii xi aii xi (bi ai1 x1 ai 2 x2 ai ,i 1 xi 1 aii xi ai ,i 1 xi 1 ain xn )
SOR
迭代法收敛与否或收敛快慢都与松弛因 的范围,有如下定理。
子 有关 。 关于
定理6
SOR
迭代法收敛的必要条件是松弛
因子 应满足条件 0 2 。
因 SOR 法收敛,故 B 1 。记 B 的 特征值 为 1,2 , n 。因为n阶矩阵的n个 特征值之积等于其行列式之值,即 证明
数值分析实验报告--实验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。
sor迭代法

sor迭代法Sor迭代法是一种求解线性方程组的算法,它是Jacobi迭代法和Gauss-Seidel迭代法的改进。
在本文中,我们将深入探讨Sor迭代法的原理、优缺点以及应用。
一、原理1.1 Sor迭代法的基本思想Sor迭代法是通过对Jacobi迭代法和Gauss-Seidel迭代法进行改进得到的。
其基本思想是在Jacobi迭代和Gauss-Seidel迭代中引入一个松弛因子,使得每次更新后的值更接近于真实解。
1.2 Sor迭代公式Sor迭代公式如下:$x^{(k+1)}_i=(1-\omega)x^{(k)}_i+\frac{\omega}{a_{ii}}\left(b_i-\sum_{j=1,j\neq i}^n a_{ij}x^{(k+1)}_j\right)$其中,$x^{(k+1)}_i$表示第$k+1$次迭代中第$i$个未知数的值;$x^{(k)}_i$表示第$k$次迭代中第$i$个未知数的值;$\omega$为松弛因子;$a_{ii}$为系数矩阵中第$i$行第$i$列元素;$\sum_{j=1,j\neq i}^n a_{ij}x^{(k+1)}_j$表示第$k+1$次迭代中除第$i$个未知数外的其他未知数的值的和;$b_i$为方程组中第$i$个方程的常数项。
1.3 松弛因子松弛因子$\omega$是Sor迭代法中一个重要的参数,它控制了每次迭代后更新值与真实解之间的距离。
一般情况下,松弛因子取值在0和2之间。
当$\omega=1$时,Sor迭代法退化成Gauss-Seidel迭代法;当$\omega=0$时,Sor迭代法退化成Jacobi迭代法。
二、优缺点2.1 优点(1)收敛速度快:相比于Jacobi迭代法和Gauss-Seidel迭代法,Sor迭代法具有更快的收敛速度。
(2)适用范围广:Sor迭代法适用于大多数线性方程组求解问题,并且不需要对系数矩阵做任何特殊处理。
2.2 缺点(1)松弛因子需要调整:松弛因子是影响Sor迭代法收敛速度和精度的关键参数,因此需要通过试验或经验来确定最优值。
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 的雅可比迭代法的迭代矩阵。
判定矩阵谱半径小于1的一种方法

判定矩阵谱半径小于1的一种方法李玉清【期刊名称】《高等数学研究》【年(卷),期】2012(015)001【摘要】讨论Gauss-Seidel迭代法收敛性的条件,给出一种判定矩阵谱半径小于1的方法,并将其应用于Gauss—Seidel迭代法收敛性,及对任意松弛因子0〈ω〈2时SOR法收敛性的证明.%In this paper, the Gauss-Seidel iteration convergence conditions are discussed, and a more streamlined test for spectral radius of a matrix being less than 1 is provicted. Using the result, we prove further the convergence of the Gauss-Seidel iteration and the convergence of the SOR method for arbitrary flabby factor 0〈ω〈2.【总页数】2页(P75-76)【作者】李玉清【作者单位】西安工业大学理学院,陕西西安710032【正文语种】中文【中图分类】O151.21【相关文献】1.改进的Gauss-Seidel迭代法对于H-矩阵及其比较矩阵谱半径的影响 [J], 孙丽英2.非负矩阵Hadamard积的谱半径上界和M-矩阵Fan积的最小特征值下界的新估计 [J], 孙德淑3.可解数值半径与复合矩阵谱半径的连续性 [J], 伍国兴4.一种非负矩阵谱半径上界的估计方法 [J], 査显伟;段复建5.一种0-1矩阵谱半径的快速估计 [J], 段复建;张可村;甘小霞因版权原因,仅展示原文概要,查看原文内容请购买。
实验目的:了解SOR法迭代矩阵谱半径和迭代参数的关系

数值实验一实验目的:了解SOR法迭代矩阵谱半径和迭代参数的关系。
实验内容:10.50010.50.501A⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦,画出SOR迭代谱半径和ϖ之间的曲线,并据此分析ϖ的收敛范围及ϖ取何值时,迭代法收敛速递最快。
实验原理:逐次超松弛迭代法(SOR法)是Gauss-Seidel法的一种加速方法,SOR法的公式为:其中,方程组收敛的充要条件是:ρ(Lω)<1引进超松弛迭代法的思想在于希望能选择松弛因子使得迭代方程式收敛速度较快,即需选择因子使得对称正定阵迭代收敛必要条件为0<ϖ<2,而本实验中矩阵并非对称正定阵,故将此范围扩大至-1<ϖ<3,求解分析过程如下:以下为MATLAB程序:P=zeros(1,4001); %构造用来储存谱半径的行向量A=[1 0.5 0;0 1 0.5;0.5 0 1];%建立矩阵AD=diag(diag(A)); %求对角矩阵DU=-triu(A,1);%求上三角矩阵UL=-tril(A,-1);%求下三角矩阵Ln=0;for w=-1:0.001:3;n=n+1;B=(inv(D-w*L))*((1-w)*D+w*U);P(1,n)=max(abs(eig(B)));endw=-1:0.001:3;plot(w,P);xlabel('\omega');ylabel('\rho(L_\omega)'); %画出谱半径随松弛因子变化图title('谱半径与松弛因子的变化关系图');k=find(P==min(P)); %寻找最小谱半径wmin=w(k); %最小谱半径对应之因子ϖdisp(min(P)); %输出最小谱半径数值disp(wmin); %输出对应因子ϖ值实验图形:实验结论:由上图分析可知当0<ϖ<1.5时,谱半径ρ(Lω)<1,此时方程组迭代收敛经计算可知当ϖ=0.3381时,谱半径ρ(Lω)=0.9410,此时迭代速度最快。
SOR的一种新的预处理方法

精度为10-64,机器类型为英特尔核 2.4GHz,内存 4GB.停止准则为 Normr<10-6 或者迭代数超过1 000.
残 差被定义为:RES:= Ax -b 2 <10-6,右边向量为b=Ae .其中,e= (1,1,… ,1)T ,初始向量为x0 =
(0,0,… ,0)T .
例2.1 考虑 Weiner-Hopf方程 Anx =b,这里
定义1 对于i,j =1,2,…,n 且i ≠j,满足aij <0,则矩阵 A 为Z 矩阵. 定义2 矩阵 A 为 M 矩阵.若 A =sI-B,B ≥0且s>ρ(B),这里ρ(B)是 B 的谱半径. 定义3 矩阵 A 是不可约的,若 A 的有向图是强凸的.
2 数值结果
本节将用两个数值实验,通过和不同预处理方法进行比较来说明该预处理方法的有效性 .其中不同预处 理方法的迭代矩阵分别用 T,TC,TS,T^ 来表示,谱半径,迭 代 次 数,和 计 算 时 间 分 别 用 “ρ”,“IT”,和 “CPU” (单位:秒)来表示,参数ω 的取值用ωopt 表示.所有的数值实验都是在 MATLAB(R2015a)中进行的,且机器
TS = (DS -βLS)-1((1-β)DS +βUS) 这 里 ,0 <β < 2 是 松 弛 参 数 .
1 算法
本章主要考虑下列线性系统的预处理问题:
^
^
A ≡ (I+C+S)Ax = (I+C+S)b≡b.
^
^
^
^
^
^
^
设 A ≡ D -L-U,其中, D ≡I+D1,L ≡L+L1 和U ≡U +U1,这里,D1,-L1,-U1 分别为
这 里 ,T
=
M
N -1
PP
SOR法

实验报告课程名称:__________计算方法___________指导老师:__许诺、徐政________成绩:__________________ 实验名称:__SOR 法解方程组___实验类型:________________同组学生姓名:__________一、实验目的和要求(必填) 二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤 五、实验数据记录和处理六、实验结果与分析(必填) 七、讨论、心得一、实验目的1. 学习Matlab 编程语言,熟练Matlab 软件的使用2. 深入理解和掌握SOR 迭代法解方程组的原理二、实验原理在SOR 迭代法中,松弛因子w 的取值对迭代公式的收敛速度影响很大,利用Matlab 编程的方法可以直接观测不同w 值下,公式收敛速度上的差异。
三、实验内容 用Matlab 软件编程,以SOR 迭代法解下列方程组问题 4x 1—x 2 =1, -x 1+4x 2—x 3=4, -x 2+4x 3=-3; 求精度要求为r=5*10-6,松弛因子分别为w1=1.03 ,w2= 1,w3 =1.1时方程组的解及迭代次数四、Matlab 源程序function X=SOR(A,b,r,w1,w2,w3)%定义函数SOR(A,b,r,w1,w2,w3),含五个变量 A=input('请输入系数矩阵A :');b=input('请输入b 矩阵b :');r=input('请输入精度要求r :');W (1)=input('请输入松弛因子w1:');W (2)=input('请输入松弛因子w2:');W (3)=input('请输入松弛因子w3:'); %依次分别显示六组提示n=length(A); %求矩阵的行数nfor p=1:3 % p 表示三个松弛因子的顺序X=zeros(1,n); %设定初始迭代向量for j=1:250 % 自行设定最大迭代次数为250次for i=1:nX(i)=X(i)+w(p)*(b(i)-A(i,:)*X')/A(i,i); %SOR 迭代公式专业:电气工程及其自动化姓名:陆校斌学号:3061001143日期:2008.3.29地点:寝室电脑 装订线endfor i=1:nF(i)=w(p)*(b(i)-A(i,:)*X')/A(i,i); %F(i)为X(i)迭代前后之差endif max(abs(F))<r %判断F(i)最大值是否满足精度要求breakend %当满足精度要求时,结束判断语句enddisp('迭代次数为') %输出迭代次数jdisp('方程组之解为') %输出方程组的解Xend %结束程序五、程序测试请输入系数矩阵A:[4 -1 0;-1 4 -1;0 -1 4]请输入b矩阵b:[1; 4 ;-3]请输入精度要求r:5*10^(-6)请输入松弛因子w1:1.03请输入松弛因子w2:1请输入松弛因子w3:1.1迭代次数j =5方程组的解为X =0.5000 1.0000 -0.5000迭代次数j =6方程组的解为X =0.5000 1.0000 -0.5000迭代次数j =6方程组的解为X =0.5000 1.0000 -0.5000六、结果分析由测试结果可知,松弛因子w=w1=1.03时,迭代次数最少,只需5次;而松弛因子w为1或1.1时,迭代次数均为6次。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值实验一
实验目的:了解SOR法迭代矩阵谱半径和迭代参数的关系。
实验内容:
10.50
010.5
0.501
A
⎡⎤
⎢⎥
=⎢⎥
⎢⎥
⎣⎦
,画出SOR迭代谱半径和ϖ之间的曲线,并据此
分析ϖ的收敛范围及ϖ取何值时,迭代法收敛速递最快。
实验原理:
逐次超松弛迭代法(SOR法)是Gauss-Seidel法的一种加速方法,SOR法的公式为:
其中
,
方程组收敛的充要条件是:
ρ(Lω)<1
引进超松弛迭代法的思想在于希望能选择松弛因子使得迭代方程式收敛速度较
快,即需选择因子使得
对称正定阵迭代收敛必要条件为0<ϖ<2,而本实验中矩阵并非对称正定阵,故将此范围扩大至-1<ϖ<3,求解分析过程如下:
以下为MATLAB程序:
P=zeros(1,4001); %构造用来储存谱半径的行向量
A=[1 0.5 0;0 1 0.5;0.5 0 1];%建立矩阵A
D=diag(diag(A)); %求对角矩阵D
U=-triu(A,1);%求上三角矩阵U
L=-tril(A,-1);%求下三角矩阵L
n=0;
for w=-1:0.001:3;
n=n+1;
B=(inv(D-w*L))*((1-w)*D+w*U);
P(1,n)=max(abs(eig(B)));
end
w=-1:0.001:3;
plot(w,P);
xlabel('\omega');
ylabel('\rho(L_\omega)'); %画出谱半径随松弛因子变化图title('谱半径与松弛因子的变化关系图');
k=find(P==min(P)); %寻找最小谱半径
wmin=w(k); %最小谱半径对应之因子ϖ
disp(min(P)); %输出最小谱半径数值
disp(wmin); %输出对应因子ϖ值
实验图形:
实验结论:
由上图分析可知当0<ϖ<1.5时,谱半径ρ(Lω)<1,此时方程组迭代收敛经计算可知当ϖ=0.3381时,谱半径ρ(Lω)=0.9410,此时迭代速度最快。