1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,MATLAB基础与应用教程,授课人 朱荣光,单 位 石河子大学机械电气工程学院,目录,Matlab基础知识 4学时,Matlab程序设计,图形绘制 2学时,线性代数中的数值计算 2学时,数据处理与多项式计算 2学时,数值微积分与常微分方程求解 2学时,符号计算 2学时,图形句柄,图形用户界面设计,Simulink仿真环境,Matlab应用接口,Matlab的学科应用 2学时,第1章MATLAB基础知识,MATLAB是MathWorks公司开发的科学与工程计算软件,它以矩阵运算为基础,把计算、绘图及动态系统仿真等功能有机地融合在
2、一起。同时,它又具有程序设计语言的基本特征。目前,MATLAB在工程计算与数值分析、控制系统设计与仿真、信号处理、图像处理、金融建模设计与分析等学科领域都有着十分广泛的应用。,【本章学习目标】,了解MATLAB的特点和主要功能。,熟悉启动和退出MATLAB的方法。,熟悉MATLAB的操作环境。,掌握建立矩阵的方法。,掌握MATLAB数据对象的特点和基本的运算规则。,1.1 MATLAB的发展与主要功能,MATrix LABoratory(矩阵实验室),1.1.1 MATLAB的发展,Cleve Moler编写的使用Linpack 和Eispack的接口程序MATLAB,1992MATLAB 4
3、0版,1997MATLAB 5.0版,2000年10月MATLAB 6.0版,2004年7月MATLAB 7.0版,2005年9月MATLAB 7.1版,随后每年发布两次以年份命名的版本,如R2006a(MATLAB 7.2)、R2006b(MATLAB 7.3)、R2007a(MATLAB 7.4)、R2007b(MATLAB 7.5)、R2008a(MATLAB 7.6)和最新的版本R2008b(MATLAB 7.7)。,1.1.2 MATLAB的主要功能1数值计算和符号计算功能,例如,求解线性方程组:,在MATLAB命令窗口输入命令:,a=2,3,-1;3,-5,3;6,3,-8;,b
4、7;8;9;,x=inv(a)*b,也可以通过符号计算来解此方程,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),2绘图功能,例如,分别绘制函数,y,=300sin,x,/,x,和,y,=,x,2的曲线,x=-20:0.1:20;,plot(x,300*sin(x)./x,:,x,x.2);,3程序设计语言功能,MATLAB是解释性语言,程序执行速度较慢,而且不能脱离MATLAB环境而独立运行。MathWorks公司提供了将MATLAB源程序编译为独立于MATLAB集成环境运行的EX
5、E文件以及将MATLAB程序转化为C语言程序的编译器。,4扩展功能,MATLAB包含两部分内容:基本部分和各种可选的工具箱。,基本部分构成了MATLAB的核心内容,也是使用和构造工具箱的基础。,工具箱扩展了MATLAB的功能。,功能性工具箱,学科性工具箱,1.2 MATLAB的集成开发环境,1.2.1 MATLAB操作界面,1主窗口,2命令窗口,命令窗口(Command Window)用于输入命令并显示除图形以外的所有执行结果。,一般来说,一个命令行输入一条命令,命令行以回车结束。但一个命令行也可以输入若干条命令,各命令之间以逗号分隔,若前一命令后带有分号,则逗号可以省略。例如:,x=720,
6、y=86,x=,720,y=,86,x=720;y=86,y=,86,如果一个命令行很长,一个物理行之内写不下,可以在第1个物理行之后加上3个小黑点并按下回车键,然后接着下一个物理行继续写命令的其他部分。3个小黑点称为续行符,即把下面的物理行看作该行的逻辑继续。例如:,z=1+1/(1*2)+1/(1*2*3)+1/(1*2*3*4)+,1/(1*2*3*4*5),3工作空间窗口,工作空间(Workspace)是MATLAB用于存储各种变量和结果的内存空间。,4当前目录窗口,对文件进行有效的组织和管理,当前目录(Current Directory)是指MATLAB运行时的工作目录,只有在当前目
7、录或搜索路径下的文件、函数才可以被运行或调用。如果没有特殊指明,数据文件也将存放在当前目录下。,5命令历史窗口,自动保留自安装起所有用过的命令的历史记录,并且还标明了使用时间,从而方便用户查询。而且,通过双击命令可进行历史命令的再运行。,6Start按钮,1.2.2 MATLAB的搜索路径,MATLAB的文件是通过不同的路径进行组织和管理的。当用户在命令窗口输入一条命令后,MATLAB将按照下列顺序搜索所输入的命令。,检查该命令是不是一个变量。,检查该命令是不是一个内部函数。,检查该命令是否为当前目录下的M文件。,检查该命令是否为MATLAB搜索路径中其他目录下的M文件。,2设置搜索路径,(1
8、用path命令设置搜索路径,例如,将用户目录c:mydir加到搜索路径下:,path(path,e:matlabwork),(2)用对话框设置搜索路径,在MATLAB的File菜单中选择Set Path命令或在命令窗口执行pathtool命令,1.3 MATLAB的帮助功能,1.3.1 帮助界面,进入MATLAB帮助界面可以通过以下3种方法。,单击MATLAB主窗口工具栏中的Help按钮。,在命令窗口中输入“helpwin”、“helpdesk”或“doc”命令。,选择Help菜单中的“MATLAB Help”选项。,1.3.2 帮助命令,1help命令,help命令是查询函数语法的最基本方
9、法,查询信息直接显示在命令窗口。在命令窗口中直接输入help命令将会显示当前帮助系统中所包含的所有项目,即搜索路径中所有的目录名称。,同样,可以通过help加函数名来显示该函数的帮助说明。例如,为了显示magic函数的使用方法与功能,help magic,2lookfor命令,help命令可以帮助用户了解函数的用法。例如,输入命令,lookfor fourier,3其他帮助命令,1.3.3 演示系统,在帮助窗口中选择演示系统(Demos)选项卡,然后在其中选择相应的演示模块,或者在命令窗口输入“demos”,或者选择主窗口“Help”菜单中的“Demos”子菜单,打开的演示系统如图1.8所示。
10、1.4 MATLAB的变量和数据操作,1.4.1 变量与赋值,1变量命名,在MATLAB 7.X中,变量名是以字母开头,后接字母、数字或下画线的字符序列,最多63个字符。例如,x、x_1、xy12,在MATLAB中,变量名区分字母的大小写。例如addr、Addr和ADDR表示3个不同的变量。,2赋值语句,MATLAB赋值语句有两种格式:,(1)变量=表达式;,(2)表达式,在第1种语句形式下,MATLAB将右边表达式的值赋给左边的变量,而在第2种语句形式下,将表达式的值赋给MATLAB的预定义变量ans。,在语句的最后加分号,那么,MATLAB仅仅执行赋值操作,不再显示运算的结果。,注释以%
11、开头,【例,1.1,】当时,计算表达式 的值,并将结果赋给变量,y,,然后显示出结果。,在MATLAB命令窗口分别输入命令:,x=sqrt(1+pi);,y=(exp(x)+log(abs(sin(x)2-sin(x*x)/(x-5*i),y=,0.5690+1.3980i,其中,pi和i都是MATLAB定义的变量,分别代表圆周率和虚数单位。,3预定义变量,1.4.2 变量的管理,1内存变量的显示与删除,显示在MATLAB工作空间中已经驻留的变量名清单。,who,whos,whos在给出驻留变量名的同时,还给出它们的维数、所占字节数以及变量的类型。,删除MATLAB工作空间中的变量,clear
12、MATLAB工作空间窗口专门用于内存变量的管理。,变量编辑器,2内存变量文件,利用MAT文件可以把当前MATLAB工作空间中的一些有用变量长久地保留下来。,MAT文件是MATLAB保存数据的一种标准格式二进制文件,扩展名是.mat。,MAT文件的生成和装入,save文件名 变量名表 -append-ascii,load文件名 变量名表 -ascii,假定变量,a,和,b,存在于MATLAB工作空间中,输入以下命令便可将,a,和,b,保存于当前目录的mydata.mat文件中:,save mydata a b,把mydata.mat中的内容装入MATLAB工作空间:,load mydata,1
13、4.3 数据的输出格式,用“format”命令设置数据输出格式,format 格式符,“format”命令只影响数据输出格式,而不影响数据的计算和存储。,例如输入为,x=4/3 1.2345e-6,在各种不同的格式符下的输出为,短格式(short),:,1.3333 0.0000,短格式,e,方式,(short e),:,1.333e+00 1.2345e-06,长格式,(long),:,1.33333333333333 0.00000123450000,长格式,e,方式,(long e),:,1.33333333333333e+000 1.23450000000000e-006,银行格式,
14、bank),:,1.33 0.00,十六进制格式,(hex),:,3ff5555555555555 3eb4b6231abfd271,+格式(+):+,1.5 MATLAB矩阵及其基本运算,1.5.1 矩阵的生成,在MATLAB中,生成矩阵时无须对矩阵的维数和类型进行说明,MATLAB会根据用户所输入的内容自动进行配置。,1直接输入法,将矩阵的所有元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。例如,输入命令:,A=1,2,3;4,5,6;7,8,9,A=,1 2 3,4 5 6,7 8 9,矩阵元素也可以是表达式,MATLAB将
15、自动计算结果。例如:,B=10,5-sqrt(7),sin(pi/2);7,4*8,abs(-7),在MATLAB中,矩阵元素可以是复数。例如,建立复数矩阵:,B=1,2+7i,5*sqrt(2)*i;3,2/5,3.5+6i,也可以分别建立实部矩阵和虚部矩阵,再合起来构成复数矩阵。例如:,R=1,2,3;4,5,6;,I=1.1,2.2,3.3;4.4,5.5,6.6;,ri=R+i*I,2利用M文件建立矩阵,对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件,【例,1.2,】利用M文件建立mydata矩阵。,(1)启动有关文本编辑程序或MATLAB的M-file编辑器(见第2章),并输
16、入待建矩阵:,mydata=1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9;,2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9;,3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9;,(2)把输入的内容存盘(设文件名为matfund.m)。,(3)在MATLAB命令窗口中输入matfund,即运行该M文件,就会自动建立一个名为mydata的矩阵,可供以后使用。,3利用数据文件建立指定矩阵,用户能够通过load命令,将外部数据文件中的内容调入到工作空间中创建矩阵,外部文件的扩展名为.dat。,例如,利用文本编辑器创建一个数据文件t
17、est.dat,包含下列数据:,2 4 6 8 6,3 5 6 7 3,2 5 1 2 5,在命令窗口输入:,load test.dat,test,运行结果为,4利用已建好的矩阵建立更大的矩阵,大矩阵可由已建好的小矩阵拼接而成。例如:,A=1,2,3;4,5,6;7,8,9;,B=11:13;14:16;17:19;,A=1,2,3;4,5,6;7,8,9;,C=A,B;B,A,1.5.2 冒号表达式,在MATLAB中利用冒号可以产生行向量。冒号表达式的一般格式为,a:b:c,其中,,a,为初始值,,b,为步长,,c,为终止值(,c,a,)。冒号表达式可产生一个由,a,开始到,c,结束,以步长
18、b,自增的行向量。例如:,t=0:2:10,t=,0 2 4 6 8 10,在MATLAB中,还可以用linspace函数产生行向量。其调用格式为,linspace(a,b,n),其中,a,和,b,是生成向量的第1个和最后一个元素,,n,是元素总数。,当,n,省略时,自动产生100个元素。显然,linspace(a,b,n)与a:(ba)/(n1):b等价。例如:,x=linspace(0,10,6),x=,0 2 4 6 8 10,1.5.3 矩阵的拆分,1矩阵元素,对矩阵的单个元素操作。例如,如果想将矩阵,A,的第2行第3列的元素赋为76,则可以通过下面语句来完成:,A(2,3)=76,
19、这时将只改变该元素的值,而不影响其他元素的值。,在MATLAB中,也可以采用矩阵元素的,序号,来引用矩阵元素。矩阵元素的序号就是相应元素在内存中的排列顺序。矩阵元素按列编号,先第1列,再第2列,依次类推。例如:,A=10,20,30;40,50,60;,A(3),序号(Index)与下标(Subscript)是一一对应的,以,m,n,矩阵,A,为例,矩阵元素,A,(,i,j,)的序号为(,j,1)*,m,+,i,。其相互转换关系也可利用sub2ind和ind2sub函数求得。,size(A,),函数返回包含两个元素的向量,分别是矩阵,A,的行数和列数,length(A,),:给出行数和列数中的
20、较大者,(1)利用冒号表达式获得子矩阵,A(m,n)表示取,A,矩阵第,m,行、第,n,列的元素,A(m,:)表示取,A,矩阵第,m,行的全部元素,A(:,n)表示取,A,矩阵的第,n,列全部元素。,A(m1:m2,:)表示取,A,矩阵第,m,1,m,2行的全部元素,A(:,n1:n2)表示取,A,矩阵第,n,1,n,2列的全部元素,A(m1:m2,n1:n2)表示取,A,矩阵第,m,1,m,2行内,并在第,n,1,n,2列中的所有元素。,A(:)将矩阵,A,每一列元素堆叠起来,成为一个列向量,(2)利用空矩阵删除矩阵的元素,在MATLAB中,空矩阵是指无任何元素的矩阵,表示形式为。给变量x赋
21、空矩阵的语句为,x=,将某些元素从矩阵中删除,采用将其置为空矩阵的方法就是一种有效的方法。例如:,A=1 2 3 4 5 6;7 8 9 10 11 12;13 14 15 16 17 18;,A(:,2 4)=,其中第2条命令将删除,A,的第2列和第4列元素。,1.5.4 算术运算,1基本算术运算,MATLAB的基本算术运算有:+(加)、(减)、*(乘)、/(右除)、(左除)、(乘方)。,(1)矩阵加减运算,运算规则是:若,A,和,B,矩阵的维数相同,则可以执行矩阵的加减运算,,A,和,B,矩阵的相应元素相加减。如果,A,与,B,的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的
22、维数不匹配。,一个标量也可以和其他不同维数的矩阵进行加减运算。例如:,x=2,-1,0;3,2,-4;,y=x-1;,y=y+x,(2)矩阵乘法,矩阵,A,和,B,进行乘法运算,要求,A,的列数与,B,的行数相等,或称,A,和,B,两矩阵维数相容。如果两者的维数不相容,则将给出错误信息,提示用户两个矩阵是不可乘的。例如:,A=1,2,3;4,5,6;,B=A*A,?Error using=mtimes,Inner matrix dimensions must agree.,在MATLAB中,还可以进行矩阵和标量相乘,标量可以是乘数也可以是被乘数。矩阵和标量相乘是矩阵中的每个元素与此标量相乘。,
23、3)矩阵除法,在MATLAB中,有两种矩阵除法运算:和/,分别表示左除和右除。如果,A,矩阵是非奇异方阵,则,A,B,和,B,/,A,运算可以实现。,A,B,等效于,A,的逆左乘,B,矩阵,也就是inv(A)*B,而,B,/,A,等效于,A,矩阵的逆右乘,B,矩阵,也就是B*inv(A)。,(4)矩阵的乘方,一个矩阵的乘方运算可以表示成,A,x,要求,A,为方阵,,x,为标量。,2点运算,两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。点运算符有.*、./、.和.。例如:,A=1,2,3;4,5,6;7,8,9;,B=-1,0,1;1,-1,0;0,1,1;,C=A.
24、B,C=,-1 0 3,4 -5 0,0 8 9,如果,A,、,B,两矩阵具有相同的维数,则,A,./,B,表示,A,矩阵除以,B,矩阵的对应元素。,B,.,A,等价于,A,./,B,。,3MATLAB常用数学函数,(1)函数的自变量规定为矩阵变量,运算法则是将函数逐项作用于矩阵的元素上,因而运算的结果是一个与自变量同维数的矩阵。例如:,y=sin(0:pi/2:2*pi),y=,0 1.0000 0.0000 -1.0000 -0.0000,y=abs(y),y=,0 1.0000 0.0000 1.0000 0.0000,(,2)abs函数可以求实数的绝对值、复数的模、字符串的ASCII
25、码值。,x=-3.14,3+4i;,abs(x),ans=,3.1400 5.0000,(,3,)用于取整的函数有,fix,、,floor,、,ceil,、,round,,要注意它们的区别。例如:,x=fix(13.37),floor(13.37),ceil(13.37),round(13.37),x=,13 13 14 13,x=fix(-13.67),floor(-13.67),ceil(-13.67),round(-13.67),x=,-13 -14 -13 -14,(4)rem与mod函数的区别。rem(x,y)和mod(x,y)要求,x,,,y,必须为相同大小的实矩阵或为标量。当,y
26、0时,rem(x,y)=xy.*fix(x./y),而mod(x,y)=x y.*floor(x./y),当,y,=0时,rem(x,0)=NaN,而mod(x,0)=x。显然,当,x,,,y,同号时,rem(x,y)与mod(x,y)相等。rem(x,y)的符号与,x,相同,而mod(x,y)的符号与,y,相同。例如:,x=5;,y=3;,rem(x,y),mod(x,y),ans=,2 2,x=-5;,y=3;,rem(x,y),mod(x,y),ans=,-2 1,1.5.5,关系运算,MATLAB,提供了,6,种关系运算符:,(小于)、,(大于)、,=,(大于或等于)、,=,(等于)
27、不等于)。,(,1)当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0。例如:,A=5,A=,5,A=A=10,A=,0,(2)当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素的比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。,(3)当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的运算结果是一个维数与矩阵相同的矩阵,它的元素由0或1组成。,1.5.6 逻辑运算,MATLAB提供了3种逻辑运算
28、符:&(与)、|(或)和(非)。此外,MATLAB还提供了4个逻辑运算函数:and(a,b)、or(a,b)、not(a)和xor(a,b)。,在逻辑运算中,确认非零元素为真,用1表示;零元素为假,用0表示。设参与逻辑运算的是两个标量a和b,那么,逻辑运算符和逻辑运算函数的含义如下。,a,&,b,或函数and(,a,b,)表示,a,和,b,作逻辑与运算,当,a,、,b,全为非零时,运算结果为1,否则为0。,a,|,b,或函数or(,a,b,)表示,a,和,b,作逻辑或运算,当,a,、,b,中只要有一个非零,运算结果为1。,a,和函数not(,a,)表示对,a,作逻辑非运算,当,a,是零时,运算
29、结果为1;当,a,非零时,运算结果为0。,函数xor(,a,b,)表示,a,和,b,作逻辑异或运算,当,a,、,b,的值不同时,运算结果为1,否则运算结果为0。,(1)若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。最终运算结果是一个与原矩阵同维的矩阵,其元素由1或0组成。例如:,A=23,54,12,6,-78;,B=5,324,7,-43,76;,C1=A10&B10,B=10&A=a%找小写字母的位置,ch(k)=ch(k)-(a-A);%将小写字母变成相应的大写字母,char(ch),length(k)%统计小写字母的个数,ans=,14,把字符串的内容作为对应的MATLAB语句来执行。,eval(t),其中,t,为字符串。例如:,x=3;,y=4;,m=sqrt(x*x+y*y),x+y;,y=eval(m),y=,5 7,(1)若字符串中的字符含有单撇号,则该单撇号字符应用两个单撇号来表示。例如:,disp(Its a book.),将输出:,Its a book.,(2)可以用字符串向量的形式连接多个字符串,即用中括号括起来。例如:,x=8;,y=10;,disp(num2str(x),+,num2str(y),=,num2str(x+y),其中,disp函数的自变量是一个长字符串。输出为,8+10=18,






