好文档 - 专业文书写作范文服务资料分享网站

解线性代数方程组直接法的MATLAB GUI设计

天下 分享 时间: 加入收藏 我要投稿 点赞

本科生毕业论文(设计)

解线性代数方程组直接法的MATLAB GUI设计

摘要: 本文首先介绍了MATLAB GUI,以及它在数值计算方面的一些应用。然

后介绍了线性代数的起源及线性代数方程组的一些相关知识。再接着介绍了解线性代数方程组直接法的几种方法,如Gauss消元法,矩阵的LU分解,选主元的消元法,特殊矩阵的消元法等。最后应用MATLAB编写程序实现用几种直接法来求解线性代数方程组,并用MATLAB GUI设计图形用户界面实现数据可视化。

关键词:MATLAB GUI;线性方程组;Gauss消元法 ;LU分解

本科生毕业论文(设计)

Solving Linear Algebra Equations Direct Method

of MATLAB GUI Design

Abstract:In this paper the software of MATLAB GUI and the application of

MATLAB in numerical are introduced. Then the origin of linear algebra and some introduction about linear algebra equations are introduced. And then the linear algebra equations about direct method is introduced. For example, the matrix Gauss elimination method,LU decomposition, Pivoting elimination method,special matrix the elimination method, etc. Finally several linear algebra equations are solved by MATLAB programming,and the data is visualized by drawing graphics with MATLAB GUI.

Keywords: MATLAB GUI, Linear equations ,Gauss elimination method, LU

decomposition.

本科生毕业论文(设计)

目录

1 绪论........................................................................... 4

1.1 问题的背景、意义 ......................................................... 4

1.1.1 背景 ............................................................... 4

1.1.2 意义 ............................................................... 4

2 MATLAB软件介绍 ................................................................ 5

2.1 MATLAB介绍 .............................................................. 5

2.1.1 MATLAB软件概况 .................................................... 5 2.1.2 MATLAB语言特点 .................................................... 5 2.2 MATLAB GUI介绍 .......................................................... 6 3解线性代数方程组的直接法 ........................................................ 8

3.1线性代数的起源 ............................................................ 8 3.2线性代数方程组的介绍 ...................................................... 9 3.3解线性方程组的直接法 ..................................................... 10 3.4 Gauss消元法 ............................................................. 11 4 MATLAB GUI在直接法解线性代数方程组中的应用 ................................... 18 5结论 ........................................................................... 24 致 谢 ............................................................ 错误!未定义书签。 参考文献......................................................................... 25

本科生毕业论文(设计)

1 绪论

1.1 问题的背景、意义

1.1.1 背景

由于计算机的发展和普及,科学计算已成为解决各类科学技术问题的重要手段。因此,掌握科学计算的基本原理和方法是当今科学技术工作者不可缺少的本领和技能之一。并且经过不断的研究和累积,在现今科学研究和工程实践中,数值计算已经发展成为一门用来分析数据,解决实际问题的重要学科,成为继理论分析、实验之后又一个重要的研究方法。

MATLAB是一种数值计算环境和编程语言,主要包括MATLAB和Simulink两大部分。 MATLAB基于矩阵运算,具有强大的数值分析、矩阵计算、信号处理和图形显示功能,其强大的数据处理能力和丰富的工具箱使得它的编程极为简单。MATLAB既能进行科学计算,又能开发出所需要的图形界面。1.1.2 意义

人类为了认识自然与改造自然,需要不断地对自然界的各种现象进行测量和研究,由于实验方法和实验设备的不完善,周遭环境的影响,以及受人们认识能力所限等,测量和实验所得数据和被测量的真值之间,不可避免地存在着差异,这在数值上即表现为误差。同时在计算中,总是用近似值代替真值进行计算,这也会产生误差。为了充分认识并尽量减小或消除误差,必须对测量过程和科学实验中始终存在的误差进行研究。研究误差就要研究误差的来源、分类、基本概念和误差的传播。而在研究误差时,要进行一些复杂的计算,同时怎样形象的表示误差又是一个问题,所以运用MATLAB的计算能力和MATLAB GUI的图形显示功能就能给研究误差带来很大的方便。

[2]

[1]

本科生毕业论文(设计)

2 MATLAB软件介绍

2.1 MATLAB介绍

2.1.1 MATLAB软件概况

[3、4]

“MATLAB”是“Matrix Laboratory”的缩写。MATLAB的第一个版本是LINPACK和EISPACK库的程序的一个接口,用来分析线性方程组。随着MATLAB的演化,除了线性代数外,它还支持许多其他的程序。MATLAB的核心仍然是基于命令行的交互式分析工具。用户可以用类Fortran语言扩展交互环境。交互环境中的程序以命令行的形式执行。

MATLAB是一个基本的应用程序,它有一个称为标准工具箱的巨大程序模块库。MATLAB工具箱包括解决实际问题的扩展库。由于继承了LINPACK、EISPACK和LAPACK的特性,MATLAB对数值线性代数来说是一个高可靠的优化系统。 2.1.2 MATLAB语言特点

[5、6]

MATLAB语言有不同于其他高级语言的特点,它被称为第四代计算机语言,MATLAB语言的最大特点就是简单和直接。它丰富的函数使开发者无须重复编程,只要简单的调用和使用即可。MATLAB语言的主要特点可概括如下: (1)以矩阵和数组为基础的运算

MATLAB 是以矩阵为基础的,不需要预先定义变量和矩阵(包括数组)的维数,可以方便地进行矩阵的算术运算、关系运算和逻辑运算等。 (2) 简单易学,使用方便

MATLAB 被称为“草稿式”语言,这是因为其函数名和表达更接近我们书写计算公式的思维表达方式,编写MATLAB程序犹如在草稿纸上排列公式与求解问题,因此可以快速地验证工程技术人员的算法。此外MATLAB还是一种解释性语言,不需要专门的编译器。 (3) 强大的图形技术

MATLAB具有非常强大的以图形化显示矩阵和数组的能力,同时它能给这些图形增加注释并且打印这些图形。 (4)编程效率极高

5

本科生毕业论文(设计)

MATLAB 是一种面向科学和工程计算的高级语言。它以矩阵运算为基础,极少的代码即可实现复杂的功能。

(5) 可扩充性强,具有方便的应用程序接口

MATLAB 不仅有丰富的库函数,而且用户还可以根据需要方便地编写和扩充新的函数库。

2.2 MATLAB GUI介绍[7、8]

MATLAB 是一套高性能的数值计算和可视化软件,它作为新兴的编程语言和可视化工具,有着其他编程语言所不能比拟的优势,如Fortan 语言是一种专用于科学计算的语言,但其图形界面的功能比较弱,利用其开发的程序,用户界面不友好,使用起来不方便,而VB、VC等可视化编程语言开发出来的程序界面友好,但由于其不是专用于科学计算的语言,因此其科学计算功能较弱。

而MATLAB同时具备这两方面的优势,既能进行科学计算,又能开发出所需要的图形界面,特别是Mathworks公司推出的MATLAB 6及以上的版本更是加强了图形界面编程功能。

图形用户界面(Graphical User Interface)是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。程序的用户界面是用户与计算机程序的交互方式,用户通过键盘、鼠标等输入设备与计算机交换信息。用户以某种方式选择或激活这些对象,会引起动作或发生变化,例如调用计算程序或者绘图等。

创建MATLAB用户界面必须具有以下3个基本元素: (1) 组件

在MATLAB GUI中的每一个项目(按钮、标签、编辑框等)都是一个图形化组件。组件可分为3类:图形化控件(按钮、编辑框、列表、滚动条等)、静态元素(窗口和文本字符串)、菜单和坐标系。

(2)图形窗口

GUI的每一个组件都必须安排在图像窗口中。在画图像时,图像窗口通常会被自动创建。但还可以用函数figure来创建空图像窗口,空图像窗口经常用于放置各种类型的组件。

(3)回应

如果用户用鼠标单击或者用键盘输入一些信息,那么程序就要有相应的动作。鼠标单击或输入信息是一个事件,如果MATLAB程序运行相应的函数,那么MATLAB函数肯定会有所反应。

6

本科生毕业论文(设计)

实现一个GUI的过程包括两个基本任务:一是GUI的组件布局,另一个是GUI组件编程。 GUI也是一种Matlab对象,可以使用M文件来创建M文件,这也是最基础的,使用其他方法创建时,也需要编写相应的程序代码。除了使用M文件来创建GUI对象外,Matlab还为用户开发图形界面提供一个方便高效的继承开发环境:Matlab图形用户界面开发环境(Matlab Graphical User Interface Development Environment,GUIDE)。其主要是一个界面设计工具集,他将所有GUI所支持的用户控件都集成起来,同时提供界面外观、属性和行为响应方法的设置方法。除了可以使用GUIDE创建GUI之外,还可以将设计好的GUI界面保存为一个FIG资源文件,同时自动生成对应的M 文件。该M文件包含了GUI初始化代码和组建界面布局的控制代码。

MATLAB是一种面向对象的高级计算机语言,其数据可视化技术中的各种图形元素,实际上都是抽象图形对象的实例,MATLAB中由图形命令产生的每一件东西都是图形对象。它们包括图形窗口,还有坐标轴、线条、曲面、文本和其他。各种图形对象和其间的关系如下图所示。

root根对象(计算机屏幕)图形框架窗口(figure)UI (menu, control)对象坐标轴对象注释坐标轴(隐藏)父子关系兄弟关系绘制对象组对象图像对象线条对象片块对象矩形对象文本对象表面对象光源对象

7

本科生毕业论文(设计)

3解线性代数方程组的直接法

3.1线性代数的起源

线性代数(Linear Algebra)是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。向量空间是现代数学的一个重要课题;因而,线性代数被广泛地应用于抽象代数和泛函分析中;通过解析几何,线性代数得以被具体表示。线性代数的理论已被泛化为算子理论。由于科学研究中的非线性模型通常可以被近似为线性模型,使得线性代数被广泛地应用于自然科学和社会科学中。

线性代数起源于对二维和三维直角坐标系的研究。 在这里,一个向量是一个有方向的线段,由长度和方向同时表示。这样向量可以用来表示物理量,比如力,也可以和标量做加法和乘法。这就是实数向量空间的第一个例子。

现代线性代数已经扩展到研究任意或无限维空间。一个维数为 n 的向量空间叫做 n 维空间。在二维和三维空间中大多数有用的结论可以扩展到这些高维空间。尽管许多人不容易想象 n 维空间中的向量,这样的向量(即 n 元组)用来表示数据非常有效。由于作为 n 元组,向量是 n 个元素的“有序”列表,大多数人可以在这种框架中有效地概括和操纵数据。比如,在经济学中可以使用 8 维向量来表示 8 个国家的国民生产总值(GNP)。当所有国家的顺序排定之后,比如 (中国, 美国, 英国, 法国, 德国, 西班牙, 印度, 澳大利亚),可以使用向量 (v1, v2, v3, v4, v5, v6, v7, v8) 显示这些国家某一年各自的 GNP。这里,每个国家的 GNP 都在各自的位置上。

作为证明定理而使用的纯抽象概念,向量空间(线性空间)属于抽象代数的一部分,而且已经非常好地融入了这个领域。一些显著的例子有: 不可逆线性映射或矩阵的群,向量空间的线性映射的环。 线性代数也在数学分析中扮演重要角色,特别在 向量分析中描述高阶导数,研究张量积和可交换映射等领域。

向量空间是在域上定义的,比如实数域或复数域。线性算子将线性空间的元素映射到另一个线性空间(也可以是同一个线性空间),保持向量空间上加法和标量乘法的一致性。所

8

本科生毕业论文(设计)

有这种变换组成的集合本身也是一个向量空间。如果一个线性空间的基是确定的,所有线性变换都可以表示为一个数表,称为矩阵。对矩阵性质和矩阵算法的深入研究(包括行列式和特征向量)也被认为是线性代数的一部分。

我们可以简单地说数学中的线性问题——-那些表现出线性的问题——是最容易被解决的。比如微分学研究很多函数线性近似的问题。 在实践中与非线性问题的差异是很重要的。

线性代数方法是指使用线性观点看待问题,并用线性代数的语言描述它、解决它(必要时可使用矩阵运算)的方法。这是数学与工程学中最主要的应用之一。 3.2线性代数方程组的介绍

[9]

(1)定义:称 个方程 个未知数的方程组

(1)

为一

(阶)线性(代数)方程组。当错误!未找到引用源。不全为0时,称方程组(1)

为非齐次线性方程组;当错误!未找到引用源。全为0时,称方程组(1)为齐次线性方程组。如果方程组(1)有解,则称(1)是相容的线性方程组,否则称为矛盾的(或不相容的,或无解的)线性方程组。

?a11a12?a21a22称矩阵A???????am1am2?a11a12?a21a22?称矩阵B??????am1am2?a1m???a2m?为方程组(1)的系数矩阵, ?????amm??a1mb1???a2mb2?称为方程组(1)的增广矩阵。

?????ammbn??b1??b??2?称为方程组(1)的右端项或常向量或右端向量。 列向量b? ?M????bn??x1??x?2列向量x???称为方程组(1)的未知向量。

?M????xn?

9

本科生毕业论文(设计)

(2)线性方程组的初等变换:以下三种变换称为方程组的初等变换:

① 交换两个方程的位置, ② 用非零数

乘某一个方程,

倍加到另一个方程

[10]

③ 把一个方程的

3.3解线性方程组的直接法

计算数学的一个基本组成部分。在自然科学和工程技术的许多问题中,例如结构分析、网络分析、大地测量、数据分析、最优化以及非线性方程组和微分方程数值解等,都常遇到求解线性代数方程组的问题。早在中国古代的《九章算术》中,就已载述了解线性方程组的消元法。到19世纪初,西方也有了高斯消元法。然而求解未知数很多的大型线性代数方程组,则是在20世纪中叶电子计算机问世以后才成为可能。如何利用计算机更精确、更有效地解大型线性代数方程组是计算数学研究中的基本性的重要课题之一。 设含有n个未知数、n个方程的方程组为

?a11x1?a12x2???a1nxn?f1? ?a21x1?a22x2???a2nxn?f2 ?ax?ax???ax?fnnnn?n11n22(1)式中为已知数,其相应的矩阵表达式为

?a11a12?a21a22?

?????am1am2(2)用矩阵和向量的符号,又可简记为

?a1m??x1??f1??????a2m???x2?? ?f2?

??M?????M??????amm??xn??fn?A=λf

(3)式中A为(2)中的n阶系数矩阵(错误!未找到引用源。);λ、f分别为(2)中错误!未找到引用源。及错误!未找到引用源。构成的n维向量。如果A的行列式detA错误!未找到引用源。0,则按克拉默法则,式(3)的解为:

错误!未找到引用源。=det错误!未找到引用源。/detA,

式中Ai是把A中的第i列元素用错误!未找到引用源。,错误!未找到引用源。,…,错误!未找到引用源。代替后所得的矩阵。该法则之功效主要在于其理论意义,若用于数值求解,则

10

本科生毕业论文(设计)

因n+1个n阶行列式求值的计算量很大而不实用

[11,12]

在计算实践中,通常采用的线性代数方程组的数值解法大体上可分为直接法和迭代法两大类。直接法是在没有舍入误差的假设下,经过有限次运算就可得到方程组的精确解的方法,如各种形式的消元法。迭代法则是采取逐次逼近的方法,亦即从一个初始向量出发,按照一定的计算格式(迭代公式),构造一个向量的无穷序列,其极限才是方程组的精确解。只经过有限次计算得不到精确解。熟知的简单迭代法、高斯-赛德尔迭代法、松弛法等都属此类。上两种方法各有优缺点,直接法普遍适用,但要求计算机有较大的存储量,迭代法要求的存储量较小,但必须在收敛性得以保证的情况下才能使用。直接法可以求得精确解是指就计算公式而言保证得到精确解,但计算机计算过程中的舍入误差是不可避免的,这种误差对解的精度影响会不会太大,也就是计算的稳定性,是要考虑的问题。对于迭代法,其收敛性则是要考虑的问题。

所以,不论是直接法还是迭代法都要根据方程组的具体性质,例如系数矩阵的稀疏状态、正定性、对角优势等等,选择计算方法和采用诸如稀疏技术、加速收敛等相应措施,才能更为有效地利用计算机得出比较满意的结果

[13]

3.4 Gauss消元法

一个n错误!未找到引用源。m矩阵是一个具有n行m列元素的矩形阵,在此矩阵中不仅每个元素的值是重要的,而且元素在矩阵中的位置也是重要的。

n错误!未找到引用源。矩阵的记号是用大写字母表示的,例如A表示矩阵,用具有两个下标的小写字母表示位于第i和第j列交点处的元素,例如错误!未找到引用源。;即

?a11a12?a1m??a?a?a222m? A? (aij)??21?MMMM???aa?a?n1n2nn?例1 矩阵 A???2?17??

310??是一个2错误!未找到引用源。3矩阵,且错误!未找到引用源。=2,错误!未找到引用

11

本科生毕业论文(设计)

源。=-1,错误!未找到引用源。=7,错误!未找到引用源。=3,错误!未找到引用源。=1和

错误!未找到引用源。=0。 1错误!未找到引用源。n矩阵 A??a11a12?a1n?

称为n维行向量,n错误!未找到引用源。1矩阵

?a11??a??21? A? ?M????an1?称为n维列向量。通常对于向量省略不必需的下标,黑体小写字母用作记号。这样,有

?x1??x??2? x? ?M????xn?表示列向量,和

y?[y1y2?yn] 表示行向量。 线性方程组

a11x1?a12x2?...?a1nxn?b1a21x1?a22x2?...?a2nxn?b2

错误!未找到引用源。 错误!未找到引用源。 an1x1?an2x2?...?annxn?bn

可以用一个n错误!未找到引用源。(n+1)矩阵表示,首先构造

?b1??b?an1x1?an2x2?...?annxn?bn b??2?

?M????bn?然后将这些矩阵结合以形成增广矩阵

12

本科生毕业论文(设计)

?a11a12?a1n?aa22?a2n21? Ab????MMM??an1an2?annMb1?Mb2?? MM??Mbn?其中垂直的点线用于将未知量的系数和方程右端的值分离开。 对矩阵记号重复例1中的运算导致首先考虑增广矩阵:

?1103?21?11 ??3?1?12???123?1M4?M1?? M?3??M4?进行如在例1中所述的运算得到矩阵

?1103?0?1?1?5??0?4?1?7??0332M4??1103?0?1?1?5M?7??和?M?15??00313??M8??000?13M4?M?7?? M13??M?13? 现在,最后的矩阵可以转化为对应的线性方程组,对于错误!未找到引用源。,错误!未找到引用源。,错误!未找到引用源。和错误!未找到引用源。得到解。此过程所涉及的方法称为具有向后代换的Gauss消去法。 应用于线性方程组

E1:a11x1?a12x2?...?a1nxn?b1E2:a21x1?a22x2?...?a2nxn?b2 ?

(6.4)

En?an1x1?an2x2?...?annxn?bn

的一般Gauss消去过程以类似的方式进行。首先形成增广矩阵错误!未找到引用源。:

?a11a12?a1n?a$a22?a2n21 A??Ab????MMM??an1an2?annMa1,n?1?Ma2,n?1?? (6.5) MM??Man,n?1?其中,A表示由系数形成的矩阵。在第(n+1)列中的项为b的值;即,错误!未找到引用源。=错误!未找到引用源。对每个i=1,2,…,n。

只要错误!未找到引用源。0,对每个j=2,3,…,n对应于(Ej?(aji/aii)Ei)?(Ej)的运算就可完成以消去每行中错误!未找到引用源。的系数。虽然在第2,3,…n行中的项有可能

13

本科生毕业论文(设计)

变化,但是为记号方便,仍记第i行和第j列的项为aij。记住这一点,对i=2,3…,n-1按照这个顺序过程进行运算(Ej?(aji/aii)Ei)?(Ej),其中j=i+1,i+2,…n,要求错误!未找到引用源。0。对所有值i=1,2…,n-1,这个消去了(将系数变为零)在第i行下面的每行中的错误!未找到引用源。。所得矩阵具有形式

错误!未找到引用源。

?a11?0???M??0a12?a1nMa1,n?1?a22?a2nMa2,n?1?? OOMMM???0annMan,n?1?其中,除了第一行外,aij的值不与原矩阵错误!未找到引用源。中的值一致。矩阵错误!未找到引用源。代表与原方程组(6.4)具有相同解集的线性方程组。因为新的线性方程组是三角形的

a11x1?a12x2?a1nxn?a1,n?1 a22x2?a2nxn?a2,n?1

错误!未找到引用源。 错误!未找到引用源。 错误!未找到引用源。

annxn?an,?1

可以进行向后替换。对错误!未找到引用源。求解第n个方程得到 xn?an,n?1ann

对错误!未找到引用源。求解第(n-1)个方程并用错误!未找到引用源。,得 xn?1?继续这个过程得到

an?1,n?1?an?1,nxnan?1,n?1

y?[y1y2?yn]对每个i=n-1,n-2…2,1。

虽然较为复杂,但是Gauss消去过程可以更精确地表示出来,通过形成增广矩阵序列错误!未找到引用源。(1),错误!未找到引用源。(2),…错误!未找到引用源。(n),其中错误!未

14

本科生毕业论文(设计)

找到引用源。(1)是式(6.5)给出的矩阵错误!未找到引用源。,且对每个k=2,3,…,n,错误!未找到引用源。(k)具有元素错误!未找到引用源。,这里

(k?1)?aij,当i?1,2?,k?1和j?1,2?,n?1时?0,当i?k,k?1?,n和j?1,2,?,k?1时?(k)?a ij??(k?1)?ai,k?1(k?1)?1)?aij?a(k,?,n?1时k?1,j,当i?k,k?1?,n和j?k,k?1(k?1)?ak?1,k?1?因此有代表等价的线性方程组,变量错误!未找到引用源。刚从方程错误!未找到引用源。,错误!未找到引用源。,…,错误!未找到引用源。中消去。

如果元素错误!未找到引用源。,错误!未找到引用源。,错误!未找到引用源。,…,错误!未找到引用源。,错误!未找到引用源。中的一个为零,则方法失败,因为运算步骤 (Ei?(k)ai,ka(k)kkEk)?Ei

或者不能完成(如果错误!未找到引用源。,…,错误!未找到引用源。中之一为零,此情况发生),或者向后代换不能完成。方程组可能仍然有解,但是求解的方法必须改变。在下例中我们给出一个示范。 例2 考虑线性方程组

E1:x1?x2?2x3?x4??8E2:2x1?2x2?3x3?3x4??20E3:x1?x2?x3??2E4:x1?x2?4x3?3x4?4增广矩阵为

?1?1?2?2 错误!未找到引用源。=错误!未找到引用源。=??11??1?1进行运算

(E2-2E1)→(E2),(E3-E1)→(E3)和(E4-E1)→(E4) 得到

2?1M?8?3?3M?20?? 10M?2??43M4?15

解线性代数方程组直接法的MATLAB GUI设计

本科生毕业论文(设计)解线性代数方程组直接法的MATLABGUI设计摘要:本文首先介绍了MATLABGUI,以及它在数值计算方面的一些应用。然后介绍了线性代数的起源及线性代数方程组的一些相关知识。再接着介绍了解线性代数方程组直接法的几种方法,如Gauss消元法,矩阵的LU分解,选主元的消元法,特殊矩阵的消元法等。最后应用MATLAB编写程序
推荐度:
点击下载文档文档为doc格式
1nhow7p7y903ypi6bk157e16g2f4sy00orn
领取福利

微信扫码领取福利

微信扫码分享