您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于MATLAB的线性方程组数值算法实现
基于MATLAB的线性方程组数值算法实现摘要:MATLAB图形用户界面(GUI)编程技术是当今计算机数值计算的重大成就之一,它在软件编程上具有着友好性、直观性、易懂性的优点而被广泛应用。本文主要介绍图形用户界面在求解线性方程组中的应用,同时介绍了求解大型线性方程组的主要迭代算法。首先,对一些经典迭代法(Jacobi方法、Gauss-Seidel方法)进行了详细的讨论,并从理论上给出了迭代公式。最后通过用MATLAB图形用户界面(GUI)编程对求解线性方程组的设计一个用户与计算机直接交互界面,实现简单的求解线性方程组的应用软件。关键字:图形用户界面;线性方程组;直接求解法;迭代法一、引言MATLAB以强大的科学计算与可视化功能、简单易用、开放式可扩展环境,成为计算机辅助设计和分析、算法研究和应用开发的基本工具和首选平台。MATLAB的附带功能图形用户界面(GUI)更具有友好性、直观性、易懂性的优点而被广泛应用[1]。与此同时,数值计算软件的发展与成熟,在强调数值计算方法的原理、思想和基本理论的同时,适当淡化了算法的细节和繁杂的理论证明,并在一个通用的软件平台上开展。而在当今社会中,线性方程组被广泛应用,如一个实际问题中归纳出来的数学模型中出现的函数、方程或不等式都是线性的。线性模型在社会经济中的数据计算、信息处理、均衡生产、减少消耗、增加产出等方面有着广泛的应用,是我们改善企业生产管理、提高经济的有效工具。由于线性方程组在各学科的广泛应用,其重要性是显而易见的,有必要对线性方程组的求解进行讨论.但随着社会的发展,线性模型即线性方程组的求解也越来越复杂,针对解线性方程组有几种很好的经典算法,如Jacobi迭代法、Guass-Seidel迭代法和SOR迭代法等。本文根据人们需要方便快捷,通俗易懂的原则,设计了一个求解线性方程组的软件应用界面,在GUI上实现解线性方程组的直接法、Jacobi迭代法、Guass-Seidel迭代法。二、建立线性方程组设线性方程组bAx有解,则方程组有如下形式:nnnnnnnbxxaxaxabxxaxaxabxxaxaxann33221122n32322212111n313212111a.....a.....a.....假设其中;n1,2,3ji,0aii即有:njibxanjijij3,2,1,,1;有系数矩阵:nnnnnnnaaaaaaaaaaA3212222111211;右端向量:nbbbb21;1.直接解法关于线性方程组的直接解法是数值分析研究的一个核心内容,通常所采用的直接解法大多基于Gauss消去法、选主元消去法、平方根法、追赶法等。在MATLAB中,只需用一个“/”或“\”就解决问题。虽然表面上只是一个简简单单的符号,而它的内部却包含着许许多多的自适应算法,程序会自动根据输入的系数矩阵判断选用哪种方法进行求解。1)左除运算符的直接解法对于线性方程组bAx,可以利用左除运算“\”求解:bAx\当系数矩阵A为NN的方阵时,MATLAB会自行用高斯消元法求解方程组。可以直接获得bAx方程组的数值解x。2)利用矩阵LU分解求方程组的解通LU分解方法来求解大型的方程组非常有用。通过分解方法求解的有运算速度快、可以节省磁盘空间、节省内存优点。LU分解又称为GAUSS消去法,可把任意方阵分解为下三角矩阵的基本变换形式和上三角矩阵的乘积。既LUA,L为下三角阵,U为上三角阵。则有bAx变换成bXUL**,有b)\(L\Ux.而且在MATLAB中有LU的调用格式。2.迭代法在MATLAB中,迭代解法非常适合求解大型系数矩阵的方程组。先给定一个解的初始值,然后按照一定的迭代格式进行逐步的逼近,求解出更精确的近似解。在数值分析中,迭代解法的两种经典算法Jacobi迭代法,Gauss-Serdel迭代法。1)Jacobi迭代法对于线性方程组bAx,如果系数矩阵A为非奇异的方阵,即n1,2,3ji,0aii,则可将A分解为ULDA,其中D为对角阵,其中元素为A的对角元素,L与U分别为A的严格下三角和严格上三角。则可表示为:000000)1(121nnnaaaL000000)1(112nnnaaaU于是bAx转化为:)1,2,1,0()(111nibDxULDxii与之对应的迭代公式为:)1,2,1,0()()1(1nifBxxkiki其中,bDfULDB11,)(。这就是Jacobi迭代公式。如果序列)1(kx收敛于x,则x必是方程bAx的解。2)Gauss-Serdel迭代法在上述Jacobi迭代结果中,给出的bDxULDxkiki1)(1)1(1)(可以改进为:bLDUxLDxkiki1)(1)1(1)()(则得Gauss-Serdel迭代法公式为:)1,2,1,0()()1(1nifGxxkiki其中,bLDfULDG11)(,)(。该Gauss-Serdel迭代法和Jacobi迭代法相比,Gauss-Serdel迭代法用新分量代替旧分量,精度会高些。三、实例应用1)用左除直接法求解方程组613316154312321321321xxxxxxxxx在输入框分别输入]111;1316;4312[A;]6;13;15[b;单击LU直接法按钮,可得到如图1所示结果:2)用LU直接法求解方程组61331614315321321321xxxxxxxxx在输入框分别输入]111;1316;4315[A;]6;13;1[b;单击LU直接法按钮,可得到如图2所示结果:3)用Jacobi跌代法求解方程组6411234515101531321321xxxxxxxx在输入框分别输入]4101;2345;10115[A;]6;1;15[b;]0;0;0[x;单击Jacobi跌代法按钮,可得到如图3所示结果:4)用Gauss迭代法求解上述方程组在输入框分别输入]4101;2345;10115[A;]6;1;15[b;]0;0;0[x;单击Jacobi跌代法按钮,可得到如图4所示结果:从上的迭代次数可以看出:一般地,当两种迭代法均收敛时,Gauss-Seidel迭代法一般都优于Jacobi迭代法。四、优良性评价与改进本文通过系统介绍了求解线性方程组的两种直接法和两种迭代法,并详细的在MATLAB里实现的求解线性方程组的四种算法:运用左除运算符和LU分解两种直接法、Jacobi迭代法、Guass-Seidel迭代法;并设计了求解线性方程组图形用户界面;在最后举例说明图形用户界面中实现求解线性方程组,充分展示了人机交互式图形用户界面及其参数的可调用过程变得易于控制、直观可视化。优点:图形用户界面编程的技术可在数值计算中的广泛应用,这提高了用户使用MATLAB程序的易用性。通过MATLAB的图形用户界面设计,我们可以开发出很友好的交互式图形界面和各种有效的工具及应用程序。本文图形用户界面设计应用程序有着移植性好,占用资源少、执行效率高、高可靠性等特点。可以在设计相同类型的图形设计界面时只在修改相映的调用函数,即可得到简单的图形应用界面,这样可节省了程序设计、调试及网络学习所需的时间。本图形用户界面设计过程简单快捷,结果客观合理实用,在人机界面中具有一定的通用性.改进:本文的图形用户界面设计相对来说比较简单,只简单的实现了功能性。可在原来基础上添加一些图像、声音、字符的滚动效果等等,可作成完美的图形用户界面。还可针对不同的实现功能,读者可以在此基础上扩充修改。并可以建立有效的人机界面模型,同时可应用MATLAB的外部接口生成.exe的可执行文件,使用户可以脱离MATLAB环境运行人机界面软件。参考文献[1]马青华,龚晓晶.线性方程组数值算法的MATLAB图形用户界面设计[J]【1】MATLABR2007基础与提高常巍谢光军黄朝峰编著——北京:电子工业出版社2007.9【2】MATLAB程序设计与应用刘卫国主编—2版—北京:高等教育出版社,2006.7【3】MATLAB程序设计与教程张德喜等编著.—北京:中国铁道出版社,2006.6【4】数值分析与实验韩旭里万中编著.—北京:科学出版社,2006【5】线性方程组数值算法的MATLAB图形用户界面设计马青华龚晓晶【6】线性方程组的迭代解法李爱芹山东交通学院数理系,济南250023【7】线性代数方程组迭代解法的MATLAB实现张步林成都纺织高等专科学校人文社科与基础教学部,成都611731
本文标题:基于MATLAB的线性方程组数值算法实现
链接地址:https://www.777doc.com/doc-2570741 .html