第Ⅰ篇 基础知识
第1章 认识MATLAB
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB R2016b是MathWorks公司2016年9月推出的MATLAB版本。本章引导读者进入MATLAB的世界。
本章要点(已掌握的在方框中打钩)
□ MATLAB概述
□ MATLAB行业应用
1.1 MATLAB到底有多厉害
“大学时学MATLAB,教授用它编了一首歌,当时我就懵了……”
“作为一个工作的人来讲讲这个MATLAB/Simulink/Stateflow的应用情况。汽车行业控制软件应用层开发基本都用这个,飞机行业控制应用层软件也用这个。MATLAB/Simulink算是行业应用软件,是开发算法、控制策略的好东西。”
“MATLAB,工程计算的利器,陪伴工程师一生的朋友,你无悔的选择。说实话,我MATLAB用得不多,基本把它当作了函数画图器,但我知道很多顶尖人士把它作为主武器。”
“国外的风资源分析软件太难用了,决心用MATLAB开发一个工具包,测试、修改、再测试、再修改……反反复复跨度两个月,最终形成整体综合分析和针对性细化分析的两个工具包WindAnalysis1和WindAnalysis2,最近计划开发一个整合版本WindAnalysis Pro,实现强大功能的集中体现。依赖于MATLAB强大的算法和图形功能,反复测试后,工具包已经具备风数据质量分析、异常数据剔除、时序分布、风频分布、分布函数拟合、月均日均风速分析、湍流分析、风切变计算、发电量估算等涵盖所有风资源分析所需的功能,且运算精度比常规风电软件高。”
“在工程应用方面,MATLAB有一堆集成度相当高的工具箱:Simulink, Classification learner……在原型验证、快速建模方面可是相当有优势的。它就像把瑞士军刀,功能丰富,虽然不是样样功能都是最顶尖的,但在很多场合都能令人得心应手。”
“本科前两年在国内读,对MATLAB的接触仅限于老师上课时演示各种meshgrid画图展示,到了国外发现,每个工程师都是MATLAB的一把好手!”
以上是网友对知乎论坛中“MATLAB到底有多厉害?”这一问题的部分回答。如果您是第一次接触MATLAB,通过这些回答,相信您对MATLAB的厉害之处会有初步的了解了吧。本书将带您体验MATLAB神奇之旅,学习之后,相信您会成为一名MATLAB高手的。
1.2 MATLAB概述
1.2.1 MATLAB的语言特点及应用领域
MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的科学计算语言和编程环境。MATLAB的名字取自矩阵实验室(Matrix Laboratory),是由美国MathWorks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB包括命令控制、可编程,有上百个预先定义好的命令和函数,这些函数能通过用户自定义函数进一步扩展。MATLAB有许多强有力的命令。例如,MATLAB能够用一个单一的命令求解线性系统,能完成大量的高级矩阵处理。MATLAB有强有力的二维、三维图形工具。
MATLAB能与其他程序一起使用。例如,MATLAB的图形功能,可以在一个C语言程序中完成可视化计算。此外,有众多不同的MATLAB工具箱可应用于特殊的应用领域。
在以下的领域里,MATLAB是解决各种问题十分有效的一个工具。
● 工业研究与开发。
● 数学教学,特别是线性代数,几乎所有基本概念都能涉及。
● 数值分析和科学计算方面的教学与研究。
● 电子学、控制理论和物理学等工程和科学学科方面的教学与研究。
● 经济学、化学和生物学等有计算问题的其他领域中的教学与研究。
如图1.1所示为MATLAB的启动界面。
图1.1 MATLAB的启动界面
1.2.2 MathWorks公司及其产品概述
MathWorks公司是数学计算软件的领先软件供应商,全球各地的工程师和科学家很多都借助该公司的产品加速研究、创新和开发的步伐。MathWorks公司的创办人是Cleve Moler博士和Jack Little总裁。
20世纪70年代中后期,Cleve Moler博士和其同事在美国国家科学基金的资助下开发了调用EISPACK和LINPACK的NRTRM子程序库。EISPACK是特征值求解的FORTRAN程序库,LINPACK是解线性方程的程序库。在当时,这两个程序库代表了矩阵运算的最高水平。
后来,Cleve Moler在给学生讲授线性代数课程时,希望教学生使用EISPACK和LINPACK程序库,但他发现学生用FORTRAN编写接口程序很费时间,于是他开始自己动手,利用业余时间为学生编写EISPACK和LINPACK的接口程序。Cleve Moler给这个接口程序取名为MATLAB,该名为矩阵(matrix)和实验室(laboratory)两个英文单词前三个字母的组合。在以后的数年里,MATLAB在多所大学作为教学辅助软件使用,并作为面向大众的免费软件广为流传。
1983年春天,Cleve Moler到斯坦福大学讲学,MATLAB深深地吸引了工程师Jack Little, Jack Little敏锐地觉察到MATLAB在工程领域的广阔前景。同年,他和Cleve Moler一起,用C语言开发了第二代专业版。这一代的MATLAB语言同时具备了数值计算和数据图示化的功能。
1984年,Cleve Moler和Jack Little成立MathWorks公司,正式把MATLAB推向市场。随着科技的发展,许多优秀的科学家和工程师不断对MATLAB进行完善,使其从一个简单的矩阵分析软件逐渐发展成为一个具有极高通用性,并带有众多实用工具的运算操作平台。历经几十年的发展和竞争,MATLAB成为国际认可的最优化的科技应用软件。
目前,在大学里,MATLAB已成为线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具,成为攻读学位的大学生、硕士生、博士生必须掌握的基本技能。在设计研究单位和工业部门,MATLAB被广泛用于科学研究和解决各种具体问题。在国内,特别是在工程界,MATLAB已经盛行起来。可以说,无论从事工程方面哪个学科的人员,都能在MATLAB里找到合适的功能。
从1984年成立以来,MathWorks公司已经逐步成为全球科学计算和基于模型设计的软件供应商的领导者。MathWorks公司总部位于马萨诸塞州的Natick,现在全球范围内拥有1900多名员工。MATLAB是美国MathWorks公司出品的商业数学软件,主要包括MATLAB和Simulink两大部分。
MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的科学计算语言和编程环境,Simulink是一种用于对多领域动态和嵌入式系统进行仿真和模型设计的图形化环境。公司还针对数据分析和图形处理等特殊任务推出近100项其他产品。MathWorks公司的产品作为研究和开发的基础工具,在汽车、航空、通信、电子和工业自动化等领域得到广泛的应用。它们还被应用于金融服务和计算生物学等对建模和仿真有越来越高要求的技术领域。MathWorks公司的软件可用来辅助许多尖端产品的设计和开发,包括汽车系统,航空飞行控制,航空电子、通信和其他电子产品,工业机械以及医疗器械等。全球数以万计的大专院校和科研机构采用MathWorks公司的解决方案来开展多种技术学科的教学和研究工作。
1.2.3 MATLAB的语言特点
MATLAB的突出特点就是简洁。MATLAB用更直观的、符合人们思维习惯的代码,代替了C和FORTRAN语言的冗长代码,给用户带来的是最直观、最简洁的程序开发环境。以下简单介绍MATLAB的主要特点。
(1)运算符丰富。由于MATLAB是用C语言编写的,因此MATLAB提供了与C语言几乎一样多的运算符。灵活使用MATLAB的运算符,将使程序变得极为简短。
(2)语言简单易学,容易使用,库函数极其丰富。MATLAB程序书写形式自由,利用其丰富的库函数避开繁杂的子程序编程任务,可以压缩一切不必要的编程工作。库函数都由本领域的专家编写,用户不必担心函数的可靠性。
(3)既具有结构化的控制语句,又具有面向对象编程的特性。
(4)程序限制不严格,程序设计自由度大。例如,在MATLAB里,用户无须对矩阵预定义即可使用。
(5)程序的可移植性很好。基本上不做修改就可以在各种型号的计算机和操作系统上运行。
(6)图形功能强大。在MATLAB里,数据的可视化非常简单。MATLAB还具有较强的编辑图形界面的能力。
(7)功能强大的工具箱。
(8)源程序的开放性。开放性也许是MATLAB最受人们欢迎的特点。除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱。
(9)程序运行速度较慢。与其他高级程序相比,MATLAB程序的执行速度较慢。由于MATLAB程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。
1.2.4 MATLAB的组成
MATLAB包含两个部分:核心部分和各种应用工具箱。MATLAB的核心部分由MATLAB开发环境、MATLAB语言、MATLAB数学函数库、MATLAB图形处理系统和MATLAB应用程序接口五大部分组成,包含数百个核心内部函数。Simulink目前被MathWorks公司以与MATLAB并列的地位推出。
(1)MATLAB开发环境是一个集成的工作环境,包括MATLAB命令行窗口、文件编辑调试器、工作区、数组编辑器和在线帮助文档等。
(2)MATLAB语言具有程序流程控制、函数、数据结构、输入输出和面向对象的编辑特点,是基于矩阵/数组的语言。
(3)MATLAB的数学函数库包含了大量的计算算法,包括基本函数、矩阵运算和复杂算法等。
(4)MATLAB的图形处理系统能够将二维和三维数组的数据用图形表示出来,并可以实现图像处理、动画显示和表达式作图等功能。
(5)MATLAB应用程序接口使MATLAB语言能与C或FORTRAN等其他编程语言进行交互。
MATLAB的应用工具箱又分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能、图示建模仿真功能、文字处理功能以及与硬件实时交互功能,适用于多种学科。而学科性工具箱则专业性比较强,如control toolbox、signal proceessing toolbox、communication toolbox等,这些工具箱都是由该领域内学术水平很高的专家编写的,所以用户无须编写自己学科范围内的基础程序即可直接进行高、精、尖的研究。
1.2.5 MATLAB R2016b新增功能
MathWorks公司于2016年9月19日推出Release 2016b(R2016b),其中增加了新的功能以简化MATLAB中的大数据处理过程。工程师和科学家可更轻松地在MATLAB中进行大数据处理而不必考虑内存的限制。R2016b中还包括了Simulink的其他新功能、一个新的工具箱Risk Management Toolbox以及其他83款产品的更新和问题修复。
工程师和科学家可利用MATLAB的常用功能和语法,通过tall数组轻松处理超出内存限制的数据,而无须学习大数据编程,并且有上百个数学、统计和机器学习算法实现了对tall数组的支持。采用tall数组实现的大数据处理代码可以在Hadoop集群上运行或者被直接集成到其他Spark应用程序当中。
R2016b还增加了一个时间表数据容器,用于索引和同步带时间戳的表格数据;增加了字符串数组,用于有效地进行文本数据的操作、比较和存储;还增加了其他用于数据预处理的新功能。
MathWorks公司的MATLAB市场营销总监David Rich表示:“很多公司拥有海量数据,却很难对其加以利用以创建有效的预测模型及获得更深入的数据洞察。我们通过推出R2016b,降低了领域专家操作数据的门槛,使其能够更轻松地处理更多的数据,同时使得系统的设计、性能和可靠性得以提升。”
MATLAB产品系列更新包括以下方面。
● MATLAB:
(1)引入tall数组用于操作超过内存限制的过大数据;
(2)引入时间表数据容器用于索引和同步带时间戳的表格数据;
(3)增加在脚本中定义本地函数的功能以提高代码的重用性和可读性;
(4)通过使用MATLAB的Java API可以在Java程序中调用MATLAB代码。
● MATLAB Mobile:通过在MathWorks云端的iPhone和Android传感器记录数据。
● Database Toolbox:提供用于检索Neo4j数据的图形化数据库界面。
● MATLAB Compiler:支持将MATLAB应用程序(包括tall数组)部署到Spark集群上。
● Parallel Computing Toolbox:能够在台式机、装有MATLAB Distributed Computing Server的服务器以及Spark集群上利用tall数组进行大数据并行处理。
● Statistics and Machine Learning Toolbox:提供不受内存限制的大数据分析算法,包括降维、描述性统计、k-均值聚类、线性递归、逻辑递归和判别分析。
● Statistics and Machine Learning Toolbox:提供可以自动调整机器学习算法参数的Bayesian优化算法以及可以选择机器学习模型特征的近邻成分分析(NCA)。
● Statistics and Machine Learning Toolbox:支持使用MATLAB Coder自动生成实现SVM和逻辑回归模型的C/C+代码。
● Image Processing Toolbox:支持使用三维超像素的立体图像数据进行简单线性迭代聚类(SLIC)和三维中值滤波。
● Computer Vision System Toolbox:使用基于区域的卷积神经网络深度学习算法(R-CNN)进行对象检测。
● Risk Management Toolbox:一个新的工具箱用于开发风险模型和执行风险模拟。
● ThingSpeak:能够从联网的传感器采集数据,并使用由Statistics and Machine Learning Toolbox、Signal Processing Toolbox、Curve Fitting Toolbox和Mapping Toolbox提供的函数在云端进行MATLAB分析。
Simulink产品系列更新包括以下方面。
● Simulink:
(1)使用JIT编译器提升在加速器模式下运行的仿真的性能;
(2)能够初始化、重置并终止子系统,进行动态启动和关闭行为建模;
(3)状态读取器和写入器模块可以从模型中的任何位置完全控制重置状态行为;
(4)对Raspberry Pi 3和Google Nexus的硬件支持。
● Simulink和Stateflow:简化参数和数据编辑的属性检查器、模型数据编辑器和符号管理器。
● Simscape:新增了一个模块库,用于模拟理想气体、半理想气体以及实际气体系统。
信号处理和通信更新包括以下方面。
● Signal Processing Toolbox:可用于执行多时序的时域和频域分析的信号分析仪应用程序。
● Phased Array System Toolbox:针对空气传播和多路径传播对窄频和宽频信号的影响提供建模支持。
● WLAN System Toolbox:IEEE 802.11ah支持和多用户MIMO接收机功能。
● Audio System Toolbox:音频插件托管功能,可在MATLAB中直接运行和测试VST插件。
代码生成更新包括以下方面。
● Embedded Coder:
(1)交叉发布代码集成功能使得可以重用由较早版本生成的代码;
(2)能够生成可用于任何软件环境的可插入式代码,包括动态启动和关闭行为;
(3)支持仿真AUTOSAR基础软件,包括Diagnostic Event Manager(DEM)和NVRAM Manager(NvM)。
● HDL Coder:根据设定的目标时钟频率,以寄存器插入方式自适应流水化,以及可用于显示、分析转换和状态的逻辑分析仪(搭配使用DSP System Toolbox)。
验证和确认更新包括以下方面。
● Simulink Verification and Validation:Edit-time checking功能,可帮助在设计时发现并修复标准合规性问题。
● Simulink Test:用于进行测试评估的自定义标准的定义功能。
● HDL Verifier:FPGA数据采集功能,用于探测要在MATLAB或Simulink中进行分析的内部FPGA信号。
● Polyspace Bug Finder:支持CERT C编码规范,用于网络安全漏洞检测。
1.3 MATLAB的行业应用
MATLAB的应用领域十分广阔,从MATLAB拥有几十个工具箱也可以看出这一点。MATLAB的典型应用有: ① 数据分析;② 数值与符号计算;③ 工程与科学绘图;④ 控制系统设计;⑤ 航天工业;⑥ 汽车工业;⑦ 生物医学工程;⑧ 语音处理;⑨ 图像与数字信号处理;⑩ 财务、金融分析;⑪建模、仿真及样机开发;⑫新算法研究开发;⑬图形用户界面设计。图1.2是MATLAB在数字信号处理中的应用举例,图1.3是MATLAB用于绘制三维图形举例,图1.4是MATLAB在科学计算中的应用举例。这3个图展现了MATLAB不同的应用领域和强大的绘图功能。
图1.2 MATLAB在数字信号处理中的应用(用窗函数设计一个线性相位FIR低通滤波器)
图1.3 MATLAB用于绘制三维图形
图1.4 MATLAB在科学计算中的应用
1.4 初次使用MATLAB
1.4.1 直接使用MATLAB命令
图1.5是MATLAB的工作界面,下面使用MATLAB来完成两个矩阵的相乘操作。在MATLAB“命令行窗口”的命令提示符“>>”后,可直接输入MATLAB命令。如图1.6所示,首先输入A=[1 2 3; 4 5 6],表示一个2行3列的矩阵(行内元素之间用空格隔开,相邻行元素之间用分号隔开,符号均用半角);接着输入B=[1 2;3 4;5 6],它表示一个3行2列的矩阵;然后输入C=A*B,回车即得到两矩阵的相乘结果:
图1.5 MATLAB工作界面
图1.6 生成一个矩阵
过程如图1.7所示。学习过线性代数的读者,是不是觉得很方便呢?
图1.7 两个矩阵的相乘过程
1.4.2 一个简单的MATLAB程序
MATLAB的程序文件是扩展名为“.m”的M文件。M文件有脚本M文件和函数M文件两种,脚本M文件是比较简单的程序文件,仅是一串按用户意图排列而成的MATLAB命令集合。
在MATLAB的工作界面,单击左上角的新建脚本图标,新建一个脚本文件,弹出如图1.8所示的脚本文件编辑器窗口。在这个编辑器窗口中可以输入脚本文件代码。
图1.8 脚本编辑器窗口
在编辑器窗口中输入以下程序:
s=0; for i=1:100 s=s+i; end s
程序的功能是计算1+2+…+100的和,程序用到了一个for循环结构,基本语句比较简单,稍有编程基础的读者很容易明白。语句后面加“; ”的作用是,程序运行时不在命令行窗口显示改行的运算结果。单击保存按钮,弹出如图1.9所示的对话框。将文件取名为ex1.m。可以选择保存文件的文件夹位置(本书中文件的保存位置为“D:\my_MATLAB”),然后单击右下角的按钮,则文件保存成功。之后可以单击按钮,程序运行结果在命令行窗口中显示,如图1.10所示。
图1.9 保存一个新的MATLAB脚本文件
图1.10 程序ex1.m的运行结果
注意
如果运行后出现如图1.11所示的对话框,表明所设置的存储位置不包含在MATLAB的搜索路径中,此时单击“添加到路径”选项,就可顺利运行程序。
图1.11 文件不在MATLAB搜索路径中时出现的提示
实际上,对于不长的程序,可以直接在MATLAB的命令行窗口中运行。比如将ex1.m程序的内容复制到命令行窗口,然后敲回车,结果如图1.12所示。
图1.12 直接在命令行窗口运行程序