第一章MATLAB语言基础MATLAB简介概述MATLAB是矩阵实验室(MAtrixLABoratory)的简称,是美国MathWorks公司出品的商业数学软件,和Mathematica、Maple并称为三大数学软件。主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域,包括MATLAB和Simulink两大部分产生与发展雏形——基于特征计算的程序库EISPACK和线性代数程序库LINPACK免费软件-MathWorks公司演变成为一种具有广泛应用前景的全新的计算机高级编程语言优势强大易用的科学计算语言全面的图形功能独立开放的平台实用的程序接口MATLAB窗口MATLAB窗口命令窗口(CommandWindow)命令窗口(CommandWindow)位于MATLAB默认桌面的中间,显示命令提示符为“”,可在“”之后输入命令,按下Enter键后MATLAB会立即显示结果并将结果自动赋予变量ans,例如:3.14*3^2ans=28.2600当遇到较为复杂的问题时,可以采用给变量赋值的方法,例如:可以用变量r来表示圆的半径,用变量S来表示圆的面积,百分号“%”是MATLAB中的注释符r=3%圆的半径r=3r=3S=3.14*r^2%求圆的面积SS=28.2600在命令窗口输入r=3并按下Enter键后,MATLAB会在命令窗口直接显示这条命令的计算结果,若要禁止显示计算的中间结果,则可以通过分号“;”来实现,例如:r=3;%使用分号禁止显示计算的中间结果S=3.14*r^2S=28.2600MATLAB窗口工作空间管理窗口(Workspace)工作空间是用于储存运算中的各种变量和结果的内存空间,而工作空间窗口则用于显示变量的名称、大小、字节数及数据类型等,我们可以通过工作空间窗口对变量进行观察、编辑、保存和删除等操作。需要注意的是,临时变量不会占用工作空间变量编辑器——三种方式打开变量编辑器用于编辑相应变量•在工作空间管理窗口双击该变量名;•鼠标单击变量名后单击工作空间管理窗口工具栏上的打开图标;•用鼠标选中变量名,单击鼠标右键弹出菜单,然后选择菜单中的相关操作。MATLAB窗口历史命令窗口(CommandHistory)用于记录用户在命令窗口执行过的命令行。包括已运行过的命令、函数、表达式、使用时间等信息。在历史命令窗口的命令是逆序排列的,昀早的排在昀下面,昀后的排在昀上面在历史命令窗口可进行命令历史的查找、检查等工作。用鼠标选中历史命令窗口中的命令行,单击右键弹出操作菜单,我们可以选择相应菜单项对这些历史命令进行复制、执行、删除等操作;双击这些命令可使它再次执行。当前目录窗口(CurrentDirectory)用于显示及设置当前工作目录,同时显示当前工作目录下的文件名、文件类型及目录的修改时间等信息用鼠标选中当前目录窗口下文件,单击右键可以进行打开(Open)、运行(RunFile)、重命名(Rename)、删除(Delete)等操作设置当前目录可以在当前目录窗口上方的输入栏中直接输入,或点击浏览器下拉按钮进行选择。还可以在命令窗口用cd命令进行设置,例如如下命令:cd(‘D:\Work‘)可将D盘上的Work目录设为当前工作目录MATLAB的路径搜索什么是路径搜索MATLAB有一个专门用于查找“.m”文件的路径搜索器,MATLAB定义了一系列文件路径的组合,缺省状态下包括当前路径和已安装的全部工具箱的路径。如果调用的函数或文件在搜索路径之外,MATLAB会认为此函数或文件不存在而返回错误信息。搜索顺序在工作空间中搜索是否有以该字符串为变量名的变量,有则返回该变量的值;搜索是否有同名的MATLAB内部函数,如果有,执行该内部函数;在当前目录中查找与该字符串同名的M文件,如果有,执行该文件;在搜索目录中查找与该字符串同名的M文件,如果有,执行该文件;如果在搜索目录中存在多个同名函数,则只执行搜索路径中的第一个函数编辑搜索路径的常用命令path%显示所有搜索路径addpath%增加目录到MATLAB搜索路径。rmpath%删除MATLAB搜索路径中的目录genpath%显示由所有搜索路径连接而成的一个长的字符串editpath%进入搜索路径设置对话框pathtool%同editpathMATLAB帮助系统帮助窗口该窗口是一个独立的交互式帮助浏览器,如图1-7所示。用户可以在命令窗口中输入helpdesk、helpwin或者doc命令来启动帮助窗口。通过帮助窗口中的帮助主题(Contents)、帮助索引(Index)和联机演示(Demos)可以浏览用户可能需要的内容,而在查询结果(SearchResults)中可以查看按用户要求得到的帮助信息列表help命令在命令窗口使用help组合命令。当用户知道函数名称想了解其具体用法时,可以在命令窗口使用help命令,调用方法是help函数名,例如:helpinvlookfor命令在命令窗口使用lookfor组合命令。注意,help命令要求函数名的精确匹配,而lookfor只要求与每个函数中的总结信息有匹配。所以当用户不知道函数的确切名称时可以使用lookfor命令,例如找矩阵求逆函数可以输入:lookforinverse模糊查询用户在命令窗口只须输入命令的前几个字母,然后键入Tab键MATLAB就会列出所有以这个字母开始的命令。MATLAB中的数据类型数值型数据MATLAB的数据通常都是以双精度数值来表示,不区分整数、实数、复数等,占8个字节(64位),其值域约为-1.7e308至1.7e308。同时考虑到一些特殊的应用,MATLAB还引入了无符号的8位整型数据unit8(),其值域为0~255。此外还有int8()、int16()、unit16()、unit32()等,每一个类型后面的数字表示其位数。在MATLAB中复数可以直接输入和计算,虚数单位用i或者j表示,i=sqrt(-1)在工作空间显示为0+1.0000i。MATLAB中复数可以用下面两种方式表达:z=a+b*i或z=r*exp(i*θ)例如:a=1+sqrt(3)*i;%复数的两种表示方法b=2*exp(i*pi/3);m=[13;57]+i*[24;68]%复数作为矩阵元素的表示方法n=[1+2i3+4i;5+6i7+8i]需要注意的是,当复数的虚部为一个确定的数(而不是变量或者矩阵)时,可以省略系数和虚数单位之间的“*”,即3+i*6可以写成3+6i,但是x+i*y不能写成x+yi;当复数作为矩阵元素时,复数内不能留有空格,否则可能会被当作两个元素处理而出错。例如k1为一向量,但是k2则是一个矩阵。k1=[3+4i;5+6i]k2=[3+4i;5+6i]MATLAB中的数据类型符号型数据Mathworks公司利用Maple函数库开发了MATLAB的符号数学工具箱(ExtendedSybolicMath),可进行解析数学运算,包括积分、微分、求和、多项式运算、求解方程等符号型数据则是在MATLAB中定义的特殊变量,它以字符串的形式表示,但又不同于普通字符串。其变量、表达式均为符号对象。符号对象使用sym或者syms生成,语法格式为symsarg1arg2….arg_props。通常,可以将函数包含在成对的单引号内,组成符号表达式,也可以在定义了符号变量以后,用符号变量建立符号表达式,为了方便且易于理解,一般推荐第二种方式,例如:symsxy;%利用syms生成符号对象z=sym('z');%利用sym生成符号对象m=sym('m','real');%声明符号对象m为实的n=sym('n','positive');%声明符号对象n为正的m=sym('m','unreal');%去掉m的附加属性A=[1x;yz]%生成符号矩阵f=sin(x)+cos(x);%建立符号表达式findsym(f);%查找符号表达式f中的所有自由变量MATLAB中的数据类型字符串型数据MATLAB作为一种高级语言,字符串运算功能也是很丰富的,字符串(Stringofcharacter)就是字符数组(Characterarray),一个字符串是存储在一个行向量中的文本,由单引号括起来(yesinput除外)。在字符串里的每个字符是数组里的一个元素,字符串中空格也是字符,由于字符串是以向量的形式来存储的,因而可以通过它的下标对字符串中的任何一个元素进行访问,例如:s1='MATLABSTRING';%生成字符串s1dim=size(s1)%显示s1的维数,为1×13阶矩阵dim=13s2=['MATLABSTRING'];%生成字符数组s2,与s1等价s1(2);%通过下标访问字符串,ans=AMATLAB中的数据类型多维数组数组也可以嵌套,一个数组的元素可以是另外一个数组,这样就构成了多维数组,图示即为一个三维数组,数组的第一维称为“行”,第二维称为“列”,第三维称为“页”,我们可以通过按页输入的方法构造一个三维数组并进行运算A=[12;13];B(:,:,1)=A;%输入矩阵B的第一页B(:,:,2)=A^2;%输入矩阵B的第二页B(:,:,3)=A^2;%输入矩阵B的第三页C=ones(2,2,3);%矩阵C为为2×2×3维全1矩阵D=C./B%三维矩阵间的./运算D(:,:,1)=1.00000.50001.00000.3333D(:,:,2)=0.33330.12500.25000.0909D(:,:,3)=0.33330.12500.25000.0909MATLAB中的数据类型元胞数组元胞数组可以看做是多维数组的直接扩展,其存储形式类似于矩阵,但元胞数组的元素不一定是数值,可以是MATLAB支持的任意存储类型,并且各元素的类型也可以不尽相同。其元素就被称为“元胞”(cell)。元胞数组也用下标标识,但元胞数组中有元胞元素和元胞元素的内容两个概念,用圆括号表示元胞元素,用大括号来包含元胞元素的内容,cell{i,j}即表示元胞数组cell的第i行,第j列的存储内容,亦即元胞元素cell(i,j)的内容。一个直接的例子就是在直接赋值的过程中,与在矩阵的定义中使用的中括号不同,元胞数组元素的内容要用大括号来包含,元素之间由逗号隔开A=[25;42];%矩阵的定义使用的是中括号B={A,[69];'test',[16;74]}%元胞数组的定义使用的是大括号B=%仅显示元胞数组中的存储量类型[2x2double][1x2double]'test'[2x2double]C(1,1)={[13;57]};%C(1,1)代表元胞元素,其内容是一矩阵C{1,2}=[24;68];%C{1,2}代表C(1,2)的内容,为一矩阵celldisp(C)%显示元胞数组C的具体内容C{1}=1357C{2}=2468MATLAB中的数据类型结构型数组结构型数组与元胞数组类似,不同之处在于结构型数组利用指针方式传递数据。在结构数组的直接赋值定义过程中,需要指出结构中的属性名,并且以指针操作符“.”来连接结构型数组与属性名,在命令行提示符后输入结构型数组的名称,则可显示其属性以及属性值。例如:student_1.name='linhong';student_1.stature=182;student_1.weight=79;student_1student_1=name:'linhong'stature:182weight:79MATLAB语言中的变量MATLAB中变量区别于其他编程语言的特点MATLAB表达式中可以使用矩阵形式;MATLAB中不需要预先声明变量的类型和维数,MATLAB会根据对新变量的操