MATLAB

来源:百度文库 编辑:神马文学网 时间:2024/04/16 15:35:17
计算机作为强有力的计算工具,在科学与工程计算方面,一直是计算机科学研究的软件开发的重要内容。在一般的工程计算方面,运行在微机上的多种计算软件已经日臻成熟。而最著名的就是美国Math Works公司的MATLAB。


         一、 MATLAB 的发展历程和影响
    MATLAB 名字由 MATrix 和 LABoratory 两词的前三个字母组合而成。那是20世纪七十年代后期的事:时任美国新墨西哥大学计算机科学系主任的 Cleve Moler 教授出于减轻学生编程负担的动机,为学生设计了一组调用 LINPACK 和 EISPACK 库程序的“通俗易用”的接口,此即用 FORTRAN 编写的萌芽状态的 MATLAB 。 
    经几年的校际流传,在 Little 的推动下,由 Little 、 Moler 、 Steve Bangert 合作,于 1984 年成立了 MathWorks 公司,并把 MATLAB 正式推向市场。从这时起, MATLAB 的内核采用 C 语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。 
    MATLAB 以商品形式出现后,仅短短几年,就以其良好的开放性和运行的可靠性,使原先控制领域里的封闭式软件包(如英国的 UMIST ,瑞典的 LUND 和 SIMNON ,德国的 KEDDC )纷纷淘汰,而改以 MATLAB 为平台加以重建。在时间进入 20 世纪九十年代的时候, MATLAB 已经成为国际控制界公认的标准计算软件。 
    到九十年代初期,在国际上 30 几个数学类科技应用软件中, MATLAB 在数值计算方面独占鳌头,而 Mathematica 和 Maple 则分居符号计算软件的前两名。 Mathcad 因其提供计算、图形、文字处理的统一环境而深受中学生欢迎。 
MathWorks 公司于 1993 年推出 MATLAB4.0 版本,从此告别 DOS 版。 4.x 版在继承和发展其原有的数值计算和图形可视能力的同时,出现了以下几个重要变化:
( 1 )推出了 SIMULINK 。这是一个交互式操作的动态系统建模、仿真、分析集成环境。它的出现使人们有可能考虑许多以前不得不做简化假设的非线性因素、随机因素,从而大大提高了人们对非线性、随机动态系统的认知能力。
( 2 )开发了与外部进行直接数据交换的组件,打通了 MATLAB 进行实时数据分析、处理和硬件开发的道路。
( 3 )推出了符号计算工具包。 1993 年 MathWorks 公司从加拿大滑铁卢大学购得 Maple 的使用权,以 Maple 为“引擎”开发了 Symbolic Math Toolbox 1.0 。 MathWorks 公司此举加快结束了国际上数值计算、符号计算孰优孰劣的长期争论,促成了两种计算的互补发展新时代。
( 4 )构作了 Notebook 。 MathWorks 公司瞄准应用范围最广的 Word ,运用 DDE 和 OLE ,实现了 MATLAB 与 Word 的无缝连接,从而为专业科技工作者创造了融科学计算、图形可视、文字处理于一体的高水准环境。 
    1997 年春, MATLAB5.0 版问世,紧接着是 5.1 、 5.2 ,以及和 1999 年春的 6.x 版。与 4.x 相比,现今的 MATLAB 拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。(关于 MATLAB6.x 的特点下节将作更详细的介绍。) 
    诚然,到 1999 年底, Mathematica 也已经升到 4.0 版,它特别加强了以前欠缺的大规模数据处理能力。 Mathcad 也赶在 2000 年到来之前推出了 Mathcad 2000 ,它购买了 Maple 内核和库的部分使用权,打通了与 MATLAB 的接口,从而把其数学计算能力提高到专业层次。但是,就影响而言,至今仍然没有一个别的计算软件可与 MATLAB 匹敌。 
    在欧美大学里,诸如应用代数、数理统计、自动控制、数字信号处理、模拟与数字通信、时间序列分析、动态系统仿真等课程的教科书都把 MATLAB 作为内容。这几乎成了九十年代教科书与旧版书籍的区别性标志。在那里, MATLAB 是攻读学位的大学生、硕士生、博士生必须掌握的基本工具。 
    在国际学术界, MATLAB 已经被确认为准确、可靠的科学计算标准软件。在许多国际一流学术刊物上,(尤其是信息科学刊物),都可以看到 MATLAB 的应用。 
在设计研究单位和工业部门, MATLAB 被认作进行高效研究、开发的首选软件工具。如美国 National Instruments 公司信号测量、分析软件 LabVIEW , Cadence 公司信号和通信分析设计软件 SPW 等,或者直接建筑在 MATLAB 之上,或者以 MATLAB 为主要支撑。又如 HP 公司的 VXI 硬件, TM 公司的 DSP , Gage 公司的各种硬卡、仪器等都接受 MATLAB 的支持。
MATLAB-巨人肩上的工具 
MATLAB被誉为“巨人肩上的工具”。 由于使用Matlab编程运算与人进行科学计算的思路和表达方式完全一致,所以不象学习其它高级语言--如Basic、Fortran和C等那样难于掌握,用Matlab编写程序犹如在演算纸上排列出公式与求解问题,所以又被称为演算纸式科学算法语言
一般数值分析、矩阵运算、数字信号处理、建模和系统控制和优化等应用程序,并集应用程序和图形于一便于使用的集成环境中。在这个环境下,对所要求解的问题,用户只需简单地列出数学表达式,其结果便以数值或图形方式显示出来。
MATLAB的含义是矩阵实验室(MATRIX LABORATORY),主要用于方便矩阵的存取,其基本元素是无须定义维数的矩阵。MATLAB自问世以来,就是以数值计算称雄。MATLAB进行数值计算的基本单位是复数数组(或称阵列),这使的MATLAB高度“向量化”。经过十几年的完善和扩充,现已发展成为线性代数课程的标准工具。由于它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域的问题时,显得大为简捷、高效、方便,这是其它高级语言所不能比拟的。美国许多大学的实验室都安装有MATLAB供学习和研究之用。在那里,MATLAB是攻读学位的大学生硕士生 博士生必须掌握的基本工具。
MATLAB中包括了被称作工具箱(TOOLBOX)的各类应用问题的求解工具。工具箱实际上是对MATLAB进行扩展应用的一系列MATLAB函数(称为M文件),它可用来求解各类学科的问题,包括信号处理、图象处理、控制系统辨识、神经网络等。随着MATLAB版本的不断升级,其所含的工具箱的功能也越来越丰富,因此,应用范围也越来越广泛,成为涉及数值分析的各类工程师不可不用的工具。 
MATLAB5.3中包括了图形界面编辑GUI,改变了以前单一的“在指令窗通过文本形的指令进行各种操作”的状况。这可让使用者也可以象VB、VC、VJ、DELPHI等那样进行一般的可视化的程序编辑。在命令窗口(matlab command window)键入simulink,就出现(SIMULINK) 窗口。以往十分困难的系统仿真问题,用SIMULINK只需拖动鼠标即可轻而易举地解决问题,这也是近来受到重视原因所在。

二、 MATLAB 的基本组成和特点
    经过近 20 年实践,人们已经意识到: MATLAB 作为计算工具和科技资源,可以扩大科学研究的范围、提高工程生产的效率、缩短开发周期、加快探索步伐、激发创造活力。那末,作为当前最新版本的 MATLAB  究竟包括哪些内容?有哪些特点呢?      
语言 
    5.0 以前版本的 MATLAB 语言比较简单。它只有双精度数值和简单字符串两种数据类型,只能处理 1 维、 2 维数组。它的控制流和函数形式也都比较简单。这一方面与当时软件的整体水平有关,另方面与 MATLAB 仅限于数值计算和图形可视应用的设计目标有关。 
    从 5.0 版起, MATLAB 对其语言进行了根本性的变革,使之成为一种高级的“阵列”式语言。 
1、 MATLAB 语言的传统优点
    MATLAB 自问世起,就以数值计算称雄。 MATLAB 进行数值计算的基本处理单位是复数数组(或称阵列),并且数组维数是自动按照规则确定的。这一方面使 MATLAB 程序可以被高度“向量化”,另方面使用户易写易读。 
指令是简单的,但其内涵却远远超出了普通教科书的范围,其计算的快速性、准确性和稳定性都是普通程序所远不及的。 
2、语言新特点
(1)数据类型和面向对象编程技术 
    MATLAB6.x 版与旧版最显著的不同在于数据类型的变化。 6.x 版现有六种基本数据类型:双精度数组、字符串数组、元胞数组、构架数组、稀疏矩阵和 unit8 数据。 
    数据类型的变革,面向对象编程技术的采用,所产生的影响是广泛而深层的。这种影响首先表现在 MATLAB 的自身。从 5.0 版起, MATLAB 就用新数据类型逐步地对其自身的函数指令加以改造。这个过程一直延续到 6.x 版才基本完成。比如 6.x 版就推出了一组名称全新(求取极小值等)的泛函指令,它们优化参数的设置是采用构架数组进行的。再如 6.x 版提供的常微分方程解算指令 ODE Solver 的参数设置也全是靠新数据类型进行的。 
    新数据类型和面向对象技术的影响之二:若干通用工具包的相应升级。以符号计算为例,在 MATLAB 4.2c 中, Symbolic Math Toolbox 1.0 版处理符号计算的指令形式与数值计算指令形式很不协调,显得十分生硬。比如,符号矩阵的“四则”运算的旧版指令分别是 symadd , symsub , symmul 和 inverse 。但在 6.x 版中,符号工具包已升级为 2.0 版,新的“四则”符号运算指令形式上与数值计算完全相同,它们分别是 + , - , * , / 。新的符号计算形式已被改造得与“ MATLAB 风格数值计算形式”浑然统一。 
新数据类型和面向对象技术影响之三:一系列的应用工具包相继升级。这不仅使应用工具包表现更为友善,而且功能大大加强。以控制工具包为例,新版利用构架数组和重载技术,把线性时不变系统( Linear Time-Invariant system )设计为“ LTI 对象”。这样处理后,不管 LTI 是由传递函数产生、由零极点增益方式产生,还是由状态方程形式创建,只要是 LTI 对象,它们之间就可方便地进行各种数学运算。
(2)控制流和函数类型 
    新版 MATLAB 的控制流新增了多分支结构 switch-case 、 try-catch 结构和警告提示指令 error 、 warning 。这进一步提高了程序的可读性和运行可靠性。 
    新版的函数类型大大丰富,适应编制和管理复杂程度不同的程序。例如内联函数比较简练,适用于各类比较简单数学模型。而子函数、私用函数的增添,使得复杂函数比较容易组织,既提高了软件的“重用度”,又避免了众多内存变量名的冲突、庞大工具库的函数名冲突。 
为函数设计了新的变长度输入输出宗量 varagin 、 varagout 。采用了这种变长度宗量, MATLAB 自身的新版指令被进一步“柔性化”。一个指令可以接受任意多个输入宗量,可以产生任意多个输出宗量,以适应不同场合的需要。可使得所有这些措施使得 MATLAB 能更加便捷地编制复杂的大型程序。当然,用户也可以借助这种变长度宗量来编制灵活多变的应用程序。
工作环境
所谓工作环境是指:帮助系统、工作内存管理、指令和函数管理、搜索路径管理、操作系统、程序调试和性能剖析工具等。 
1、传统工作环境 
    与同时期其他数学类软件相比,旧版 MATLAB 的工作环境虽属比较友善之列,但其工作环境确实比较“单调”。它的帮助系统是“纯文本”形式的;内存管理、路径管理、调试工具是单纯指令操纵形式的;文件类型也形式单一,仅有 M 文件和 MAT 文件。 4.2c 版情况开始变化,但那只是过渡形式。 
2、 工作环境新特点 
    (1)大量引入图形用户界面 
    6.x 版改变了过去单调依靠“在指令窗通过纯文本形指令进行各种操作”面貌,引入了许多让使用者一目了然的图形界面,如在线帮助的交互型界面 helpwin ,管理工作内存的 workspace ,交互式的路径管理界面 pathtool ,指令窗显示风格设置界面等。它们的开启方式有:工具条图标开启、选择菜单项开启,直接“文本式”指令开启。 
    6.x 版更进一步把图形显示窗改造成了交互操作的可编辑图形界面。 
    (2)引入了全方位帮助系统 
    “临场”在线帮助:这些帮助内容,大多嵌附在 M 文件中,即时性强,反应速度快。它对求助内容的回答最及时准确。 MATLAB 旧版就一直采用这种帮助系统,并深受用户欢迎。新版保留原功能的同时,还新增一个内容与之完全对应的图形界面 helpwin ,加强了对用户的向导。 
    综合型在线帮助文库 helpdesk :该文库以 HTML 超文本形式独立存在。整个文库按 MATLAB 的功能和核心内容编排,系统性强,且可以借助“超链接”方便地进行交叉查阅。但是,这部分内容偶而发生与真实 M 文件脱节的现象。 
    完整易读的 PDF 文档:这部分内容与 HTML 帮助文库完全对应。 PDF 文档不能直接从指令窗中开启,而必须借助 Adobe Acrobat Reader 软件阅读。这种文件的版面清楚、规范,适宜有选择地系统阅读,也适宜于制作硬拷贝。 
    演示软件 demo :这是一个内容广泛的演示程序。 MATLAB 一向重视演示软件的设计,因此无论 MATLAB 旧版还是新版,都随带各自的演示程序。只是,新版内容更丰富了 。 
    (3) M 文件编辑、调试 的集成环境 
    新的编辑器有十分良好的文字编辑功能。它可采用色彩和制表位醒目地区分标识程序中不同功能的文字,如运算指令、控制流指令、注释等。通过编辑器的菜单选项可以对编辑器的文字、段落等风格进行类似 Word 那样的设置。 
    从 5.2 版起,还新增了“变量现场显示”功能,只要把鼠标放在变量名上( Mouse over ),就能在现场显示该变量的内容。 
    在 6.x 版中,调试器已经被图形化,它与编辑器集成为一体。只需点动交互窗上的调试图标就可完成对程序的调试。 
    (4) M 文件的性能剖析 
    调试器只负责 M 文件中语法错误和运行错误的定位,而性能剖析指令 profile 将给出程序各环节的耗时分析报告。 6.x 版剖析指令的分析报告特别详细,它将帮助用户寻找影响程序运行速度的“瓶颈”所在,以便改进。 
    (5) Notebook 新的安装方式 
    从 4.2c 版引入 Notebook 以来,这种集文字、计算、图形于一体的“活”环境就深受用户赞赏。但直到 5.2 版至, Notebook 的安装都是与 MATLAB 的安装同步进行的。这种安装方式的不便之处是:一旦 Word 发生变动,就必须把 MATLAB 全盘重装。 6.x 版改变了这种局面,它可以在 MATLAB 指令窗中“随时”进行安装 Notebook ,省时灵活。 
    (6) MATLAB 环境可运行文件的多样化 
    旧版中,用户可编制和运行的程序文件只有 M 脚本文件和 M 函数文件。 6.x 版新增了产生伪代码 P 文件的 pcode 指令和产生二进制 MEX 文件的 mex 指令。较之 M 文件,这两种文件的运行速度要快得多,保密性也好。 
图视系统

1、 传统的图形表现力
    MATLAB 的图形可视能力在所有数学软件中是首屈一指的。 MATLAB 的图形系统有高层和低层两个部分组成。高层指令友善、简便;低层指令细腻、丰富、灵活。 
    一般说来,不管二元函数多么复杂,它的三维图形,仅需 10 条左右指令,就能得到富于感染力的表现。数据和函数的图形可视手段包括:线的勾画、色图使用、浓谈处理、视角选择、透视和裁剪。 MATLAB 有比较完备的图形标识指令,它们可标注:图名、轴名、解释文字和绘画图例。 
2、图视新特点
(1) 6.x 版的可编辑图形窗 
    对一般用户来说,在使用 MATLAB6.x 版图形功能时,感受最强烈的变化是图形窗。此前的图形窗只具单纯的显示功能。 6.x 版则不同,它是可编辑的图形显示窗。在 6.x 的图形窗里,只需点动工具图标或菜单选项,就可直接对显示图形的各种“对象属性”进行随心所欲的设置,可交互式地改变线条型式、粗细、颜色,可动态地变换观察视角,可在图形窗随意位置标识文字或子图。 6.x 版图形窗是十分成功的“图柄”操作的图形用户界面。 
    (2) 6.x 版的 Tex 特殊字符集 
    图形功能的另一个较大变化是标识能力的大大增强。具体表现:一,引进 Tex 特殊字符子集,可标注如  ∑ 等数学字符;二,可书写上下标;三,可对英文、中文进行字体形式和大小的设置。四,可采取多种方式进行多行文字注释。 
    (3) 6.x 版的简捷绘图指令 
    这组指令的特点是“指令的前两个字母是 ez ”,英文含义是“ Easy to ”。这组指令有两个功能:一,直接表现用字符串描写的函数图形;二,与符号计算配套使用,作为符号计算结果的图形可视工具。 
    这种指令的使用方法极其简单。例如使用一条指令 ezsurf('y/(1+x^2+y^2)') 就可以绘制二元函数  的曲面。 
    这组指令与普通“数值型”绘图指令起着互为补充的作用。假若就方便易用排序,简捷指令最方便,普通“数值型”绘图指令次之,低层指令最繁;假若就绘图的细致和个性化能力排序,那末低层指令最强,简捷指令最弱。 
    ( 
    无论是 1.2 版编译器,还是 2.0 版编译器,它们都不但可以把全 M 函数文件编译成独立应用程序,而且也可以把 C 或 FORTRAN 程序与 M 文件混编成独立应用程序。这种程序的优点是:一,可以脱离 MATLAB 环境独立运行;二,运行速度快。 
    MATLAB 编译器无疑给用户开发计算类 EXE 可执行程序提供了快捷、高效的工具。举例来说,假如用户想编制一个求解各类线性代数方程的可独立执行的程序,用户只要先在 MATLAB 环境中编写由 30 来条指令组成的 M 函数文件,然后借助编译器把它变成独立执行的 EXE 程序。这 EXE 文件不但可以计算“恰定”方程,而且可以解算“超定”、“欠定”方程。值得指出:原 M 文件是不过 2K 字节的小小程序。而编译生成的 EXE 文件却超过 200K 字节,这可是一个不算小的程序。 
与 1.2 版相比, 2.0 版编译器具有处理高维数组、元胞数组、构架数组的能力,支持变长度输入输出宗量,支持多分支等控制流。
6.x 版的 API 应用程序接口 
与 MATLAB 编译器相比, MATLAB 的 API 应用程序接口问世得更晚,也更不成熟。 MATLAB API 由一系列接口指令组成。借助这些接口指令,用户就可在 C 或 FORTRAN 中,或直接读写 MATLAB 的 MAT 数据文件,或把 MATLAB 当作计算引擎使用。