数值分析实验报告-Sor法分析

合集下载

数值分析6-用SOR方法求解线性方程组

数值分析6-用SOR方法求解线性方程组

程序 clear;clc; A=[4,3,0;3,4,-1;0,-1,4]; b=[24,30,-24]'; N=length(b); %解向量的维数 fprintf('库函数计算结果:'); x=inv(A)*b %库函数计算结果 x=[1;1;1];%迭代初始值 %-----(A=D-E-F)-----D=diag(diag(A)); E=-tril(A,-1);%下三角 F=-triu(A,1);%上三角 w=1.5; %松弛因子,一般 0<w<2 B=inv(D-w*E)*[(1-w)*D+w*F];g=w*inv(D-w*E)*b; eps=1e-8;%相邻解的距离小于该数时,结束迭代 %--------开始迭代------for k=1:100 %最大迭代次数为 100 fprintf('第%d 次迭代:',k); y=B*x+g; if abs(x-y)<eps break; end x=y end x
程序结果
当比较松弛因Biblioteka 取 1.0 时当比较松弛因子取 1.25 时
当比较松弛因子取 1.5 时
作业七:编写用 SOR 方法求解线性方程组 Ax=B 的标准程序,并求下 列方程组的解, 并比较松弛因子取 1.0、 1.25、 1.5 时所需迭代的次数。 可取初始向量 X(0) =(1,1,1)’;迭代终止条件||x(k+1)-x(k)||<=10e-8
4 30 ������1 24 3 4 − 1 x2 = 30 0 − 14 x3 −24

数值分析上机实习报告

数值分析上机实习报告

指导教师:姓名:学号:专业:联系电话:上海交通大学目录序言 (3)实验课题(一) 雅可比迭代法和高斯-塞得尔迭代法的收敛性和收敛速度 (4)数值分析 (6)实验课题(二) 松弛因子对SOR法收敛速度的影响 (6)数值分析 (12)总结 (13)附录(程序清单) (14)1.雅可比迭代法和高斯-塞得尔迭代法的收敛性和收敛速度 (14)雅可比迭代法: (14)高斯-塞得尔迭代法: (16)2.松弛因子对SOR法收敛速度的影响 (18)松弛法(SOR) (18)序言随着科学技术的发展,提出了大量复杂的数值计算问题,在实际解决这些计算问题的长期过程中,形成了计算方法这门学科,专门研究各种数学问题的数值解法(近似解法),包括方法的构造和求解过程的误差分析,是一门内容丰富,有自身理论体系的实用性很强的学科。

解决工程问题,往往需要处理很多数学模型,这就要花费大量的人力和时间,但是还有不少数学模型无法用解析法得到解。

使用数值方法并利用计算机,就可以克服这些困难。

事实上,科学计算已经与理论分析、科学实验成为平行的研究和解决科技问题的科学手段,经常被科技工作者所采用。

作为科学计算的核心内容——数值分析(数值计算方法),已逐渐成为广大科技工作者必备的基本知识并越来越被人重视。

由于数值方法是解数值问题的系列计算公式,所以数值方法是否有效,不但与方法本身的好坏有关,而且与数值问题本身的好坏也有关,因此,研究数值方法时,不但需要研究数值方法的好坏,即数值稳定性问题,而且还需要研究数值问题本身的好坏,即数值问题的性态,以及它们的判别问题。

数值计算的绝大部分方法都具有近似性,而其理论又具有严密的科学性,方法的近似值正是建立在理论的严密性基础上,根据计算方法的这一特点。

因此不仅要求掌握和使用算法,还要重视必要的误差分析,以保证计算结果的可靠性。

数值计算还具有应用性强的特点,计算方法的绝大部分方法如求微分方程近似解,求积分近似值,求解超越方程,解线性方程组等都具有较强的实用性,而插值法,最小二乘法,样条函数等也都是工程技术领域中常用的,有实际应用价值的方法。

sor方法

sor方法

sor方法
SOR方法是一种迭代数值解法,主要被用于求解线性系统Ax=b,其中A是系数矩阵,b是右端向量。

SOR方法的全称为"Successive Over-Relaxation Method",意为迭代超松弛法。

在使用SOR方法求解线性方程组时,首先需要将系数矩阵A分解为L、D和U 三个部分,其中L是A的严格下三角矩阵,D是A的对角线矩阵,U是A的严格上三角矩阵。

同时,SOR方法还需要一个松弛因子w。

SOR方法的迭代公式为:
x(k+1) = (1-w)x(k) + w(D-wL)^(-1)(b-Ux(k))
其中x(k)表示第k次迭代求得的解向量,x(k+1)表示x(k)的下一次迭代,^(−1)表示逆矩阵。

可以发现,SOR方法是基于Gauss-Seidel方法的改进,它在每一次迭代中添加了一个松弛因子w,从而使得解向量的迭代更快、更稳定。

在实际应用中,我们需要选择一个合适的松弛因子w,以使得SOR方法能够收敛并且收敛速度较快。

一般来说,选择一个小于1的w能够保证SOR方法的收敛性,而选择一个大于1的w能够加快SOR方法的收敛速度。

需要注意的是,SOR方法只能够求解特定条件下的线性方程组,如系数矩阵为对称正定矩阵、对角占优矩阵等。

当系数矩阵不满足这些条件时,SOR方法可能出现发散的情况。

总的来说,SOR方法是一种简单而有效的数值解法,被广泛应用于工程计算等领域。

在使用时,需要根据具体问题选择合适的松弛因子w,并且注意其收敛性和收敛速度。

数值分析实验报告 第一次

数值分析实验报告 第一次

华中科技大学本科实验报告课程名称:数值分析姓名:姜福鑫学号:U201310044专业班级:应数1302指导老师:黄乘明实验题目:线性方程组的迭代解法日期:2015-4-9实验成绩:1.实验目的通过上机实验,理解利用计算机迭代求解线性方程组的整个过程,加深对所学计算方法的理论及算法特点的理解。

2.实验题目2.1利用算法2.1(Jacobi迭代法),编制MATLAB程序,求线性方程组。

(1)14x+42x+43x+44x=-414x+142x+43x+44x=1614x+42x+143x+44x=3614x+42x+43x+144x=561(2)10.9x+1.22x+2.13x+0.94x=-7.011.2x+11.22x+1.53x+2.54x=5.312.1x+1.52x+9.83x+1.34x=10.310.9x+2.52x+1.33x+12.34x=24.61的近似解,取初值x=T)0,0,0,0(2.2利用算法2.2(Gauss-Seidel迭代法),编制MATLAB程序,求线性方程组。

(1)6x-22x-3x-4x=-161-2x+122x-3x-4x=61-x-2x+63x-24x=81-x-2x-3x+124x=541(2)0.78x-0.022x-0.123x-0.144x=0.761-0.02x+0.862x-0.043x-0.064x=0.081-0.12x-0.042x+0.723x-0.084x=1.121-0.14x-0.062x-0.083x+0.744x=0.681的近似解,取初值x=T)0,0,0,0(2.3利用算法2.2(SOR法),编制MATLAB程序,求线性方程组。

(1)-4x+2x+3x+4x=11x-42x+3x+4x=11x+2x-43x+4x=11x+2x+3x-44x=11(2)x-0.253x-0.254x=0.51x-0.253x-0.254x=0.52-0.25x-0.252x+3x=0.51-0.25x-0.252x+4x=0.51的近似解,取初值x=T)0,0,0,0(3.程序文本function x=majacobi(A,b,x0,ep,N)n=length(b);if nargin<5,N=500;endif nargin<4,ep=1e-6;endif nargin<3,x0=zeros(n,1);endx=zeros(n,1);k=0;while k<Nfor i=1:nx(i)=(b(i)-A(i,[1:i-1,i+1:n])*x0([1:i-1,i+1:n]))/A(i,i);endif norm(x-x0,inf)<ep,break;endx0=x;k=k+1;endif k==N,Warning('已达到迭代次数上限');enddisp(['k=',num2str(k)])2.2function x=maseidel(A,b,x0,ep,N)n=length(b);if nargin<5,N=500;endif nargin<4,ep=1e-6;endif nargin<3,x0=zeros(n,1);endx=zeros(n,1);k=0;while k<Nfor i=1:nif i==1x(1)=(b(1)-A(1,2:n)*x0(2:n))/A(1,1);else if i==nx(n)=(b(n)-A(n,1:n-1)*x(1:n-1))/A(n,n);elsex(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);endendendif norm(x-x0,inf)<ep,break;endx0=x;k=k+1;endif k==N,Warning('已达到迭代次数上限');enddisp(['k=',num2str(k)])2.3function x=masor(A,b,omega,x0,ep,N)n=length(b);if nargin<6,N=500;endif nargin<5,ep=1e-6;endif nargin<4,x0=zeros(n,1);endif nargin<3,omega=1.5;endx=zeros(n,1);k=0;while k<Nfor i=1:nif i==1x1(1)=(b(1)-A(1,2:n)*x0(2:n))/A(1,1);else if i==nx1(n)=(b(n)-A(n,1:n-1)*x(1:n-1))/A(n,n);elsex1(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);endendx(i)=(1-omega)*x0(i)+omega*x1(i);endif norm(x-x0,inf)<ep,break;endx0=x;k=k+1;endif k==N,Warning('已达到迭代次数上限');enddisp(['k=',num2str(k)])4.运行结果与分析2.11.k=94x=-2.00000.00002.00004.00002.22.k=17x=-0.99860.00711.00321.96562.21.k=11 x=-1.07820.95532.88974.7306 2.22.k=8 x=1.55030.32321.99341.45392.31.k=21 x=-1.0000-1.0000-1.0000-1.0000 2.32.k=21 x= 1.00001.00001.00001.0000分析:对比三种方法,Jacobi迭代法次数较多才能到达精度要求,Gause-Seidel迭代法次数较少,SOR法次数处于两者之间。

东北大学软件学院数值分析程序实践报告

东北大学软件学院数值分析程序实践报告

数值分析程序实践 实验报告东北大学软件学院实验目的:用SOR 法求解方程组:=0.65、1、1.2、1.45计算.要求精度为10-6;并指出迭代次数。

实验代码和结果:#include<iostream>⎪⎪⎩⎪⎪⎨⎧=+-+-=-+-=+-+--=-+-1322151481615356212146106882644321432143214321x x x x x x x x x x x x x x x x#include<iomanip>#include<cmath> // fabs();using namespace std;void SolveEquation(const int &dim){double *Arr = new double[dim*dim]; //方程矩阵double *B = new double[dim]; //方程右端系数double *X = new double[dim]; //初始解double *dX = new double[dim];double e; //解的精度double w; //w==1时,为GS迭代double S, S1;const int N = 5000; //最大迭代次数,防止死机int n=0;bool hasSolved = false;cout << endl << "初始化方程组左端系数矩阵!" << endl;for (int i=0; i<dim; i++){for (int j=0; j<dim; j++){cout << "Arr[" << i << "][" << j << "]: ";cin >> Arr[i*dim+j];}}cout << "初始化方程组右端系数矩阵!" << endl;for (i=0; i<dim; i++){cout << "B[" << i << "]: ";cin >> B[i];}system("cls");cout << "方程组如下: " << endl << endl;for (i=0; i<dim; i++){for (int j=0; j<dim; j++){cout << setw(8) << Arr[i*dim+j] << " X" << j+1;if (j < dim-1) cout << " + ";else if (j == dim-1) cout << " = ";}cout << setw(8) << B[i] << endl;}cout << endl << "设置解的精度要求:(比如1e-6)" << endl; cin >> e;cout << endl;cout << "输入初始向量!" << endl;for (i=0; i<dim; i++){cout << "X[" << i+1 << "]: ";cin >> X[i];}cout << endl << "设置参数ω ( 0<ω<2 )!" << endl;cin >> w;for (int k=0; k<N; k++) //3-8{S = 0.0;for (i=0; i<dim; i++) //5-7{double sum = 0.0;for (int j=0; j<dim; j++){sum += Arr[i*dim+j]*X[j];}if (fabs(Arr[i*dim+i]) < 1e-10){cout << "被零除!" << endl << Arr[i*dim+i] << endl; exit(0);}dX[i] = w * (B[i] - sum) / Arr[i*dim+i];S1 = dX[i];if (fabs(S1) > fabs(S)){//fabs()取绝对值函数S = S1;}X[i] = X[i] + S1;}n++;if (fabs(S) <= e){cout<<"迭代次数为:"<<endl;cout<<n<<endl;hasSolved = true;//system("cls");cout << "线性方程组的解为:" << endl;for (int t=0; t<dim; t++){cout << "X" << t+1 << "=" << X[t] << "\t";}cout << endl;break;}}if (!hasSolved){cout << "初始向量或ω不合理, 请重新设置!" << endl; }delete[] Arr;delete[] B;delete[] X;delete[] dX;}void main(){int dim;cout << "输入线性方程组未知数个数: ";cin >> dim;SolveEquation(dim);}w=0.65W=1W=1.2W=1.45。

超松弛迭代法(SOR方法)

超松弛迭代法(SOR方法)

解:SOR迭代公式
x1( k
1)
(1 )x1(k )
4
(10 2x2(k )
4x3(k ) )
x
(k 2
1)
(1 )x2(k )
17
(3
2
x1(
k
1)
10x3(k ) )
x3( k
1)
(1 )x3(k )
9
(7 4x1(k 1)
10
x
(k 2
1)
)
初值 x (0) (0,0,0)T k = 0,1,2,…,
例该4方.4程用组S的OR精法确求解解线x (性*) 方 程(2组,1,1)T
如值只果需x(0取)迭ω取代(0=,04ω21,00x(=42)即1次T1xx,要11.高4便26达x斯11,可207到—xx要达22同4塞求到x样319德精0x精x3尔度130度迭要x,(3k7代求需1) 法要x)迭(和k) 代同1一1100初6次
数值计算方法
超松弛迭代法(SOR方法) 使用迭代法的困难在于难以估计其计算
量。有时迭代过程虽然收敛,但由于收敛速 度缓慢,使计算量变得很大而失去使用价值 。因此,迭代过程的加速具有重要意义。逐 次超松弛迭代(Successive Over relaxatic Method,简称SOR方法)法,可以看作是带参 数的高斯—塞德尔迭代法,实质上是高斯-塞 德尔迭代的一种加速方法。
或 Dx(k1) (1)Dx(k) (b Lx(k1) Ux(k) )
故 (D L)x(k1) (1)D Ux(k) b
显然对任何一个ω值,(D+ωL)非奇异,(因为假设 aii 0,i 1,2,, n )于是超松弛迭代公式为
x(k1) (D L)1 (1)D U x(k) (D L)1b

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

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

数学与计算科学学院《数值分析》课程设计题目:迭代法解线性方程组专业:信息与计算科学学号:*******-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 。

数值方法实验报告

数值方法实验报告

2009-2010学年第一学期《数值方法》实验报告学院:石油工程学院专业班级:指导教师:李梦霞学生姓名:实验一1.题目高斯列主元素消去法:用Gauss列主元消去法解线性方程组Ax b=,其中,A=17.031 -0.615 -2.991 1.007 -1.006 0.000-1.000 34.211 -1.000 -2.100 0.300 -1.7000.000 0.500 13.000 -0.500 1.000 -1.5004.501 3.110 -3.907 -61.705 12.170 8.9990.101 -8.012 -0.017 -0.910 4.918 0.1001.0002.0003.0004.5005.000 21.803⎛⎫⎪⎪⎪⎪⎪⎪⎪⎪⎝⎭0.230-52.32254.000240.23629.304-117.818b⎛⎫⎪⎪⎪= ⎪⎪⎪⎪⎪⎝⎭2.理论分析及算法描述(1)理论分析:由高斯消去法,当a)(k kk=0时,消去过程则中断。

此外,即使a)(k kk≠0,但当绝对值较小时,也会因用它作除数而出现舍入误差急剧增长的系数,从而导致计算结果不准确。

列主元高斯消去法只需在高斯消去法消去过程的第k步消去计算前,插入搜索绝对值最大元和交换过程(交换增广矩阵的行)的处理。

(2)Guass 列主元消去法算法描述:Step1:k=1;Step2:按列选主元|a ikk|=|a ik|,r ik↔r k;Step3:if|a ikk |=0,停止计算;Step4:i k =K ,则不换行。

Else ,交换i k 行与K 行,a ikj ↔a k j (j=k,...N),bik↔b k ;Step5:计算乘数akkik a lik =(i=k+1,...n);Step6:消元计算a ij =aij-lik*a k jb i=b i-lik*bk(i,j=k+1,...n);Step7:k=k+1,If k<=n-1转Step2; Step8:回代求解axa kkk ikjkk∑+-=n1*b b (k=n,n-1,...1)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析实验报告
一、 实验目的
1、会使用Sor 法求解一个线性方程组
2、熟悉matlab 语言并结合原理编程求方程组
3、改变ω的值观察实验结果
4、会分析实验结果 二、实验题目
编制Sor 迭代格式程序进行求解一个线性方程组的迭代计算情况,运行中要选用不同的松弛因子ω进行尝试
三、 实验原理
Jacobi 迭代和seidel 迭代对具体的线性方程组来说,逼近*x 的速度是固定不变的,遇到收敛很慢的情况时就显得很不实用。

Sor 法是一seidel 迭代为基础,并在迭代中引入参数ω以增加迭代选择的灵活性,具体为:
!
用seidel 迭代算出的,)()1()()1(k k J k k J
x x x x x -=∆++相减得到差向量与再用参数ω乘之再加上
)1()()()1()1()()()1(++++-=∆+=k J
k 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==4
eps= ;
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的下三角阵(
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)>=eps
x0=x;
x =B*x0+f;
n=n+1;
if(n>=M)

disp('Warning: 迭代次数太多,可能不收敛!'); return;
end
end
输入数据:
>> 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 =
;
5
error;
>> 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 ==> error
Not enough input arguments.

Error in ==> SOR at 13
用实验3中的线性方程组作为例子比较得
当ω=时,x = 迭代次数为n=21
当ω=1时,x = 迭代次数为n=5
当ω=时,出现error
五、实验分析
由定理,Sor法收敛的必要条件是0<ω<2,因此,当ω=和1时,算法收敛,能够求出根,并且迭代次数根据ω的不同而不同,在求方程组的根时,只要选择恰当的ω,收敛是很快的。

而当ω>2 时,算法不收敛,因此程序出现错误,不能求出根。

当ω=1时,根据Sor法的构造方法知,此时的Sor法就是seidel法。

相关文档
最新文档