文档库 最新最全的文档下载
当前位置:文档库 › SOR迭代法松弛因子选取

SOR迭代法松弛因子选取

SOR迭代法松弛因子选取
SOR迭代法松弛因子选取

用SOR迭代法

一、数值求解如下正方形域上的Poisson 方程边值问 二、2222(,)2,0,1 (0,)(1,)(1),01(,0)(,1)0, 01u u f x y x y x y u y u y y y y u x u x x ??? ??-+==<

jacobi G-S,超松弛迭代法MATLAB程序

function iteration A=[10,1,2,3,4; 1,9,-1,2,-3; 2,-1,7,3,-5; 3,2,3,12,-1; 4,-3,-5,-1,15]; b=[12,-27,14,-17,12]'; x0=[0,0,0,0,0]'; tol=1e-12; disp('jacobi迭代法的结果和次数如下:') [x,k]=Fjacobi(A,b,x0,tol) disp('G-S迭代法的结果和次数如下:':') [x,k]=Fgseid(A,b,x0,tol) disp('超松弛的结果和次数如下:':') [x,k]=Fsor(A,b,x0,1.2,tol) disp('共轭梯度法的结果和次数如下:':') [x,k]=Fcg(A,b,x0,tol) %jacobi迭代法 function [x,k]=Fjacobi(A,b,x0,tol) max=300; D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); B=D\(L+U); f=D\b; x=B*x0+f; k=1; while norm(x-x0)>=tol x0=x; x=B*x0+f; k=k+1; if(k>=max) disp('μü′ú3?1y300′?£?·?3ì×é?é?ü2?ê?á2'); return; end end %G-S迭代法 function [x,k]=Fgseid(A,b,x0,tol) max=300; D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); G=(D-L)\U; f=(D-L)\b; x=G*x0+f; k=1; while norm(x-x0)>=tol x0=x; x=G*x0+f; k=k+1; if(k>=max) disp('μü′ú3?1y300′?£?·?3ì×é?é?ü2?ê?á2'); return; end

实验一 用超松弛迭代法求解接地金属槽内电位分布

实验一 用超松弛迭代法求解接地金属 槽内电位分布 学院:自动化学院 姓名: 学号: 一、实验内容: 试用超松弛迭代法求解接地金属槽内电位的分布。 已知:cm a 4=,mm a h 104/== 给定边值如图所示。 给定初值:0)0(,=j i ? 误差范围:510-=ε 计算迭代次数,j i ,?分布。 二.实验设计原理:有限差分法 有限差分法(Finite Differential Method )是基于差 分原理的一种数值计算法。其基本思想:将场域离散为许多 小网格,应用差分原理,将求解连续函数?的泊松方程的问 题换为求解网格节点上?的差分方程组的问题。 编程时已经考虑到题目要求,所以直接将边值编入到程 序中,这样可以省略输入,从而直接输入迭代因子进行求解,可以减少编程的难度。这次编程和以前不同的是将数组和正0=?= V 100 ? 0=?0=?

交函数图像结合起来,所以在考虑输入和输出的时候会有一些难度,因为数组是上面是小的而图像上面越在上,代表坐标就越大。所以在输入和输出的时候要谨慎对待。 迭代时所用公式是和书上一样,为 a[i][j]=b[i][j]+w/4*(b[i+1][j]+b[i][j+1]+a[i][j-1 ]+a[i-1][j]-4*b[i][j]); 其中a代表k+1,而b代表k。 以上分析了迭代程序的实现,但是迭代循环如何终止并未说明。题目中的误差范围ε=0.00001,即当两次迭代结果相差不超过ε时停止,这里只得是九点都满足不超过ε,而并不是其中某一点达到即可。这样可以保证不是陷入死循环,从而输出结果。 这样可以画出流程图如下所示:

数值分析大作业 超松弛迭代法如何选取最佳松弛因子

超松弛迭代法如何选取最佳松弛因子 船建学院B1301095 wj 一、课题背景 逐次超松弛迭代法是Gauss-Seidel方法的一种加速方法,是解大型稀疏矩阵方程组的有效方法之一,它具有计算公式简单,程序设计容易,占用计算机内存较少等优点,但需要选择好的加速因子(即最佳松弛因子)。 最佳松弛因子ω的确定是数值代数中的一个理论难题,对于不同的矩阵,其最佳松弛因子往往相差很大,没有统一的计算公式来确定ω。由于对称正定矩阵sor方法收敛的充分必要条件为w在0到2之间,故利用对称正定矩阵一定收敛的性质,本文提供一种针对于系数矩阵为对称正定矩阵时,如何选取合适的最佳松弛因子的方法。 二、课题研究流程图 三、SOR迭代公式 逐次超松弛(Successive Over Relaxation)迭代法,简称SOR迭代法,它是在GS法基础上为提高收敛速度,采用加权平均而得到的新算法,设解方程的GS法记为 (1)

再由与加权平均得 这里ω>0称为松弛参数,将(1)式代入则得 (2) 称为SOR迭代法,[WTBX]ω>0称为松弛因子,当ω=1时(2)式即为GS法,将(2)式写成矩阵形式,则得 即 于是得SOR迭代的矩阵表示 (3) 四、Matlab程序 %sor法确定对称正定矩阵的最佳松弛因子w% clc;clear; n=100; %矩阵的阶数% for num=1:100 X=diag(rand(n,1)); U=orth(rand(n,n)-0.5); a=U'*X*U; %以上是利用随机对角矩阵和随机正交矩阵,产生随机的对称正定矩阵,正交变化不改变特征值% L=zeros(n,n); U=zeros(n,n); %分配L和U的内存空间% step=0.02; %定义w的计算精度% for k=1:(2/step) %由于对称正定矩阵sor方法收敛的充分必要条件为w在0到2之间% w=(k-1)*step; for i=1:n %一个总的for循环给三个矩阵赋值D-L-U=A,% for j=1:i-1 L(i,j)=-a(i,j);%L矩阵的赋值% end for j=i+1:n U(i,j)=-a(i,j);%U矩阵的赋值% end D(i,i)=a(i,i);%D矩阵的赋值% end

求解线性方程组——超松弛迭代法(c)

求解线性方程组——超松弛迭代法 #include #include using namespace std; float *one_array_malloc(int n); //一维数组分配float **two_array_malloc(int m,int n); //二维数组分配float matrix_category(float* x,int n); int main() { const int MAX=100;//最大迭代次数 int n,i,j,k; float** a; float* x_0; //初始向量 float* x_k; //迭代向量 float precision; //精度 float w; //松弛因子 cout<<"输入精度e:"; cin>>precision; cout<>n; a=two_array_malloc(n,n+1); cout<>a[i][j]; } } x_0=one_array_malloc(n); cout<>x_0[i]; } x_k=one_array_malloc(n);

cout<<"输入松弛因子w (1>w; float temp; //迭代过程 for(k=0;k

SOR迭代法超松弛因子选取

《计算方法》实验报告(二) 实验名称:SOR 迭代法松弛因子的选取 班级: 数学1402班 姓名: 高艺萌 学号:14404210 一、 实验目的 通过本实验学习线性方程组的SOR 迭代解法以及SOR 迭代法的编程与应用。对比分析不同条件下的超松弛因子w 的取值大小会对方程组的解造成影响,通过这个实验我们可以了解的w 不同取值会对方程组的解产生的影响。培养编程与上机调试能力。 二、 实验题目 用逐次超松弛(SOR )迭代法求解方程组b Ax =,其中 ?????????? ????????????=????????????????????????????????????????????=555555122-12-122-112-122-112-122-112-122-12-12201918321 x x x x x x A (1)给定迭代误差,选取不同的超松弛因子1>ω进行计算,观察得到的近似解向量并分析计算结果,给出你的结论; (2)给定迭代误差,选取不同的超松弛因子1<ω进行计算,观察得到的近似解向量并分析计算结果,给出你的结论; 三、 实验原理 1.逐次超松弛迭代法可以看作Gauss-Seidel 迭代法的加速, b D Ux D Lx D x k k k 1)(1)1(1)1(--+-+++= 2.SOR 迭代计算格式 b D L wD I w x U wD I w L wD x k k 111)(111)1()(])1[()-1(------+-++-= 其中,w 叫松弛因子,当w>1时叫超松弛,0

超松弛迭代法及其松弛因子的选取

2013届学士学位毕业论文 超松弛迭代法及其松弛因子的选取 学号:09404307 姓名:程启远 班级:信息0901 指导教师:崔艳星 专业:信息与计算科学 系别:数学系 完成时间:2013年5月

学生诚信承诺书 本人郑重声明:所呈交的论文《超松弛迭代中松弛因子的选取方法》是我个人在导师崔艳星指导下进行的研究工作及取得的研究成果.尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写的研究成果,也不包含为获得长治学院或其他教育机构的学位或证书所使用过的材料.所有合作者对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意. 签名:日期: 论文使用授权说明 本人完全了解长治学院有关保留、使用学位论文的规定,即:学校有权保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部分内容,可以采用影印、缩印或其他复制手段保存论文. 签名:日期: 指导教师声明书 本人声明:该学位论文是本人指导学生完成的研究成果,已经审阅过论文的全部内容,并能够保证题目、关键词、摘要部分中英文内容的一致性和准确性. 指导教师签名:时间

摘要 本文首先给出了超松弛迭代法解线性方程组的基本概念,引进了关于超松弛迭代法收敛性判别的一些定理.再基于超松弛迭代法收敛性快慢与松弛因子的选择密切相关,本文给出了能准确快速地确定最优松弛因子的方法逐步搜索法和黄金分割法,并且写出了其Matlab 程序(附录),最后通过实例验证了方法的准确性,快速性. 关键词线性方程组;超松弛迭代;Matlab程序;松弛因子

Abstract This paper firstly introduces the basic concept of the super relaxation iteration method for solving linear equations, introduced on some criterion theorem Overrelaxation iterative convergence, gives a simple Matlab program super relaxation iteration (Appendix 1). Then Overrelaxation iterative convergence speed and relaxation factor is selected based on the close relation is proposed in this paper, the rapid and accurate method of determining the optimal relaxation factor of the direct search method and the golden section method, and write the Matlab program (Appendix 2), finally the method is accurate, rapid. Key word:Linear equations; Successive Over Relaxation; Matlab program; relaxation factor

解线性方程组基本迭代法实验(ca)

Lab .解线性方程组的基本迭代法实验 【实验目的和要求】 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 为五对角矩阵 ??????????????? ???????????????? ?---- -------- ------ 32 141213214 141213214141213214 141213 2141213 (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及以上版本。 实验讲评:

SOR迭代法求解线性方程组

实验三:用SOR 迭代法求解线性方程组 ?????? ? ??=??????? ????????? ??----------74.012.018.168.072.012.006.016.012.001.103.014.006.003.088.001.016.014.001.076.04321x x x x 取初始点T x )0,0,0,0()0(=,松弛因子05.1=ω,精度要求610-=ε。 1,建立SOR.m 函数文件,此函数文件可调用,程序源码如下: function [x,n]=SOR(A,b,x0,w,eps,M) 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 的下三角阵 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

2,输入矩阵。并根据要求调用函数,运行结果如下图所示: 即经过7次迭代算出结果,且求得: 1.27151.28440.48581.2843x ?? ? ?= ? ???

超松弛迭代法求解两点边值问题(二)

超松弛迭代法求解两点边值问题(二) 摘要 本文是在matlab环境下熟悉的运用计算机编程语言并结合超松弛变量超松弛迭代法的理论基础对方程组求解。 首先,本文以微分方程边值问题为例,导出了离散化后线性方程组即稀疏线性方程组,转化对稀疏线性方程组求解问题。其次,用超松弛( SOR) 迭代法编写matlab程序,对产生的稀疏线性方程组进行迭代法求解。然后,分别改变松弛因子ω和分段数n的值,分析其收敛性和收敛速度,做出各个方面的分析和比较得到相关结论。最后,将超松弛迭代算法在计算机上运用matlab语言实现, 得出了一组与精确解较接近的数值解,并画图比较,验证逐次超松弛( SOR) 迭代法的精确性。 关键词:稀疏线性方程组;逐次超松弛迭代法;松弛因子;matlab编程 OVERRELAXATION ITERATIVE METHOD FOR SOLVING TWO-BOUNDARY VALUE PROBLEM(TWO) ABSTRACT This is familiar with the use of computer programming in matlab language and overrelaxation variable overrelaxation iteration method of the theoretical basis of solving equations. First of all, as an example, based on differential equation boundary value problem is derived after discretization is sparse system of linear equations of linear equations, the transformation of sparse linear equations to solve the problem. Second, use write matlab program over relaxation (SOR) iteration method, the iteration method solving sparse linear equations. Then, change the values of relaxation factor and section number n omega, analyzes its convergence and convergence speed, all aspects to make the analysis and comparison of related conclusions. Finally, the over-relaxation iteration algorithm is implemented on a computer using matlab language and obtained a set of numerical solution with exact solution is close to, and draw the comparison, verification of successive overrelaxation (SOR) the accuracy of iterative method. Key words: Sparse linear system of equations;Successive over relaxation iteration method; Relaxation factor;Matlab programming 目录 1 绪论 (1)

数值实验报告

数值实验报告五 班级:2017级学号:**** 姓名:*** 2017.12.5 1.数值实验问题 试用雅可比迭代法,高斯-赛德尔迭代法,超松驰迭代计算线性方程组: 取=(0,0,0,松弛因子分别取w=0.1t,1要求达到精度 。试通过数值计算得出不同的松弛因子所需要的迭代次数和收敛最快的松弛因子,并指出哪些松弛因子使得迭代发散。 2.数值方法 A=, L=-, U=-, D=diag() (1)雅可比迭代公式:

D. (2)高斯-赛德尔迭代法公式: (3)超松驰迭代方法公式: 其中w为松弛因子。 3.数值结果 如下表

最后四组,测得其在前10次内迭代所产生的结果,其中每一列为一

次迭代结果,分别如图: SOR-1.6 SOR-1.7 SOR-1.8 SOR-1.9 由于计算数据限制,其前五十列数据基本为空,所以取51到60列

由此看出,最后四组数据是发散的,数据结果不稳定,不收敛。所以最后四组得不到所需数据。 4.讨论 本次实验,分别用雅可比迭代公式,高斯-赛德尔迭代公式,超松驰迭代公式计算了此线性方程组。其中,雅可比和高斯迭代能够很好的进行运算,而超松驰迭代方法中,若松弛因子取得不够恰当,则会导致整个运算失败,得不到所需的结果,迭代不收敛,发散。此外,在进行初始值的赋值中,我是对每个矩阵都进行了赋值操作,而更简便的是,调用matlab中存在的函数,对矩阵进行运算,从而简化操作和代码,也使程序适用性更广。 程序代码: 1.雅可比迭代 function [x]=yakebi(D,L,U,b,j) format long B=D\(L+U);

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

数值分析实验报告 一、 实验目的 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) (

数学实验“线性方程组的J-迭代,GS-迭代,SOR-迭代解法”实验报告(内含matlab程序代码)

西京学院数学软件实验任务书 课程名称数学软件实验班级数0901 学号0912020107 姓名李亚强 实验课题线性方程组的J-迭代,GS-迭代,SOR-迭代方法。 实验目的 熟悉线性方程组的J-迭代,GS-迭代,SOR-迭代方法。 实验要求运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成。 实验内容线性方程组的J-迭代;线性方程组的GS-迭代;线性方程组的SOR-迭代。 成绩教师

实验四实验报告 一、实验名称:线性方程组的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(, 于

c编的sor迭代法解线性方程组的程序

c编的sor迭代法解线性方程组的程序 2010-12-15 20:33 #include #include double norm(double *x,double *y,int n) { int i=0; double s=0; for(i=0;i

超松弛迭代法解线性方程组

设计题目:超松弛迭代法解线性方程组

摘要 本文是在matlab环境下熟悉的运用计算机编程语言并结合超松弛变量超松弛迭代法的理论基础对方程组求解。 首先,本文以微分方程边值问题为例,导出了离散化后线性方程组即稀疏线性方程组,转化对稀疏线性方程组求解问题。其次,用超松弛( SOR) 迭代法编写matlab程序,对产生的稀疏线性方程组进行迭代法求解。然后,分别改变松弛因子ω和分段数n的值,分析其收敛性和收敛速度,做出各个方面的分析和比较得到相关结论。最后,将超松弛迭代算法在计算机上运用matlab语言实现, 得出了一组与精确解较接近的数值解,并画图比较,验证逐次超松弛( SOR) 迭代法的精确性。 关键词:稀疏线性方程组逐次超松弛迭代法松弛因子 matlab编程

一、问题提出 考虑两点边值问题 ()()?????==<<=+. 11,00, 10,22y y a a dx dy dx y d ε 容易知道它的精确解为 .1111ax e e a y x +??? ? ?? ---= --εε 为了把微分方程离散,把[]1,0区间n 等分,令n h 1 =,ih x i =,,1,,2,1-=n i 得到差分方程 ,212 11a h y y h y y y i i i i i =-++-++-ε 简化为 ()(),2211ah y y h y h i i i =++-+-+εεε 从而离散后得到的线性方程组的系数矩阵为 ()()()()?? ??? ?? ? ????????+-++-++-++-=h h h h h h h A εεεεεεεεεε2222 对1=ε,4.0=a ,200=n ,分别用1=ω、5.0=ω和5.1=ω的超松弛迭代法求解线性方程组,要求有4位有效数字,然后比较与精确解的误差,探讨使超松弛迭代法收敛较快的ω取值,对结果进行分析。改变n ,讨论同样问题。 二、超松弛迭代法产生的背景 对从实际问题中得到维数相当大的线性代数方程组的求解仍然十分困难, 以 至使人们不能在允许的时间内用直接方法得到解, 因此, 客观上要求用新的方法 来解决大维数方程组的求解问题。 现有大多数迭代法不是对各类线性方程组都有收敛性, 在解题时, 要对原方程组矩阵作一根本的变换, 从而可能使条件数变坏, 也可能破坏了变换前后方程组的等价性, 以及丧失使原方程组的对称性等。探求新的有效的解题方法依然是迫切的任务。逐次超松弛(Successive Over Relaxation)迭代法是在高斯-赛德尔

SOR迭代(算法分析和数值算例)

SOR 迭代 基本思想 Gauss-Seidel 迭代(1) 1() (1) ()() k k x D L U x D L +--=-+-的结果作为中间值,记为 (1) k x + 。SOR 方法是将(1) k x + 与上次计算的结果() k x 做加权平均作为最后结果。迭 代格式为: 1(1) (1) ()() 1 1 1[](1),1,2i n k k k k i i ij j ij j i j j i ii x b a x a x x i n a ω ω-++==+=- - +-=∑ ∑ 或者 1(1) () (1) () 1 1[],1,2i n k k k k i i i ij j ij j j j i ii x x b a x a x i n a ω -++===+- - =∑ ∑ 算法: 1. 0,,,A b x t e ω输入迭代初值松弛参数,为迭代次数初始值为0,为记录误差 2. 当1,2i n = 时,1 1:[]n i i i i j j j ii x x b a x a ω == +- ∑ ,结果仍然存储在i x 中。迭 代次数:1t t =+ 3. 计算误差* e x x =-(真解已知) 4. 如果6 510 e -

迭代法实验报告

迭代法实验报告 一. 实验目的:掌握迭代方法的用处 二. 实验环境:Cfree5.0 三. 实验时间:2013年6月20日 四. 实验地点:电子信息楼1201教室 五. 实验内容:运用编程实现迭代方法可以更好的解线性方程组,得到线性方程的解。 六. 实验理论依据: 高斯-赛德尔(Gauss-Seidel )迭代公式 我们注意到在雅可比迭代法中并没有对新算出的分量11k x +,12k x +, , 11k i x +-进行充分利用.不妨设想,在迭代收敛的条件下,我们把 (1)()()()11211331111(1)()()()22112332222(1)()()()1122,111()1(1(k k k k n n k k k k n n k k k k n n n n n n nn x a x a x a x b a x a x a x a x b a x a x a x a x b a +++--?=---+???=---+?????=---+?? 式中第一个方程算出的11k x +立即投入到第二个方程中,代替()1k x 进行计算,当12 k x +算出后代替()2k x 马上投入到第三个方程中计算,依次进行下去,这样也许会得到 更好的收敛效果.根据这种思路建立的一种新的迭代格式,我们称为高斯-赛德尔(Gauss-Seidel )迭代公式, 高斯=赛德尔迭代法的分量形式:

(1)()()()11211331111(1)(1)()()22112332222(1)(1)(1)(1)1122,111()1(1(k k k k n n k k k k n n k k k k n n n n n n nn x a x a x a x b a x a x a x a x b a x a x a x a x b a +++++++--?=---+???=---+?????=---+?? 高斯-赛德尔迭代法的矩阵形式: (1)(),(0,1,2,)k k x Bx f k +=+= 其中 1()B D L U -=- ,1()f D L b -=- B 称为高斯-赛德尔迭代矩阵,f 称为高斯-赛德尔迭代常量.. 七. 运行代码如下: #include"stdio.h" #include"math.h" int main() { bool pan1=true; int n,n1,n2=0,k=0; double num[100][100],L[100][100],U[100][100],x[100],y[100],num1=0,b[100],D[100][100],x1[200][200],x2[200][200]; printf("\n"); printf("*******************************高斯迭代法解如下********************************"); printf("输入要输入矩阵的阶数为(按Enter 输入矩阵数字):");//

matlab Jacobi迭代法Gauss-seidel和SOR迭代

1.Jacobi迭代法 例1 用jacobi迭代法求解代数线性代数方程组,保留四位有效数字(err=1e-4) 其中A=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3]。 解:编写jacobi迭代法的函数文件,保存为jacobi.m function [x,k]=jacobi(A,b,x0,eps,N) % 求解Ax=b;x0为初始列向量;eps为误差容限;N为最大迭代次数 % 输出x为近似解;k为迭代次数 n=length(A); x=zeros(n,1); for k=1:N for i=1:n ――――――― end if norm(x-x0,inf)

end x0=x; end 编写主程序如下 format long clear A=[8 -1 1;2 10 -1;1 1 -5]; b=[1 ;4; 3]; x0=[0.125; 0.4 ;-0.6 ]; % x0为初始列向量N为最大迭代次数err=1e-4; % err为误差容限 N=25; % N为最大迭代次数 [x,k]=jacobi(A,b,x0,err,N) 得到结果如下 x = 0.22492315625000 0.30561995000000 -0.49388680000000

k = 6 2.Gauss-seidel迭代法 例2 用Gauss-seidel迭代法求解代数线性代数方程组,保留四位有效数字(err=1e-4) 其中A=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3]。 解:编写Gauss-seidel迭代法的函数文件,保存为gaus.m function [x,k]=gaus(A,b,x0,eps,N) % 求解Ax=b;x0为初始列向量;eps为误差容限;N为最大迭代次数% 输出x为近似解;k为迭代次数 n=length(A); x=zeros(n,1); for k=1:N for i=1:n ―――――― end if norm(x-x0,inf)

实验_用超松弛迭代法求解接地金属槽内电位分布

用超松弛迭代法求解接地金属槽内电 位分布 一、实验内容: 用超松弛迭代法求解接地金属槽内电位的分布。 已知:cm a 4=,mm a h 104/== 给定边值如图所示。 给定初值:0)0(,=j i ? 误差范围:510-=ε 计算迭代次数,j i ,?分布。 =?= V 100 ? 0 =?0 =?

二.实验设计原理:有限差分法 α称为松弛因子。不同的α值,可以有不同的收敛速度,其值范围一般为1与2之间。通常α会有一个最佳值。最佳α的确定与具体问题有关,显然,如果α选择合适,超松弛迭代法收敛速度最快。

(1)划分网格:节点编号、坐标的形成。 (2)赋初值:随意,尽可能靠近真实解。比如本题u7=2.0,u8=7.5,u9=10。(3)边界条件:给电位值,找规律。 u1,u2,u3,u4,u6,u11,u12,u13,u14=0; u5,u10,u15=100。 (4)迭代 u7=(u2+u6+u8+u12)/4 ; u8=(u3+u7+u9+u13)/4 ; u9=(u4+u8+u10+u14)/4 。 (5)反复迭代,给定某一误差 有限差分法是基于差分原理的 一种数值计算法。其基本思想:将 场域离散为许多小网格,应用差分 原理,将求解连续函数?的泊松方 程的问题换为求解网格节点上?的 差分方程组的问题。 编程时已经考虑到题目要求, 所以直接将边值编入到程序中,这样可以省略输入,从而直接输入迭代因子进行求解,可以减少编程的难度。这次编程和以前不同的是将数组和正交函数

图像结合起来,所以在考虑输入和输出的时候会有一些难度,因为数组是上面是小的而图像上面越在上,代表坐标就越大。所以在输入和输出的时候要谨慎对待。 Editor中源代码为: 1.clc 2.clear 3.close all 4.hx=5; 5.hy=5; 6.v1=ones(hy,hx); 7.v1(hy,:)=ones(1,hx)*100; 8.v1(1,:)=ones(1,hx)*0 9.for i=1:hy; 10.v1(i,1)=0; 11.v1(i,hx)=0; 12.end 13.m=4;

相关文档
相关文档 最新文档