MATLAB应用实例精讲:数学数值计算与统计分析篇
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 MATLAB系统简介

MATLAB软件是由MathWorks公司开发的一种主要用于数值计算及可视化图形处理的工程语言,是当今最优秀的科技应用软件之一。它将数值分析、矩阵运算、图形图像处理、信号处理和仿真等诸多强大的功能集成在较易使用的交互式计算机环境之中,为科学研究、工程应用提供了一种功能强、效率高的编程工具。它拥有强大的科学计算与可视化功能,以及简单易用、开放式可扩展的环境,特别是所附带的 30多种面向不同领域的工具箱支持,使得它在许多科学领域中成为计算机辅助设计和分析、算法研究和应用开发的基本工具和首选平台。

1.1.1 MATLAB系统的产生与发展

MATLAB名字由Matrix(矩阵)和Laboratory(实验室)两词的前三个字母组合而成。20世纪70年代后期,时任美国新墨西哥大学计算机系主任的Cleve Moler博士在讲授线性代数课程时,发现应用其他高级编程语言极不方便,于是,Cleve Moler博士和他的同事构思并为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,这就是用FORTRAN语言编写的萌芽状态的MATLAB。以后几年,MATLAB作为免费软件在大学里使用,深受大学生们的喜爱。

1984年,John Little、Cleve Moler、Steve Bangert合作成立了MathWorks公司,专门从事MATLAB软件的开发,并把MATLAB正式推向市场。从那时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。1993年,MathWorks公司推出MATLAB4.0版本;1995年,MathWorks公司推出MATLAB4.2C版(For Win3.x)。4.x版在继承和发展其原有的数值计算和图形可视化能力的同时,增加了一些功能:①推出Simulink;②开发出基于word处理平台的Notebook;③推出符号计算工具包;④开发了与外部进行直接数据交换的组件,打通了MATLAB进行实时数据分析、处理和硬件开发的通路。1997年,MathWorks公司推出MATLAB5.0;2000年10月推出了MATLAB6.0;2002年8月,推出了MATLAB6.5,从此,MATLAB拥有了强大的、成系列的交互式界面。2004年7月,又进一步发展到了MATLABR 2010,在MATLABR 2010中,仿真模块发展到了Simulink6.0。

MATLAB R系列是从2006年开始发布的,MathWorks公司在技术层面上实现了一次飞跃。从此以后,产品发布模式也将改变,将在每年的3月和9月进行两次产品发布,版本的命名方式为“R+年份+代码”,对应上下半年的代码分别为a和b。每一次发布都会包含所有的产品模块,如产品的new feature、bug fixes和新产品模块的推出。MATLAB R2010是MathWorks公司在2010年3月最新推出的产品。

MATLABR 2010包括MATLAB和Simulink的若干新功能、一款新产品以及对其他85款产品的更新和缺陷修复。已经购买MathWorks软件维护服务的用户可以下载产品更新。

MATLAB产品系列的新功能包括:

·增加了更多的多线程数学函数,增强了文件共享、路径管理功能以及改进MATLAB桌面;

·新增用于在MATLAB中进行流处理的系统对象,并在Video and Image Processing Blockset和Signal Processing Blockset中提供了超过 140种支持算法;

·针对 50多个函数提供多核支持并增强性能,并对图像处理工具箱中的大型图像提供更多的支持 ;

·在全局优化工具箱和优化工具箱中提供新的非线性求解器;

·能够从Symbolic Math Toolbox中生成Simscape语言方程;

·在SimBiology中提供随机近似最大期望(SAEM)算法和药动学给药方案支持。

Simulink产品系列的新功能包括:

·在Simulink中提供可调参数结构、触发模型块以及用于大型建模的函数调用分支;

·在嵌入式IDE链接和目标支持包中提供针对Eclipse、嵌入式Linux及ARM处理器的代码生成支持;

·在IEC认证工具包中提供对Real-Time Workshop Embedded Coder和PolySpace产品的ISO 26262认证;

·在DO鉴定工具包中提供扩展至模型的DO-178B鉴定支持;

·SimulinkPLC Coder用于生成PLC和PAC IEC 61131结构化文本的新产品。

1.1.2 MATLAB系统主要特点

MATLAB集计算、可视化及编程于一身。在MATLAB中,无论是问题的提出还是结果的表达,都采用我们习惯的数学描述方法,而不需要用传统的编程语言进行前后处理。这一特点使MATLAB成为了数学分析、算法开发及应用程序开发的良好环境。MATLAB是MathWorks产品家族中所有产品的基础。MATLAB的主要特点如下。

(1)科学计算

MATLAB拥有500多种数学、统计及工程函数,可使用户立刻实现所需的强大的数学计算功能。由各领域的专家学者们开发的数值计算程序,使用了安全、成熟、可靠的算法,从而保证了最大的运算速度和可靠的结果。

(2)先进的可视化工具

MATLAB提供功能强大的、交互式的二维和三维绘图功能,可创建富有表现力的彩色图形。可视化工具包括:曲面渲染(Surface Rendering)、线框图、伪彩图、光源、三维等高线图、图像显示、动画、体积可视化等。

MATLAB提供了Handle Graphics图形机制。使用该机制可对图形进行灵活的控制。使用GUIDE工具,我们可以方便地使用Handle Graphics创建自己的GUI界面。

(3)直观灵活的语言

MATLAB不仅仅是一套打包好的函数库,同时也是一种高级的、面向对象的编程语言。使用MATLAB可卓有成效地开发自己的程序。MATLAB自身的许多函数实际上也包括所有的工具箱函数,都是用M文件实现的。

(4)库函数资源丰富

数百种库函数大大减轻了用户子程序的编写工作量,也避免了一些不必要的错误。因而,用户不必担心程序的可靠性问题。

(5)开放性、可扩展性强

M文件是可见的MATLAB程序,我们可以查看源代码。开放的系统设计使我们能够检查算法的正确性,修改已存在的函数,或者加入自己的新部件。

(6)特殊应用的工具箱

MATLAB的工具箱加强了对工程及科学中特殊应用的支持。工具箱和MATLAB一样是完全用户化的,可扩展性强。将某个或某几个工具箱与MATLAB联合使用,可以得到一个功能强大的计算组合包,满足我们的特殊要求。

(7)程序的兼容性好

MATLAB可以在各种PC机、大型计算机和各种操作系统上运行。

1.1.3 MATLAB系统共生产品

由图1-1所示的MATLAB产品家族可以看到,MATLAB产品家族是一个非常庞大的系统,MATLAB系统仅仅是其中的一部分,它还有许多其他重要的成员,如Simulink等,下面我们对它们进行简单的介绍。

图1-1 MATLAB产品家族

(1)Simulink及其扩展

Simulink是一个用来对非线性动态系统进行仿真的、鼠标驱动的交互式图形系统,它允许用户通过绘制一系列的方框图来完成建模工作,并动态地对模型进行操作,适用于各种系统,包括线性系统、非线性系统、连续系统、离散系统和多变量系统,是MATLAB系统的一个非常重要的共生产品。

(2)MATLAB编译器

MATLAB编译器是MATLAB系统扩展的重要组成部分,通过它,用户可以将MATLAB的M文件转化为C或C++语言的源代码,增强了MATLAB应用的灵活性。转换后的源代码主要有以下三种类型:

·可产生MEX文件的C语言源代码;

·可与其他模块结合,生成可执行程序的C或C++源代码,所生成的可执行程序可以独立于MATLAB的解释性环境单独运行,但是需要MATLAB C/C++数学函数库的支持;

·用于Simulink和Real-Time Workshop的C语言S函数。

(3)MATLAB C/C++数学函数库

MATLAB C数学函数库是MATLAB系统扩展的另一个重要组成部分,包含了大约400个用C语言进行重新编写的MATLAB数学函数,不但包括了大量的MATLAB内建函数,而且包含了许多MATLAB的M文件,是MATLAB系统数学计算核心的C语言的再现。任何能够调用C语言函数的程序,均能够调用该函数库所包含的所有数学函数,为应用程序开发者提供了一种方便的使用MATLAB强大计算能力的途径,其核心结构是mxArray结构体。这里需要明确的一点是,该函数库包含的仅仅是数学函数,并没有包含其他的一些专用函数,如图形句柄系统函数、Simulink函数等。

MATLAB C++数学函数库的功能与MATLAB C数学函数库的功能相同,不过前者是构建在MATLAB C数学函数库的上层,用mxArray类代替了mxArray结构体,对许多功能进行了封装。

(4)MATLAB工具箱

MATLAB工具箱是由一系列各式各样的函数库组成的,内容涉及方方面面,包括了大量的M文件和MEX文件,主要由各行各业的专业人士编写,其目的是为了方便某一领域内的科学研究和工程应用,将一些已经非常成熟或完善的算法标准化供人调用。到目前为止,由MathWorks公司正式发布的工具箱已达几十个。

MATLAB工具箱大致可以分为两类,一类是学科性工具箱,另一类是功能性工具箱。学科性工具箱大都涵盖了本学科所有已有的基本概念和基本运算,大都十分专业,如符号数学工具箱,简直就是一个高等数学、工程数学解题器;极限、导数、微分、积分、级数运算与展开、微分方程求解、Laplace变换等应有尽有;还有控制系统、信号处理、模糊逻辑、神经网络、小波分析、统计、优化、金融预测等工具箱,无一不是非常优秀的运算工具。这些工具箱都可以添加根据自己需要编写的函数,用户可以不断地更新自己的工具箱,使之更适合于自己的研究和计算。

1.1.4 MATLAB系统组成

MATLAB系统主要由五大部分组成,分别为MATLAB语言(theMATLABLanguage)、MATLAB工作环境(theMATLABWorking Environment)、MATLAB数学函数库(theMATLABMath Library)、图形句柄系统(Handle Graphics)和MATLAB应用程序接口(theMATLABApplication Interface)。下面分别对它们进行介绍。

(1)MATLAB语言

MATLAB语言是一种以矩阵(Matrix)和阵列(Array)为基本编程单元的,拥有完整的控制语句、数据结构、函数编写与调用格式和输入/输出功能的具有面向对象程序设计特征的高级程序语言。用户不但可以利用它方便快捷地完成小规模的算法验证、程序开发和调试工作,而且可以使用它进行大规模的复杂应用程序设计,非常有效。

(2)MATLAB工作环境

简而言之,MATLAB工作环境就是一系列实用工具的集合,它不但包括了各种操作工作空间中变量的工具和管理数据输入/输出的方法,而且包括了开发调试M文件和MATLAB应用程序的集成环境,使用起来极为方便。当用户在Windows NT系统下启动MATLAB后,将会出现如图1-2所示的命令窗口(the Command Window),这是用户与MATLAB工作环境交互的主要窗口,在命令提示符“>>”下,用户可以键入各种相关命令来完成所希望的操作。

图1-2 MATLAB命令窗口

在命令窗口中,用户除了可以在命令提示符下键入命令执行操作外,还可以通过菜单和工具条执行多种任务,如图1-2所示,通过建立新的M文件按钮和打开已有的M文件按钮,可以开启M-edit编辑调试器,如图1-3所示,这是一个功能非常完善的编辑调试环境;通过当前路径窗口,可以查看当前工作路径中各变量的类型和内容;通过工作空间窗口,用户可以查看通过MATLAB命令所操作的文件和结果的内容以及类型;通过“帮助”按钮,可以打开帮助窗口,让用户查找在线帮助;通过历史命令记录窗口,用户可以查看过去进行的MATLAB操作;通过Simulink模块库按钮,可以打开Simulink模块库,让用户向自己的模型中添加新的模块。总之,MATLAB工作环境是一个功能异常强大的工具集合,可以令用户完成几乎所有的操作,并且简单易用。

图1-3 M-edit编辑调试窗口

(3)MATLAB数学函数库

MATLAB数学函数库是大量的各种形式的数学函数和算法的集合,它不仅包括了最基本的初等函数,如sum、sine、cosine和复数运算等,而且包含了大量复杂的高级函数和算法,如贝塞尔(Bassel)函数、快速傅里叶变换和矩阵求逆等。用户在编写自己的MATLAB程序时,可以轻松地调用这些函数和算法,从而极大地方便了算法的开发。所有这些函数按类别分别存放在MATLAB工具箱目录下的八个子目录中,详见表1-1。

表1-1 MATLAB数学函数库的分类和组织

(4)图形句柄系统

Handle Graphics®为MathWorks公司的注册商标,是MATLAB的图形系统。它在包含了大量高级的2D和3D数据可视化、图形显示、动画生成和图像处理命令的同时,还提供了许多低级的图形命令,允许用户按照自己的需求显示图形和定制应用程序图形用户接口,既方便又灵活。具体的函数分为五大类,分别放置在MATLAB工具箱下五个不同的目录内,详见表1-2。

表1-2 MATLAB图形函数的分类和组织

(5)MATLAB应用程序接口

MATLAB应用程序接口是MATLAB为用户提供的一个功能完善的函数库,它包含了大量的MATLAB与C语言和FORTRAN语言之间的接口函数,是MATLAB的一个非常重要的组成部分。通过它,用户不仅可以在MATLAB下以动态链接库的形式调用C语言或FORTRAN语言编写的子程序,而且可以在C语言和FORTRAN语言中调用MATLAB的大量函数,将MATLAB作为一个计算引擎,同时还能够完成MATLAB与外界必要的数据交换,极大地增强了MATLAB的灵活性。

1.1.5 MATLAB系统主要功能

MATLAB是当今最优秀的科技应用软件之一,它以强大的科学计算与可视化功能,以及简单易用、开放式可扩展的环境,特别是所附带的 30多种面向不同领域的工具箱支持,使得它在许多科学领域中成为计算机辅助设计和分析、算法研究和应用的基本工具和首选平台。

1. MATLAB在技术方面的功能

在MATLAB软件环境中,问题和问题的解答均以人们熟悉的数学形式表示出来,极为方便。因此,利用MATLAB可以进行科学计算、系统仿真、绘图以及实现与其他高级编程语言的接口等。

(1)MATLAB在科学计算中的应用

用户可以像使用计算器一样,使用MATLAB进行基本的数学运算,也可以计算连续函数的零点和积分、求解线性系统、利用多项式处理函数逼近以及构造微分精确近似解等。MATLAB自带的工具箱为此提供了便利。

(2)MATLAB绘图

使用图形来呈现实验或运算的结果更能够增加说服力,为此,MATLAB提供了一些利用矩阵或向量数据来进行绘图的函数,这样可以更方便地绘制曲线图、饼图、条形图、梯形图、曲面图、三维等高线图和三维带状图等。然后依据句柄式图形的观念修改图面上所有对象的属性,如颜色、线条粗细等,除了使显示的更加生动外,还更进一步显示出结果或重要内容。

(3)MATLAB应用程序接口

MATLAB应用程序接口(MATLAB Application Program Interface)是MATLAB系统提供的一个非常重要的组件,通过该接口,用户可以方便地完成MATLAB与外部环境的交互。

在MATLAB中可以通过使用MEX文件来调用C函数和FORTRAN子程序。此外,通过MATLAB引擎(Engine),用户可以在MATLAB中执行运算,并将结果返回C或FORTRAN程序中。MATLAB还提供了一些头文件和库文件用于创建和访问标准的MATLAB MAT文件。使用MATLAB内置的串行接口可以直接将数据采集并载入到MATLAB中。另外,MATLAB可以通过组件对象模型(COM)和动态数据交换(DDE)来使用Java的类、对象和方法,并与PC应用程序进行数据交换。MATLAB还可以作为一个COM自动化服务器与Visual Basic (VB)应用程序或能够使用Visual Basic for Application(VBA)的应用程序(例如Microsoft Excel、PowerPoint、Word)进行通信。有关它们的内容,将在后面的章节中介绍,请读者参阅。

(4)利用MATLAB Simulink模块进行系统仿真

Simulink是基于MATLAB的框图设计环境,是复杂系统建模、仿真、分析的可视化开发平台。用户可以用来对各种动态系统进行建模、分析和仿真,它的建模范围广泛,可以针对任何能够用数学来描述的系统进行建模,例如,航空航天动力学系统、卫星控制制导系统、通信系统、船舶及汽车等,其中包括了连续、离散、条件执行、事件驱动、单速率、多速率和混杂系统等。Simulink提供了利用鼠标拖放的方法建立系统框图模型的图形界面,还提供了丰富的功能块以及不同的专业模块集合,利用Simulink几乎可以做到不书写一行代码完成整个动态系统的建模工作。其具体内容在后面章节介绍。

另外,MATLAB在数组计算、数据分析、矩阵代数、样条函数等方面的应用也有显著的优点,关于它们的详细内容,读者可以参考本书其他章节或其他参考文献。

2. MATLAB在工程领域中的应用

MATLAB把数组数据结构、编程特性和图形用户接口工具集成在一起,成为解决各类问题的一个功能强大的工具。

(1)MATLAB在数字图像处理中的应用

数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号,并利用计算机对其进行处理的过程。利用MATLAB图像处理工具箱函数可以对数字图像进行增强、压缩编码、去噪、恢复、融合、分割和描述等。

图像处理工具箱(Image Processing Toolbox)为工程师和科学家提供了一套完整的用于图像处理和分析的函数。总共超过200个图像处理函数,与MATLAB的数据分析、算法开发和数据可视化环境集成在一起,使专业人士从耗时的图像处理和操作中解脱出来,用户只需花少量的时间在算法编程上,而把大部分时间用于问题的分析处理上。图像采集工具箱(Image Acquisition Toolbox)扩展MATLAB的强大科学计算能力允许用户直接在MATLAB环境下通过工业标准硬件设备获取图像和视频信号。通过该工具箱,可以直接将MATLAB环境同图像采集设备连接起来,预览图像,采集数据,并且利用MATLAB提供的强大数学分析功能完成图形图像的处理。使用图像采集工具箱,也即在MATLAB命令行键入命令或者把该工具箱中的函数合并到用户开发的应用程序中。MATLAB提供了M语言编辑器、程序性能报告以及图形用户界面,帮助用户加快算法开发的进程。

(2)MATLAB在工程优化问题中的应用

工程优化是在不同的约束条件下,求多变量系统最优解的过程。在这一定义中,“最优”一词指在一个或多个设计目标中,决策者希望得到的具有最小或最大性能指标的一种设计目标。MATLAB优化工具箱提供了广泛用于求解常规和大型优化问题的工具,这些算法可以求解带约束的、无约束的以及离散的优化问题。工具箱中包含的函数可以用于线性规划、二次规划、非线性优化、非线性最小二乘、非线性方程、多目标优化以及二进制整数规划等。

(3)MATLAB在信号处理和通信中的应用

数字信号处理是利用计算机或专用处理设备,以数值计算的方法对信号进行采集、变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的。MATLAB信号处理工具箱(Signal Processing Toolbox)是一个用于模拟和数字信号处理的工业级标准算法集合。它提供了用于交互式设计与分析的图形化用户界面(GUI)工具以及命令行函数。工具箱中的多数函数是利用开放式MATLAB语言设计完成的。工程师可以查看算法、修改源代码以及编写自定义函数。该工具箱可应用于语音和音频处理、有线和无线通信、医学成像和测试测量、消费类电子产品等领域。

这里的通信是指数据通信。数据通信是依照一定的通信协议,利用数据传输技术在两个终端之间传递数据信息的一种通信方式和通信业务。它可实现计算机和计算机、计算机和终端以及终端与终端之间的数据信息传递。通信工具箱(Communications Toolbox)提供了一整套的工具来开发、设计和分析通信系统的物理层算法。用户可以通过命令行、BERTool GUI或是自定义脚本文件、函数来调用Communications Toolbox。该工具箱适用于诸如终端、基站、有线和无线局域网络以及数字用户线的应用程序开发,也可对通信工程方面的研究及教育起到良好的基础作用。

此外,MATLAB在统计和数据分析、金融建模和分析、仿真图形学、生物医学工程、语音处理、机械零件设计、动力学与振动、流体力学和热传导等领域得到了广泛的应用。限于篇幅,在此不一一列举。