1.1 MATLAB的发展与基本功能
MATLAB是英文MATrix LABoratory(矩阵实验室)的缩写,自1984年推向市场以来,经过不断的完善和发展,现已成为国际上科学研究与工程应用领域最具影响力的集成应用开发环境。
1.1.1 MATLAB的发展
20世纪70年代中后期,时任美国新墨西哥大学计算机科学系主任的 Cleve Moler教授在给学生讲授线性代数课程时,想教学生使用当时流行的线性代数软件包Linpack和基于特征值计算的软件包Eispack,但发现用其他高级语言编程极为不便,于是,Cleve Moler教授为学生编写了方便使用Linpack和Eispack的接口程序并命名为MATLAB,这便是MATLAB的雏形。
早期的MATLAB是用FORTRAN语言编写的,尽管功能十分简单,但作为免费软件,它还是吸引了大批使用者。经过几年的校际流传,在John Little的推动下,由John Little、Cleve Moler和Steve Bangert合作,于1984年成立了MathWorks公司,并正式推出MATLAB第1版(DOS版)。从这时起,MATLAB的核心采用C语言编写,功能越来越强,除原有的数值计算功能外,还新增了图形处理功能。
经过不断努力,MathWorks 公司于1986年、1987年和1990年相继推出了MATLAB 2.0、MATLAB 3.0和MATLAB 3.5,功能不断增强。1992年,MathWorks公司推出了基于Windows的MATLAB 4.0,随之推出符号计算工具包及用于动态系统建模、仿真、分析的集成环境Simulink 1.0,并加强了大规模数据处理能力,使之应用范围越来越广。从 MATLAB 4.2c 开始,每个版本增加了一个建造标号,如MATLAB 4.2c的建造标号是R7。1996年、2000年10月、2002年6月、2004年7月,MathWorks公司先后推出了MATLAB 5.0(建造标号为R8)、MATLAB 6.0(建造标号为R12)、MATLAB 6.5(建造标号为R13)、MATLAB 7.0(建造标号为R14),在计算方法、图形功能、用户界面设计、编程手段、工具等方面不断改进,速度变得越来越快,数值性能也越来越好,兼容性也越来越强。
从2006年开始,每年发布两次以年份作为建造标号的版本,a版在上半年发布,b版在下半年发布,如MATLAB R2006a(MATLAB 7.2)、R2006b(7.3)等。2012年9月,MathWorks公司推出了MATLAB R2012b即MATLAB 8.0,从此时起,MATLAB开始采用与Office 2010相同风格的操作界面,用工具条(Ribbon)取代了传统的菜单和工具栏。MATLAB桌面的工具条由3个选项卡构成,同一类操作的命令集成到同一选项卡中,而功能相关的命令集成到选项卡的同一命令组中。MathWorks公司随后推出了MATLAB R2013a(8.1)、R2013b(8.2)、R2014a(8.3)、R2014b(8.4),R2015a(8.5)、R2015b(8.6)。
2016年3月,MathWorks公司推出了MATLAB R2016a即MATLAB 9.0,新增3D制图和一些有助于加快模型开发和仿真速度的函数,并且提供了更多大数据处理和分析的工具,更加规范和实用。同时,新增的App Designer集成了创建交互式应用程序的两个主要功能——发布可视化组件和设定应用程序的行为,开发者可以用于快速构建 MATLAB 应用程序。2016年9月, MathWorks公司推出了MATLAB R2016b(即MATLAB 9.1),该版本提供一个实时编辑器,用于生成实时脚本(Live script),大大优化了代码可读性。本书交稿时,MATLAB R2018a已出现,以后还会不断出现新的版本,功能将越来越强大。MATLAB 9.x的操作界面和基本功能是一样的,所以不必太在意版本的变化。本书以MATLAB R2017b为基础,全面介绍MATLAB的各种功能与使用。
1.1.2 MATLAB的基本功能
MATLAB将高性能的数值计算和符号计算功能、强大的绘图功能、程序设计语言功能及为数众多的应用工具箱集成在一起,其核心是一个基于矩阵运算的快速解释处理程序。它提供了一个开放式的集成环境,以交互式操作接收用户输入的各种命令,然后执行命令并输出命令执行结果。
1.数值计算和符号计算功能
MATLAB 以矩阵作为数据操作的基本单位,这使矩阵运算变得非常简捷、方便、高效。MATLAB还提供了十分丰富的数值计算函数,而且所采用的数值计算算法都是国际公认的、可靠的算法,其程序由世界一流专家编制,并经高度优化。高质量的数值计算功能为MATLAB赢得了声誉。
在实际应用中,除了数值计算外,往往要得到问题的解析解,这是符号计算的领域。MATLAB和著名的符号计算语言MuPAD相结合,使MATLAB具有符号计算功能。
例如,求解线性方程组:
要得到数值解,可以在MATLAB命令行窗口输入以下命令:
>> a=[2,3,-1;3,-5,3;6,3,-8];
>> b=[7;8;9];
>> x=inv(a)*b
其中,前两条命令分别建立方程的系数矩阵a 和常数列向量b,第3条命令求方程的根。inv(a)为求a的逆矩阵的函数,也可用x = a\b求根。
得到的结果为
x =
2.8255
0.8926
1.3289
此外,也可以通过符号计算来解此方程。在MATLAB命令行窗口输入以下命令。
>> syms x1 x2 x3;
>> [x1,x2,x3]=solve(2*x1+3*x2-x3-7,3*x1-5*x2+3*x3-8,6*x1+3*x2-8*x3-9)
得到的结果为
x1 =
421/149
x2 =
133/149
x3 =
198/149
2.绘图功能
利用 MATLAB 绘图十分方便,它既可以绘制各种图形,包括二维图形和三维图形,还可以对图形进行修饰和控制,以增强图形的表现效果。MATLAB提供了两种方式的绘图操作,一种是使用带参数的绘图命令,另一种是先通过绘图命令创建图形对象,然后通过设置该图形对象属性调整图形。
例如,设 x∈[−5,5],绘制函数和函数 f(x)=x2−10的曲线,可以在MATLAB命令行窗口输入以下命令:
>> x=-5:0.1:5;
>> plot(x,100*sin(2*x)./(x-10),'--',x,x.^2-10)
其中,第1条命令建立x向量,x的值从−5变化到5,第2条命令绘制曲线,命令中的参数’--'指定用虚线绘制图形。命令执行后,将打开一个图形窗口,并在其中显示两个函数的曲线,虚线为的曲线,实线为 f(x)=x2−10的曲线,如图1.1所示。
也可以使用以下命令绘制图1.1所示图形:
>> x=-5:0.1:5;
>> h1=line(x,100*sin(2*x)./(x-10));
>> h1.LineStyle='--'; %设置图形对象h1线型为虚线
>> h2=line(x,x.^2-10)
3.程序设计语言功能
MATLAB 具有程序结构控制、函数调用、数据结构、输入/输出等程序设计语言特征,所以使用MATLAB也可以像使用BASIC、C、FORTRAN等传统程序设计语言一样进行程序设计,而且结合MATLAB的数值计算和图形处理功能,使得MATLAB程序设计更加方便、编程效率更高。例如,上面提到的求线性方程组的解,用MATLAB 实现只需要3条命令,而用传统语言实现就要复杂得多,因此,对于从事数值计算、计算机辅助设计、系统仿真等领域的人员来说,用MATLAB编程的确是一个理想选择。
图1.1 MATLAB绘制函数曲线
MATLAB是解释性语言,而且不能脱离MATLAB环境而独立运行。MathWorks公司提供了将MATLAB源程序编译为可以在其他语言程序中调用的DLL文件,以及将其他语言编写的程序转化为MATLAB函数的编译器。
4.扩展功能
MATLAB 的核心内容主要包含两部分,即科学计算语言 MATLAB 及基于模型的设计工具Simulink。科学计算语言MATLAB是MathWorks所有产品的基础,包括用于算法开发、数据分析、数值计算和可视化的函数;Simulink提供一个动态系统建模、仿真和综合分析的集成环境。应用(Applications)工具箱扩展了MATLAB的应用范围,专业性比较强,如控制系统工具箱(Control System Toolbox)、信号处理工具箱(Signal Processing Toolbox)、图像处理工具箱(Image Processing Toolbox)等,都是由该领域内学术水平很高的专家编写的,用户可以直接利用这些工具箱进行相关领域的科学研究。
MATLAB采用开放式的组织结构,除内部函数外,所有MATLAB基本函数和各工具箱都是可读、可改的源文件,用户可通过对源文件的修改或加入自己编写的文件来构成新的工具箱。