MATLAB语言基础广东工业大学自动化学院李明系统仿真与MATLAB引言形而上者谓之道,形而下者谓之器——《易经·系辞》•所谓“道”者,是指从具体实践活动中总结、提取概括出来的具有普适性的规律⇒认识世界•所谓“器”者,则是在特定规律下制造出来的用于某种目的的工具⇒改造世界控制系统设计→道MATLAB→器MATLAB初识MATLAB为何MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB是矩阵实验室(MatrixLaboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。MATLAB何用MATLAB产品族主要应用于•工程计算与科学绘图•控制系统的分析与设计•数字图像处理•数字信号处理•通讯系统设计•财务与金融工程附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB环境,以解决这些应用领域内的问题MATLAB的产生与发展产生•MATLAB诞生于20世纪70年代,其首创者是时任新墨西哥大学教授CleveMoler及其同事,他们意识到在讲述诸如线性代数等课程时,已有的编程语言比如Fortran和C语言已经不能满足需求,为了降低编程方面的负担,CleveMoler基于他自己使用Fortran语言编写的用于求解线性方程的子程序库——基于特征计算的程序库EISPACK和线性代数程序库LINPACK,开发了MATLAB的雏形发展•MATLAB是集命令翻译、科学计算于一身的一套交互式软件系统,最初作为免费软件在大学里广泛使用,功能也比较简单,只能进行矩阵运算和简单的绘图,但是因为在MATLAB中矩阵运算变得异常简单,不需要用其他高级语言编写矩阵运算程序库,因而受到广大工程专业大学生的青睐,也正是因为在控制分析和信号处理等工程领域中非常强调矩阵的运算和分析,才促使CleveMoler对MATLAB进行继续开发,并于1984年与JackLittle等一起创办了MathWorks公司,把MATLAB推向市场。自公司开创以来,MathWorks不断致力于版本的更新和软件各方面功能的增强历经多年的发展,MATLAB长于数值计算,能处理大量的数据,而且效率比较高。MathWork公司在此基础上加强了MATLAB的符号计算、文字处理、可视化建模和实时控制能力,增强了MATLAB的市场竞争力,使MATLAB成为了市场主流的数值计算软件。到20世纪90年代,MATLAB已成为国际控制界的标准计算软件。MATLAB的优势强大易用的科学计算语言•MATLAB之所以能迅速发展的一个重要原因就是MATLAB的使用简洁直观,符合人们的思维习惯,易于理解和学习。•矩阵运算,例如矩阵乘积,矩阵求逆等等;用C则比较复杂•求线性代数方程Ax=b的解,x=A\b•针对许多专门的领域,将工程科学界重要的问题通过软件制作成工具箱•全面的图形功能•一般数据可视化软件的功能,例如二维图形和三维图形的可视化、图像处理、动画和表达式作图等•添加了软件独有的图形的光照处理、色度处理以及四维数据的表现等•图形用户界面(GUI)的制作上作了很大的改善•独立开放的平台和实用的程序接口•支持多种计算机操作系统,提供了大量的平台独立的措施利于平台之间移植•MATLAB和Fortran、C和Basic之间都可以方便的实现连接•强大的动态系统仿真功能MATLAB界面当前目录窗口命令窗口历史命令窗口工作空间管理窗口MATLAB窗口(1)命令窗口(CommandWindow)•三个蓝色的入门链接•“”为命令提示符,此时我们可以在之后输入一些基本命令,例如数值运算命令,然后按下Enter键,MATLAB则会在命令窗口立即显示结果,并将结果自动赋予变量名ans•MATLAB允许一行输入多个命令,此时可以用逗号“,”和分号“;”来实现,区别在于使用逗号时将会显示运行结果,使用分号时运行结果将予以隐藏3.14*3^2%采用直接演算法,类似于计算器ans=28.2600r=3%采用变量赋值的方法,圆的半径r=3r=3S=3.14*r^2%求圆的面积SS=28.2600r=3;S=3.14*r^2%使用分号禁止显示计算的中间结果S=28.2600MATLAB窗口(2)历史命令窗口(CommandHistory)•历史命令窗口用于记录用户在命令窗口执行过的命令行。包括已运行过的命令、函数、表达式、使用时间等信息。•在历史命令窗口的命令是按逆序排列的。即最早的命令在排在最下面,最后的命令排在最上面。•在历史命令窗口可进行命令历史的查找、检查等工作。用鼠标选中历史命令窗口中的命令行,单击右键弹出操作菜单,我们可以选择相应菜单项对这些历史命令进行各种操作如:•复制(Copy)•执行(Evaluateselection)•删除(Deleteselection)•双击(Doubleclick)这些命令可使它再次执行。MATLAB窗口(3)工作间管理窗口(Workspace)•工作空间是用于储存运算中的各种变量和结果的内存空间,而工作空间窗口则用于显示变量的名称、大小、字节数及数据类型等;•我们可以通过工作空间窗口对变量进行观察、编辑、保存和删除等操作,有命令行和变量编辑器(VariableEditor)两种方式•工作空间管理窗口中命令行方式的主要命令命令功能who显示存储在工作空间全部变量的名称whos显示存储在工作空间全部变量的名称、大小、数据类型等详细信息clear从工作空间中清除变量和函数save保存工作空间变量load从磁盘文件中读取变量到工作空间lengthlength(A),若A向量则显示其长度,若A为矩阵则显示行数与列数中的较大数sizesize(A),得到矩阵A的行数和列数disp显示变量MATLAB窗口(4)当前路径窗口(CurrentDirectory)•MATLAB的当前目录窗口(CurrentDirectory)用于显示及设置当前工作目录,同时显示当前工作目录下的文件名、文件类型及目录的修改时间等信息。•用鼠标选中文件,单击右键可以进行打开(Open)、运行(RunFile)、重命名(Rename)、删除(Delete)等操作,只有在当前目录或搜索路径下的文件及函数才可以被MATLAB运行或调用。•设置当前目录可以在当前目录窗口上方的输入栏中直接输入,或点击浏览器下拉按钮进行选择。MATLAB的路径搜索什么是搜索路径•专门用于查找“.m”文件的路径搜索器,为一系列文件路径的组合,缺省状态下包括当前路径和已安装的全部工具箱的路径。如果调用的函数或文件在搜索路径之外,MATLAB会认为此函数或文件不存在而返回错误信息。一般而言,当在命令窗口输入一个字符串时,MATLAB按下列顺序开始搜索:•在工作空间中搜索是否有以该字符串为变量名的变量,有则返回该变量的值;•搜索是否有同名的MATLAB内部函数,若有,执行该内部函数;•在当前目录中查找与该字符串同名的M文件,若有,执行该文件;•在搜索目录中查找与该字符串同名的M文件,若有,执行该文件;•如果在搜索目录中存在多个同名函数,则只执行搜索路径中的第一个函数,其他函数不再执行。MATLAB的路径搜索搜索路径path(列出所有搜索路径)editpath(进入搜索路径对话框)pathtool(进入搜索路径对话框)对话框中的设置方法•用AddFolder…按钮可以将某一目录加入搜索路径而忽略其子目录,选择AddwithSubfolder…按钮可将选中目录的子目录也包括在搜索路径中,一般情况下选择后者,此时系统会弹出“浏览文件夹”对话框,我们选择好了目录之后单击“确定”,则新目录会出现在搜索路径中。MATLAB的帮助系统HelpDesk•该窗口是一个独立的交互式帮助浏览器,用户可以在命令窗口中输入helpdesk或helpwin来启动帮助窗口。通过帮助窗口中的帮助主题(Contents)、帮助索引(Index)和联机演示(Demos)可以浏览用户可能需要的内容,而在查询结果(SearchResults)中可以查看按用户要求得到的帮助信息列表helpdeskhelpwindoc•HelpDesk是HTML格式的帮助文档,HelpDesk的搜索可以使用不完全关键字,MATLAB里包含了大量关于MATLAB安装、使用、编程以及各种工具箱等的电子版手册,具有搜索功能,因此也可以在指定的手册中搜索关键字,使用非常方便。MATLAB的帮助系统help命令•当用户知道函数名称想了解其具体用法时,可以在命令窗口使用help命令,调用方法是help函数名,例如想了解矩阵求逆函数inv()的用法,可以在命令窗口输入help命令helpinvlookfor命令•lookfor命令与help不同,help命令要求函数名的精确匹配,而lookfor只要求与每个函数中的总结信息有匹配。所以当用户不知道函数的确切名称时可以使用lookfor命令,此时只需知道函数的部分关键字,调用格式为lookfor关键字。例如若用户不知道MATLAB中矩阵求逆的函数,而求逆函数的关键字为inverse,则可以在命令窗口输入如下命令:lookforinverse•根据列出命令的总结信息,可以找到矩阵求逆的函数为inv-Matrixinverse。MATLAB基本使用方法MATLAB中的数据类型(1)数值型数据•通常以双精度数值来表示,不区分整数、实数、复数等•虚数单位i=sqrt(-1),复数z=a+b*i或z=r*exp(i*θ),且注意•当复数的虚部为一个确定的数(而不是变量或者矩阵)时,可以省略系数和虚数单位之间的“*”,即3+i*6可以写成3+6i,但是x+i*y不能写成x+yi;•当复数作为矩阵元素时,复数内不能留有空格,否则可能会被当作两个元素处理而出错。例如k1为一向量,但是k2则是一个矩阵。k1=[3+4i;5+6i]k1=3.0000+4.0000i5.0000+6.0000ik2=[3+4i;5+6i]%复数作为矩阵元素时,复数内不能留有空格k2=3.00000+4.0000i5.00000+6.0000iMATLAB中的数据类型(2)符号型数据•符号型数据则是在MATLAB中定义的特殊变量,它以字符串的形式表示,但又不同于普通字符串。其变量、表达式均为符号对象。符号对象使用sym或者syms生成,语法格式为symsarg1arg2….arg_props•符号对象命令举例symsxy;%利用syms生成符号对象z=sym(‘z’);%利用sym生成符号对象symspreal;%声明符号对象p为实的m=sym('m','real');%声明符号对象m为实的n=sym('n','positive');%声明符号对象n为正的m=sym('m','unreal');%去掉m的附加属性A=[1x;yz]%生成符号矩阵f=sin(x)+cos(x);%建立符号表达式MATLAB中的数据类型(3)字符串型数据•MATLAB作为一种高级语言,字符串运算功能也是很丰富的,字符串就是字符数组,在字符串里的每个字符是数组里的一个元素,字符串中空格也是字符,由于字符串是以向量的形式来存储的,因而可以通过它的下标对字符串中的任何一个元素进行访问•在MATLAB增加了符号运算工具箱,字符串成为符号运算表达式的基本构成单位•举例s1='MATLABSTRING';%生成字符串s1dim=size(s1)%显示s1的维数,1×13阶矩阵dim=13s2=['MA