您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 线性方程组的迭代求解java
线性方程组的迭代求解线性方程组的迭代求解摘要迭代法是一种逐次逼近方法,在使用迭代法解方程组时,其系数矩阵在计算过程中始终不变。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行。迭代法具有循环的计算方法,方法简单,适宜解大型稀疏矩阵方程组本文总结了解线性方程组的三个迭代法,Jacobi迭代法,Gauss-Seidel迭代法,SOR迭代法,并且介绍了软件JAVA在这方面的应用。关键词:Jacobi迭代法;Gauss-Seidel迭代法;SOR迭代法;计算线性方程组的迭代求解SOLUTIONOFLINEAREQUATIONSOFITERATIONWITHTHEEXPERIMENTALABSTRACTIterationisakindofmethodtosolvequestionsbystep-by-stepapproximation.Whenwearegettingthesolutionoflinearequationsbyusingiteration,thecoefficientmatrixisalwaysstayingthesameincomputationprocess.Computercouldoperatefastlysothatitissuitableforoperatingagainandagain.Iterationiseasytooperatetosolvethelargematrixequationsbyusingacalculatemethodcalledcirculation.Thissummaryunderstandingoflinearequationsthreekindofiteration,Jacobiiteration,Gauss-Seideliteration,successiveoverrelaxationmethod,andintroducemodernsoftwareJAVAinthisrespect.Keywords:Jacobiiteration;Gauss-Seideliteration;SuccessiveOverRelaxationmethod;calculating线性方程组的迭代求解目录1迭代法概述………………..……………………………….………………………….11.1迭代法定义……………………………………………………………………………11.2迭代法基本原理………………………………………………………………………12迭代法解线性方程组……………………………………………………………………...12.1雅克比(Jacobi)迭代法……………………………………….………………………..12.2高斯—赛德尔(Gauss-Seidel)迭代法………………………………………..….....42.3超松弛(SOR)迭代法…………………………………………………………….…....73总结………………………………………………………………………………...9参考文献………………………………………………………………………….……..10附录…………………………………………………………………………….……………..11线性方程组的迭代求解第1页共19页1迭代法概述迭代法也称辗转法,是一种逐次逼近方法,在使用迭代法解方程组时,其系数矩阵在计算过程中始终不变。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或步骤)时,都从变量的原值推出它的一个新值。迭代法具有循环的计算方法,方法简单,适宜解大型稀疏矩阵方程组,在用计算机计算时只需存储A的非零元素(或可按一定公式形成系数,这样A就不需要存储)[1]。1.1迭代法定义(1)对于给定的方程组xBxf,用式子(1)(0)(2)(1)(1)()kkxBxfxBxfxBxf(1-1)逐步代入求近似解的方法称为迭代法(或称为一阶定常迭代法,这里与B和k无关)(2)如果()limkxx存在(记作x),称此迭代法收敛,显然x就是方程组的解,否则称此迭代法发散。1.2迭代法基本定理设有方程组xBxf,对于任意初始向量(0)x及任意f,解此方程组的迭代法(即(1)()kkxBxf)收敛的充要条件是()1B.2迭代法解线性方程组2.1雅克比(Jacobi)迭代法2.1.1Jacobi迭代法的定义线性方程组的迭代求解第2页共19页设有方程组n1ijjijaxb(1,2,,in),记作Axb(2-1)A为非奇异阵且a0(1,2,,)ijin。将A分裂为ADLU,其中1112nnaaDa,21313212,10000nnnnaaaLaaa,121312321,0000nnnnaaaaaUa。将式(2-1)第i(1,2,,in)个方程用ija去除再移项,得到等价方程组11()niijjjijjixbaxa(1,2,,in),(2-2)简单记作0xBxf,其中110()BIDADLU,1fDb对方程组(2-2)应用迭代法,得到(2-1)的迭代公式(0)(0)(0)(0)12(1)()1(,,,)1()Tnnkkiiijjjijjixxxxxbaxa(2-3)其中(0)(0)(0)(0)12(,,,)Tnxxxx为第k次迭代向量,设()kx已经算出,由式(2-3)可计算下一次迭代向量(1)(0,1,2,;1,2,,)kxkin。线性方程组的迭代求解第3页共19页显然迭代公式(2-3)的矩阵形式为(0)(1)(0()+fkkixxBx)初始向量(2-4)其中0B称为Jacobi方法迭代矩阵。2.1.2JAVA程序实现Jacobi迭代法编写java程序用Jacobi迭代法解如下方程组:例1:1231231235+2+12422023103xxxxxxxxx实验结果如下图所示(JAVA程序设计详见附录源程序1):线性方程组的迭代求解第4页共19页2.2Gauss-Seidel迭代法线性方程组的迭代求解第5页共19页2.2.1高斯—赛德尔(Gauss-Seidel)迭代法的定义雅克比迭代法的优点是公式简单,迭代矩阵容易计算。在每一步迭代时,用)(kx的全部分量求出)1(kx的全部分量,因此称为同步迭代法,计算时需保留两个近似解)(kx和)1(kx。但在雅克比迭代过程中,对已经计算出的信息未能充分利用,即在计算第i个分量)1(kix时,已经计算出的最新分量)1(1)1(1,,kikxx没有被利用。从直观上看,在收敛的前提下,这些新的分量)1(1)1(1,,kikxx应比旧的分量)(1)(1,,kikxx更好,更精确一些。因此,如果每计算出一个新的分量便立即用它取代对应的旧分量进行迭代,可能收敛的速度更快,并且只需要储存一个近似解向量即可。据此思想可构造高斯—赛德尔(Gauss-Seidel)迭代法,其迭代公式为)(1)(111)1()1(ikjijnijijkjijiikibxaxaax(i=1,2,…,n)(2-5)也可以写成矩阵形式SGkSGkfxBx)()1(仍将系数矩阵A分解为ULDA则方程组变为bxULD)(得bUxLxDx(2-6)将最新分量代替为旧分量,得bUxLxDxkkk)()1()1(即bUxxLDkk)()1()(于是有bLDUxLDxkk1)(1)1()()((2-7)所以ULDBSG1)(bLDfSG1)(因为高斯—赛德尔迭代法比雅克比迭代法收敛快,这个结论在多数情况下是成立的,但也有相反的情况,即高斯—赛德尔迭代法比雅克比迭代法收敛慢,甚至还有雅克比迭代法收敛,高斯—赛德尔迭代法发散的情形。2.2.2JAVA程序实现高斯—赛德尔(Gauss-Seidel)迭代法线性方程组的迭代求解第6页共19页编写java程序用Gauss-Seidel迭代法解上述例1方程组:实验结果如下图所示(JAVA程序设计详见附录源程序2):线性方程组的迭代求解第7页共19页2.3超松弛(SOR)迭代法2.3.1超松弛(SOR)迭代法的定义超松弛迭代法(SuccessiveOverRelaxationMethod,SOR方法)是高斯—赛德尔迭代法的一种改进,是解大型稀疏方程组的有效方法之一。设已知第k次迭代向量)(kx,及第k+1次迭代向量的前i-1个分量)1(kjx,(j=1,2,…i-1),现在研究如何求向量)1(kx的第i个分量)1(kix。首先,有高斯—赛德尔迭代法求出一个值,记为)(1~1)()1(11)1(nijkjijkjijijiiikixaxabax(i=1,2,…n)(2-8)再将第k次迭代向量的第i个分量)(kjx与)1(~kix进行加权平均,得)1(kix,即:)1(kix)1()(~)1(kikixx)~()()1()(kikikixxx(2-9)于是的SOR迭代公式)()(1)1(11)()1(kjnjijkjijijiiikikixaxabaxx(i=1,2,…n)…①或)()1()(1)1(11)()1(kjnijijkjijijiiikikixaxabaxx(i=1,2,…n)…②当=1时,式①即为高斯—赛德尔迭代法;当01时,式①称为低松弛方法,当某些方程组用高斯—赛德尔迭代法不收敛时,可以用低松弛方法获得收敛;当1时,式①称为超松弛方法,可以用来提高收敛速度。将式②写成矩阵的形式,得:)()1()()1()()1(kkkkUXLXbDXDX线性方程组的迭代求解第8页共19页即bxUDxLDkk)()1(])1[()((2-10)于是得SOR迭代的矩阵表示fXBxkk)()1((2-11)其中])1[()(1UDLDBbLDf1)(2.3.2JAVA程序实现超松弛(SOR)迭代法编写java程序用SOR迭代法解上述例1方程组:实验结果如下图所示(JAVA程序设计详见附录源程序3):线性方程组的迭代求解第9页共19页3总结在数学课程的学习中,应注重学生数学计算能力和应用能力的培养。利用数学软件来解决课程中的计算和作图问题,提高学习效率,加深学习兴趣。本次课程设计课题是关于我们本学期的课程——数值分析中的迭代求解方程组内容,在数值分析学习中主要使用MATLAB或是C++进行迭代计算,从未使用过JAVA编程进行迭代计算,这次课程设计对我来说也是一项挑战。编程过程其实也是一个学习的过程,加深了我对JAVA的认识,同时也更督促我在JAVA方面下工夫。在编写JAVA程序的过程中,遇到很多问题,比如编写错误,或是难以实现目的等。通过网上查找资料,求助同学帮助一起解决问题。意识到自己很大的不足,进步空间很大,需要多练习编程才能在JAVA学习中更进一步。我们在理解掌握数学理论知识的同时,能借助现代软件利用迭代法简单迅速地计算出繁杂的数学运算结果,大大提高了解题效率和学习效果。线性方程组的迭代求解第10页共19页参考文献[1]印旻王行言.Java语言与面向对象程序设计(第二版).北京:清华大学出版社,2012.5[2]李庆扬王能超.数值分析(第四版).武汉:华中科技大学出版社,2006.7[3]奥特加JM.数值分析[M].张丽君张乃玲,译.北京:高等教育出版社,1983线性方程组的迭代求解第11页共19页附录源程序1:packagecn.com.Test;im
本文标题:线性方程组的迭代求解java
链接地址:https://www.777doc.com/doc-2057174 .html