MATLAB仿真技术与应用_第1页
MATLAB仿真技术与应用_第2页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLAB仿真技术与应用MATLAB仿真技术与应用第1章MATLAB介绍第1章MATLAB介绍·PAGE54··PAGE55·第1章MATLAB介绍1.1MATLAB概述在科学研究和工程应用中,往往要进行大量的数学计算,其中包括矩阵运算。这些运算一般来说难以用手工精确和快捷地进行,而要借助计算机编制相应的程序做近似计算。目前流行用Basic、Fortran和C语言编制计算程序,既需要对有关算法有深刻的了解,还需要熟练地掌握所用语言的语法及编程技巧。对多数科学工作者而言,同时具备这两方面的技能有一定困难。通常,编制程序也是繁杂的,不仅消耗人力与物力,而且影响工作进程和效率。为克服上述困难,美国Mathworks公司于1967年推出了MATrix

LABoratory(缩写为MATLAB)软件包,可用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。不过,MATLAB作为一种新的计算机语言,要想运用自如,充分发挥它的威力,也需先系统地学习它。但由于使用MATLAB编程运算与人进行科学计算的思路和表达方式完全一致,所以不像学习其他高级语言,如Basic、Fortran和C等那样难于掌握。实践证明,读者可在几十分钟的时间内学会MATLAB的基础知识,在短短几个小时的使用中就能初步掌握它,从而能够进行高效率和富有创造性的计算。MATLAB大大降低了对使用者的数学基础和计算机语言知识的要求,而且编程效率和计算效率极高,还可在计算机上直接输出结果和精美的图形副本,所以它的确是一高效的科研助手。MATLAB自推出后即风行美国,流传广泛。MATLAB和Mathematica、Maple并称为三大数学类科技应用软件,其中MATLAB在数值计算方面的功能首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等功能,主要应用于工程计算、控制设计、信号处理与通信、图像处理、信号检测、金融建模设计与分析等领域。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C、Fortran等语言完成相同的事情简捷得多,并且Mathworks公司也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。MATLAB在新的版本中也加入了对C、Fortran、C++、Java的支持,可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多MATLAB的爱好者都编写了一些经典的程序,用户直接进行下载即可使用。

1.2MATLAB的应用与功能1.2.1MATLAB的应用MATLAB产品族可以用来进行以下各种工作:数值分析。数值和符号计算。工程与科学绘图。控制系统的设计与仿真。数字图像处理技术。数字信号处理技术。通信系统设计与仿真。财务与金融工程。MATLAB的应用范围非常广,包括信号和图像处理、通信、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。1.2.2MATLAB的功能MATLAB之所以能如此迅速地普及,显示出强大的生命力,是由于它有着不同于其他语言的特点。被称作第四代计算机语言的MATLAB,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。MATLAB最突出的特点就是简洁。MATLAB用更直观的、更符合人们思维习惯的代码,代替了C、C++和Fortran语言的冗长代码。MATLAB给用户提供的是最直观、最简洁的开发环境。1.编程效率高它是一种面向科学与工程计算的高级语言,允许用数学形式的语言编写程序,且比Basic、Fortran和C等语言更加接近我们书写计算公式的思维方式,用MATLAB编写程序犹如在演算纸上排列出公式与求解问题。因此,MATLAB语言也可通俗地称为演算纸式科学算法语言。由于它编写简单,所以编程效率高,易学易懂。2.友好的工作平台和编程环境MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面,包括MATLAB桌面和命令窗口、命令历史窗口、编辑器和调试器、帮助窗口、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大地方便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因的分析。3.扩充能力强高版本的MATLAB语言有丰富的库函数,在进行复杂的数学运算时可以直接调用,而且MATLAB的库函数同用户文件在形成上一样,所以用户文件也可作为MATLAB的库函数来调用。因而,用户可以根据自己的需要方便地建立和扩充新的库函数,以便提高MATLAB的使用效率和扩充它的功能。另外,为了充分利用Fortran、C等语言的资源,包括用户已编好的Fortran、C语言程序,可以通过建立Mex文件的形式,混合编程,方便地调用有关的Fortran、C语言的子程序。4.出色的图形处理功能MATLAB自产生之日起就具有方便的数据可视化功能,可以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。高层次的作图包括二维和三维的可视化、图像处理、动画和表达式作图,可用于科学计算和工程绘图。新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(如图形的光照处理、色度处理以及四维数据的表现等)方面同样表现了出色的处理能力。同时对一些特殊的可视化要求,如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。5.高效方便的矩阵和数组运算MATLAB语言像Basic、Fortran和C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变地照搬到数组间的运算,有些如算术运算符只要增加“.”即可用于数组间的运算。另外,它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域的问题时,显得大为简捷、高效、方便,这是其他高级语言所不能比拟的。在此基础上,高版本的MATLAB已逐步扩展到科学及工程计算的其他领域。因此,不久的将来,它一定能成为名副其实的“万能演算纸式的”科学算法语言。6.实用的程序接口和发布平台新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。允许用户编写可以和MATLAB进行交互的C或C++语言程序。另外,MATLAB网页服务程序还允许在Web应用中使用自己的MATLAB数学和图形程序。MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。7.功能强大的工具箱MATLAB工具箱包括两个部分:核心工具箱(核心部分中有数百个核心内部函数)和各种可选的工具箱。其核心工具箱又可分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能、图示建模仿真功能、文字处理功能以及与硬件实时交互功能,可用于多种学科。而学科性工具箱专业性比较强,如ControlSystem、SignalProcessing、NonlinearControl、Optimization等,这些工具箱都是由该领域内的高水平专家编写的,用户可以使用它们直接进行较高难度的研究工作。1.3MATLAB的安装与激活MATLABR2010a在安装过程上与MATLABR2008的安装与激活方法基本相同,都增加了对MATLAB的激活环节。具体安装步骤如下:(1)将MATLABR2010a的安装盘放入CD-ROM驱动器,系统将自动运行程序,进入初始化界面,如图1-1所示。(2)启动安装程序后显示的安装界面如图1-2所示。选中InstallusingtheInternet单选按钮,再单击Next按钮。图1-1MATLABR2010a安装的启动界面图1-2(3)弹出如图1-3所示的License

Agreement(查看软件注册协议)对话框,若同意Mathworks公司的安装许可协议,选中Yes单选按钮,再单击Next按钮。(4)弹出如图1-4所示的ProvideInstallationInformation对话框,输入软件外包装封面或安装许可文件内提供的钥匙,单击Next按钮。图1-3LicenseAgreement对话框图1-4ProvideInstallationInformation对话框(5)若输出正确的钥匙,系统将弹出如图1-5所示的InstallationType对话框,可以选择Typical或Custom安装类型,单击Next按钮。如果选择Typical,MATLABR2010a安装工具默认安装所有工具箱及组件,此时所需空间超过8GB。图1-5InstallationType对话框(6)默认路径为C:\ProgramFile\MATLAB\R2010a。用户可以通过单击Browser按钮选文件夹,安装程序自动建立,此时FolderSelection对话框的下部将显示安装硬盘剩余空间及软件安装所需空间大小(图示为全部安装所需软件大小)。单击Next按钮,如图1-6所示。图1-6FolderSelection对话框(7)系统将弹出如图1-7所示的Confirmation对话框,可以看到用户默认安装的MATLAB组件、安装文件夹等相关信息。单击Install按钮,安装开始。图1-7Confirmation对话框(8)软件在安装过程中将显示安装进度条,如图1-8所示。用户需要等待产品组件安装完成,同时可以查看正在安装的产品组件及安装剩余的时间。安装完成后弹出如图1-9所示的ProductConfigurationNotes对话框。图1-8安装进度对话框(9)在安装完产品组件之后,Mathworks公司需要用户进行产品配置。在如图1-9所示的ProductConfigurationNotes对话框中单击Next按钮。图1-9ProductConfigurationNotes对话框(10)系统弹出如图1-10所示的MathWorksSoftwareActivation对话框,用户可以选择ActivateautomaticallyusingtheInternet(recommended)方式,也可以选择ActivatemanuallywithouttheInternet方式。如果用户有离线激活文件,可选中ActivatemanuallywithouttheInternet单选按钮,再单击Next按钮。图1-10MathWorksSoftwareActivation对话框(11)系统弹出ActivationComplete对话框,单击Finish按钮,即可完成MATLAB的安装与激活,如图1-11所示。图1-11ActivationComplete对话框

1.4MATLAB的工作界面按前面安装好的MATLAB,其启动的初始界面如图1-12所示。从图1-12中可以看出,MATLAB的默认界面由命令窗口(CommandWindow)、命令历史窗口(CommandHistory)和工作空间(Workspace)等组成。图1-12MATLAB的初始界面1.4.1命令窗口CommandWindow(命令窗口)是用户与MATLAB交互的主窗口,用户可以将其放大。Window窗口,如图1-13所示。再次选择Desktop菜单下的DockCommandWindow命令,CommandWindow窗口恢复到刚打开的默认状态。MATLAB将当前窗口的标题栏置为深蓝色,其他非当前窗口为灰色。如果初次使用MATLABR2010a,在CommandWindow菜单栏下有一行提示“NewtoMATLAB?”,如果用户初次使用该软件,可以单击WatchthisVideo、seeDemos或readGettingStarted去学习MATLAB软件的基本操作方法。如果用户对MATLAB软件的基本操作方法足够熟悉,可以单击“×”按钮将其关闭。图1-13CommandWindow窗口在CommandWindow窗口中,“>>”是命令提示符,在它之后可以直接输入命令,如图1-13所示。MATLAB将命令执行结果显示在窗口中,便于用户查看。MATLAB对窗口中的命令是逐行解释执行,如果有多条命令,可以逐行输入,也可以在同一行中输入多条命令,它们之间用逗号隔开,还可以采用将在下面介绍的M文件输入。当一行命令太长无法在窗口一次输入完时,可以使用“...”将命令续行。常用的窗口操作命令有clear(清除工作空间变量)、clc(清除命令窗口的内容但不清除工作空间变量)和clf(清除当前图形窗口的内容),键盘方向键“↑”和“↓”可以用来搜寻CommandWindow执行过的命令。熟练使用窗口操作的基本命令,有助于加快编程速度,其他窗口操作命令将在下面章节陆续介绍。1.4.2命令历史窗口图1-14CommandHistory窗口CommandHistory(命令历史)窗口主要用于显示最近命令窗口运行过的函数日志,并可以按照命令使用时间聚合。图1-14显示了前面执行语句的历史记录。在命令历史窗口中可以执行先前运行过的函数语句。如果执行单条函数语句,直接双击窗口中的函数语句即可;如果执行多条函数语句,使用Shift或Ctrl键配合鼠标左键选中多条函数语句,然后右击,在弹出的快捷菜单中选择EvaluateSelection命令即可;如果将待执行的多条语句生成M文件,方法是使用Shift或Ctrl键配合鼠标左键选中多条函数语句,然后右击,在弹出的快捷菜单中选择CreateM-File命令,此时系统启动编辑器并打开一个包含选中函数语句的M文件,其可以直接运行。如果要删除命令历史记录,选中要删除的语句,右击,在弹出的快捷菜单中选择相应的命令即可。图1-14CommandHistory窗口1.4.3工作空间语句运行时,其变量即被加入到工作空间中。工作空间正是这样一个集合,包含了MATLAB程序运行中的变量和结果、MATLAB提供的常量等。图1-15Workspace窗口需要注意的是,命令窗口执行的命令和脚本文窗口,如图1-15所示。单击Workspace图1-15Workspace窗口在MATLAB中可以利用who和whos命令来查看当前工作空间,其中who仅给出变量的名称;而whos则给出所有变量的详细信息。工作空间(Workspace)具有如下优点:可以将工作空间中的所有变量保存到一个文件中,待系统启动后再将文件重新装载。这样,就保证了不要因为系统的关闭而导致工作空间变量的丢失。可以编辑任一变量。双击工作空间中的任一变量,可打开ArrayEditor窗口,此时即可查看该变量的具体值,甚至改变其值。切换基本工作空间和函数的工作空间。在函数调试状态下,可以通过Stack域选择查看是基本工作空间变量还是函数的工作空间变量。1.4.4帮助窗口帮助文档对于使用者来说作用非常大,掌握和获取帮助的不同方法会给操作者带来极大的方便。1.图形化帮助窗口用MATLAB的帮助窗口可以获取在线帮助。打开帮助窗口的方法如下:(1)单击桌面工具栏中的问号按钮。(2)按F1键。(3)在主窗口中单击Help菜单下的Demos、AboutMATLAB、UsingtheDesktop、UsingtheCommandWindow中的任一命令。(4)在命令窗口中输入helpwin、helpdesk、doc,都可以打开帮助窗口。Help(帮助)窗口如图1-16所示。图1-16Help窗口MATLABR2010a的帮助窗口与以往MATLAB的帮助窗口有所不同,以往的MATLAB帮助窗口中有4个标签,分别为Contents(帮助主题)、SearchIndex(索引帮助)、Results(结果帮助)和Demos(演示帮助)。而在图1-16所示的MATLABR2010a的帮助窗口中只有两个标签,分别为Contents(帮助主题)、SearchResults(索引结果)。当知道要查寻内容的所属主题或想要学习某个主题的内容时,可以用Contents标签。知道了某个问题的关键词时,多数用SearchResults标签,这时一般在Search文本编辑框中输入关键词即可查寻。用Contents标签获取帮助时,帮助窗口分为左右两个小窗口,单击左边小窗口中的某个主题,就会在右边的小窗口中显示出相应的帮助内容。图1-17所示就是在左边的小窗口中选择MATLAB选项下的Functions子选项下的Mathematics子选项下的ElementaryMath主题,在右边的小窗口中显示出这一主题下的帮助内容。图1-17帮助主题图1-18sin函数帮助界面2.帮助命令函数对于熟悉MATLAB的用户,最简洁、快捷的方式是在命令窗口通过帮助命令对特定的内容,如某个函数的功能和使用方法,进行快速查询。这些命令包括help系列、lookfor系列和其他常用的帮助命令。1)help系列help系列的帮助命令有help、help+函数(类)名、helpwin及helpdesk,其中后两个命令是用来调用联机帮助图形窗口的。下面将介绍前面两个命令。(1)help命令help命令是最常用的命令。在命令窗口中直接输入help命令将会显示当前的帮助系统中所包含的所有项目,以及搜索路径中所有的目录名称。命令如下:>>helpHELPtopics:MyDocuments\MATLAB -(Notableofcontentsfile)matlab\general -Generalpurposecommands.matlab\ops -Operatorsandspecialcharacters.matlab\lang -Programminglanguageconstructs.matlab\elmat -Elementarymatricesandmatrixmanipulation.matlab\randfun -Randommatricesandrandomstreams.matlab\elfun -Elementarymathfunctions.matlab\specfun -Specializedmathfunctions.matlab\matfun -Matrixfunctions-numericallinearalgebra.matlab\datafun -DataanalysisandFouriertransforms.matlab\polyfun -Interpolationandpolynomials.…………xpc\xpcdemos -xPCTarget--demosandsamplescriptfiles.kernel\embedded -xPCTargetEmbeddedOption>>helphelpHELPDisplayhelptextinCommandWindow.HELP,byitself,listsallprimaryhelptopics.EachprimarytopiccorrespondstoadirectorynameontheMATLABPATH.…………Overloadedmethods:cgmathsobject/helpcvtest/helpcvdata/helpfdesign.helpReferencepageinHelpbrowserdochelp(2)help+函数(类)名在实际应用中,这是最有用的一个帮助命令,可以帮助用户对函数进入深入学习和使用。help+函数(类)名例如,在命令窗口中输入如下命令:>>helpelfunElementarymathfunctions.Trigonometric.sin-Sine.sind-Sineofargumentindegrees.……Roundingandremainder.fix-Roundtowardszero.floor -Roundtowardsminusinfinity.ceil -Roundtowardsplusinfinity.round -Roundtowardsnearestinteger.mod -Modulus(signedremainderafterdivision).rem -Remainderafterdivision.sign -Signum.>>helpelmatElementarymatricesandmatrixmanipulation.Elementarymatrices.zeros -Zerosarray.ones -Onesarray.eye -Identitymatrix.repmat -Replicateandtilearray.…………pascal -Pascalmatrix.rosser -Classicsymmetriceigenvaluetestproblem.toeplitz -Toeplitzmatrix.vander -Vandermondematrix.wilkinson -Wilkinson'seigenvaluetestmatrix.help+函数名例如,在命令窗口中输入如下命令:>>helpsinSINSineofargumentinradians.SIN(X)isthesineoftheelementsofX.Seealsoasin,sind.Overloadedmethods:codistributed/sinReferencepageinHelpbrowserdocsin2)lookfor命令如果知道某个函数名而不知该怎样使用它时,用help命令可以帮助用户正确地了解此函数的用法,但查询一个不知道其确切名称的函数时,help命令就帮不上忙了,此时就要靠lookfor命令来查询,根据所提供的关键字来搜索相关的函数。lookfor通过对MATLAB搜索路径中的每个M文件的注释区的第一行进行扫描,一旦发现所查询的字符串,则将该函数显示出来。例如,在命令窗口中输入如下命令:>>lookforinvultidyn -Createsanuncertainlineartime-invariantobject.keyboard -InvokekeyboardfromM-file.return -Returntoinvokingfunction.invhilb -InverseHilbertmatrix.…… ……instdfft -Inversenon-standard1-DfastFouriertransform.iswt -Inversediscretestationarywavelettransform1-D.iswt2 -Inversediscretestationarywavelettransform2-D.ecatXpcEthercatDelete-Callbackfunctioninvokedondeletionoflookfor命令的查询原理是:它对MATLAB搜索路径中的每个M文件的注释区的第一行进行扫描,一旦发现此行中含有所查询的关键字,则将该函数名及第一行注释全部显示在屏幕上。1.5MATLAB的计算功能强大的计算功能是MATLAB的特色,是MATLAB软件的基础。1.5.1基本数据类型MATLAB包括4种基本数据类型,即双精度数组、字符串数组、单元数组和结构数组。数值之间可以相互转化,这为其计算功能开拓了广阔的空间。1.变量与常量变量是数值计算的基本单元。与C语言等其他高级语言不同,MATLAB语言中的变量无须事先定义,一个变量以其名称在语句命令中第一次合法出现而定义,运算表达式变量中不允许有未定义的变量,也不需要预先定义变量的类型,MATLAB会自动生成变量,并根据变量的操作确定其类型。MATLAB中的变量命名规则如下:(1)变量名区分大小写。(2)变量名以英文字母开始,第一个字母后可以使用字母、数字、下划线,但不能使用空格和标点符号。(3)变量名长度不得超过31位,第31个字符之后的字符将被MATLAB语言所忽略。(4)某些常量可以作为变量使用,如i在MATLAB中表示虚数单位,但也可以作为变量使用。常量是指那些在MATLAB中已预先定义其数值的变量,默认的常量如表1-1所示。表1-1MATLAB默认常量名称说明pi圆周率INF(或inf)无穷大NaN(或nan)代表不定值(即0/0)realmax最大的正实数realmix最小的正实数eps浮点数的相对误差i(或j)虚数单位,定义为续表名称说明nargin函数实际输入参数个数nargout函数实际输出参数个数ANS(或ans)默认变量名,以应答最近一次操作运算结果2.MATLAB变量的显示MATLAB是以矩阵为基本运算单元的,而构成数值矩阵的基本单元是数字。为了更好地学习和掌握矩阵的运算,首先对数字的基本知识进行简单介绍。对于简单的数字运算,可以直接在命令窗口中以平常惯用的形式输入,如计算3与5相加时,可输入:>>3+5ans=8这里的ans是指当前的计算结果,若计算时用户没有对表达式设定变量,系统就自动默认ans为被赋值的变量。用户也可自定义变量,如下:>>s=3+5s=8此时系统就自动把结果赋给s变量。MATLAB语言中数值有多种显示形式,在默认情况下,若数据为整数,则以整数表示;若数据为实数,则以保留小数点后4位的精度近似表示。MATLAB提供的常用的几种显示格式如表1-2所列示。表1-2MATLAB的数据显示格式格式含义format(short)短格式(5位定点数)formatlong长格式(15位定点数)formatshorte短格式e方式formatlonge长格式e方式formatbank两位十进制格式formathex十六进制格式工作空间中的变量可以用save命令存储到磁盘文件中。输入命令“save<文件名>”,将工作空间中的全部变量存到“<文件名>.mat”文件中,若省略“<文件名>”,则存入文件matlab.mat中;命令“save<文件名><变量名集>”将“<变量名集>”指出的变量存入文件“<文件名>.mat”中。用命令load可将变量从磁盘文件读入MATLAB工作空间,其用法为“load<文件名>”,它将“<文件名>”指出的磁盘文件中的数据依次读入名称与“<文件名>”相同的工作空间中的变量中。若省略“<文件名>”,则从matlab.mat中读入所有数据。用clear命令可从工作空间中清除现存的变量。3.字符串字符串和字符串运算是各种高级语言必不可少的部分,MATLAB中的字符串是其进行符号运算表达式的基本构成单元。在MATLAB中,字符串和字符数组基本上是等价的,所有的字符串都用单引号进行输入或赋值(当然也可以用函数char来生成)。字符串的每个字符(包括空格)都是字符数组的一个元素。【例1-1】查看定义的数组维数。其实现的MATLAB代码如下:>>s='HelloMATLAB's=HelloMATLAB>>n=size(s)%size查看数组的维数n=1124.单元数组单元是单元数组(CellArray)的基本组成部分。单元数组与数字数组相似,以下标来区分,单元数组由单元和单元内容两部分组成,用花括号{}来表示单元数组的内容,用圆括号()表示单元元素。与一般的数字数组不同,单元可以存放任何类型、任何大小的数组,而且同一个单元数组中各单元的内容可以不同。【例1-2】单元数组创建与显示。其实现的MATLAB代码如下:>>clearall;A(1,1)={'ThisexampleisMATLABofcellarray'};A(1,2)={[13;8-4]};A{2,1}=tf(2,[1,7]);A{2,2}={A(1,2);'Thisisanexample'};celldisp(A)单元数组A第1行用单元数组标志法建立一个字符串和一个矩阵;第2行用单元内容编址法,建立一个传递函数和一个由两个元素组成的单元组,该单元组分别是矩阵和字符串;最后用celldisp函数显示该单元组A。A{1,1}=ThisexampleisMATLABofcellarrayA{2,1}=tfobject:1-by-1A{1,2}=138-4A{2,2}{1}{1}=138-4A{2,2}{2}=Thisisanexample5.结构数组与单元数组相似,结构数组(StructureArray)也能存放各类数据,且使用指针方式传递数值。结构数组由结构变量名和属性名组成,用指针操作符“.”连接结构变量名和属性名。例如,可用parameter.temperature表示某一对象的温度参数,用parameter.humidity表示某一对象的湿度参数等,因此,该结构数组parameter由两个属性组成。【例1-3】通过温室数据(包括温室名、容积、温度、湿度等)演示。其实现的MATLAB代码如下:%直接对域赋值法产生“单结构数组”,即1×1结构数组>>green_='一号房'; %结构的域由“结构名.域名”标识green_house.volume='3000立方米';green_house.parameter.temperature=[31.230.431.628.729.632.728.130.9];green_house.parameter.humidity=[62.369.158.461.265.361.958.157.7];%显示“单结构”结构和内容green_house %显示单结构数组的结构green_house=name:'一号房'volume:'3000立方米'parameter:[1x1struct]>>green_house.parameter %显示parameter域中的内容ans=>>green_house.parameter.temperature %显示temperature域中的内容ans=1.5.2矩阵的创建在MATLAB语言中,矩阵与数组的输入形式和书写方法是相同的,其区别在于进行运算时,数组的运算是数组中对应元素的运算,而矩阵运算则应符合矩阵运算的规则。在数值运算中使用的矩阵必须赋值,矩阵的简单输入可以采用直接输入和增量赋值两种方法。1.简单矩阵建立1)直接输入法最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法如下:将矩阵的元素用方括号括起来,按矩阵的行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。【例1-4】直接输入法创建简单矩阵。其实现的MATLAB代码如下:>>S=[147;258;369]S=147258369这样,在MATLAB的工作空间中就建立了一个矩阵S,以后就可以使用矩阵S。2)增量赋值法矩阵的输入可以使用MATLAB语言具有向量增量功能的增量赋值法,增量赋值法的标准格式如下:A=初值:增量:终值其中冒号为分隔识别符。【例1-5】利用增量为分隔识别符创建简单矩阵。其实现的MATLAB代码如下:>>A=1:1:5A=12345>>B=[A/4;A*2;A*1.5]B=0.25000.50000.75001.00001.25002.00004.00006.00008.000010.00001.50003.00004.50006.00007.5000增量赋值法对于系统仿真是非常有用的。增量赋值法的标准格式中如果增量项默认,则默认增量值为1,即表示为A=初值:终值(如上可写为A=1:5)。在MATLAB中,还可以用linspace函数产生行向量。其调用格式如下:linspace(a,b,n)其中a和b是生成向量的第一个和最后一个元素,n是元素总数。当n省略时,自动产生100个元素。显然,linspace(a,b,n)与a:(b-a)/(n-1):b等价。例如:>>C=linspace(0,2,10)C=00.22220.44440.66670.88891.11111.33331.55561.77782.00002.大矩阵的创建1)利用M文件建立矩阵对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。下面通过一个简单例子来说明如何利用M文件创建矩阵。【例1-6】利用M文件建立data1矩阵。(1)启动有关编辑程序或MATLAB文本编辑器,并输入待建矩阵:data1=[111213141516171819;212223242526272829;313233343536373839];(2)把输入的内容存盘(设文件名为li1_6.m)。(3)的矩阵,可供以后使用。2)小矩阵建立大矩阵大矩阵可由方括号中的小矩阵建立起来。例如:>>A=[123;456;789];B=[A,eye(size(A));ones(3),A]B=123100456010789001111123111456111789其中eye(3)返回3×3单位矩阵,ones(3)返回3×3全1矩阵。在小矩阵中,对超出矩阵维数的元素直接赋值,也可以实现矩阵的扩充,其余未被赋值的元素用0补齐。3.矩阵元素矩阵是由多个元素组成的,矩阵的元素由下标来标识。1)矩阵的下标矩阵是由多个元素组成的,矩阵的元素由下标来标识。(1)全下标引用矩阵中的元素可以用下标来标识,即用矩阵的行下标和列下标来表示矩阵的元素。如一个m×n的矩阵A的第i行、第j列的元素可以用A(i,j)来引用。如果用来指定行和列的下标i和j一个向量,则引用由行向量i和列向量j指定的A中的全部元素,如A([12],[23])。【例1-7】矩阵的全下标引用。其实现的MATLAB代码如下:>>A=[147;258;369]A=147258369>>A(3,4)=11A=1470258036911(2)单下标引用矩阵元素也可以用单下标来引用或标识,即先把矩阵的全部元素按照先左后右的次序排成“一维长列”,然后对元素的位置进行编号。如一个m×n的矩阵A的第i行、第j列元素A(i,j)对应的单下标表示为A(s),其中s=(j-1)×m+i。【例1-8】矩阵的单下标引用。其实现的MATLAB代码如下:>>A=[111111;222222;333333]%定义矩阵A=111111222222333333>>i=1:8 %定义向量ii=12345678>>A(i) %利用单下标引用方式提取矩阵A中由向量指定的元素ans=123112233111222>>A(6) %利用单下标引用方式提取矩阵A的第6个元素ans=332)子矩阵块的产生MATLAB利用矩阵的下标可以产生子矩阵。对于a(i,

j),如果i和j是向量而不是标量,则将获得指定矩阵的子矩阵块。子矩阵是从对应的矩阵中取出一小部分元素来组成的,可以分别用全下标和单下标两种方法来产生子矩阵。【例1-9】利用矩阵的下标创建子矩阵块。其实现的MATLAB代码如下:>>A=[12345;678910;1112131415;1617181920]A=1234567891011121314151617181920>>A(2:3,4:5)ans=9101415>>B(2:3,1:2:5)ans=2.00006.000010.00001.50004.50007.5000>>C=[111727;355575]C=111727355575>>D=C(:)D=1135175527754.复数和矩阵MATLAB语言对于复数的处理,不像其他程序语言那样把复数的实数与虚数部分开处理,而是把复数作为一个整体处理。虚数单位用自定义变量i和j表示。MATLAB语言的矩阵元素允许是复数、复变量和由它们组成的表达式。MATLAB语言利用其内部函数可以在复数的直角坐标表示和极坐标表示之间进行转换,复数z的直角坐标表示和极坐标表示之间转换的指令如表1-3所示。表1-3复数的直角坐标表示与极坐标表示之间的转换函数功能real(z)给出复数z的实部imag(z)给出复数z的虚部abs(z)给出复数z的模angle(z)以弧度为单位给出复数z的相角【例1-10】复数,,的输入及计算。(1)数学直接式的直角坐标表示法>>z1=2-5iz1=2.0000-5.0000i在这种格式中,5i是一个完整的虚数,在5和i之间不允许有空格存在。这种书写格式只适用于数值标量复数,而不适用于数值矩阵。为避免出错,尽量不要使用这种输入格式。(2)采用运算符构成的直角坐标表示和极坐标表示法>>z2=3+3*i %由符号构成的直角坐标表示z2=3.0000+3.0000i>>z3=2/3*exp(i*pi/5) %由运算符构成的极坐标表示z3=0.5393+0.3919i>>z=(z1*z2)/z3z=17.5489-29.4370i【例1-11】复数矩阵的生成及运算示例。其实现的MATLAB代码如下:>>S=[15;37]+[29;43]*i %复数矩阵的输入S=1.0000+2.0000i5.0000+9.0000i3.0000+4.0000i7.0000+3.0000i>>B=[1-2i7-4i;5+2i3+6i] %复数矩阵的输入B=1.0000-2.0000i7.0000-4.0000i5.0000+2.0000i3.0000+6.0000i>>B_real=real(B) %求复数矩阵B的实部B_real=1753>>B_imag=imag(B) %求复数矩阵B的虚部B_imag=-2-426>>B_m=abs(B) %求复数矩阵B的模B_m=2.23618.06235.38526.7082>>B_ph=angle(B)*180/pi %求复数矩阵B以度为单位的相角B_ph=-63.4349-29.744921.801463.43491.6特殊矩阵与矩阵元素的操作1.6.1特殊矩阵除了前面介绍怎样创建矩阵外,MATLAB中还提供了一系列的内建函数,实现特殊矩阵的初始化,表1-4给出了这些内建函数的调用格式与说明。表1-4特殊内建函数函数及其调用格式说明Y=ones(n)Y=ones(m,n)Y=ones(size(A))产生n×n维的全1矩阵产生m×n维的全1矩阵产生与矩阵A同维数的全1矩阵续表函数及其调用格式说明B=zeros(n)B=zeros(m,n)B=zeros(size(A))产生n×n维的全0矩阵产生m×n维的全0矩阵产生与矩阵A同维数的全0矩阵Y=eye(n)Y=eye(m,n)Y=eye(size(A))产生n×n维的单位矩阵产生m×n维的单位矩阵产生与矩阵A同维数的单位矩阵r=rand(n)rand(m,n)randrand(size(A))产生n×n维平均分布的随机矩阵产生m×n维平均分布的随机矩阵产生一个随机数产生与矩阵A同维数的平均分布随机矩阵A=magic类似于Y=rand,各数值遵循正态分布规律S=randn产生均值为0、方差为1的标准正态分布随机矩阵【例1-12】特殊矩阵的生成。其实现的MATLAB代码如下:>>A=rand(3) %生成一个3×3维的平均分布随机矩阵A=0.81470.91340.27850.90580.63240.54690.12700.09750.9575>>B=randn(3) %生成一个3×3维的正态分布随机矩阵A=2.76940.7254-0.2050-1.3499-0.0631-0.12413.03490.71471.4897>>C=eye(size(A)) %产生与A相同维数的单位矩阵C=100010001>>D=magic(3) %生成一个3×3维魔方矩阵D=8163574921.6.2矩阵元素的操作矩阵元素的主要操作有提取元素、修改或赋值元素值、删除元素及矩阵的翻转等。MATLAB提供了矩阵翻转的函数,表1-5列出了常见的函数。表1-5矩阵的MATLAB函数函数说明函数说明B=shiftdim(X,n)矩阵的元素移位B=flipdim(A,dim)矩阵元素的翻转B=rot90(A)矩阵逆时针旋转90°L=tril(X)矩阵的下三角矩阵B=fliplr(A)矩阵左右翻转U=triu(X)矩阵的上三角矩阵B=flipud(A)矩阵上下翻转【例1-13】矩阵元素的相关操作。其实现的MATLAB代码如下:>>A=magic(3) %产生一个魔方矩阵A=816357492>>A1=A(2,2) %提取指定位置的元素A1=5>>A2=A(1:2:3,[2,3]) %提取指定位置的部分元素,对应1、3行,2、3列元素A2=1692>>A3=A(:,3:end) %提取部分元素,“:”表示全部行,end表示到最后一行A3=672>>A4=rot90(A) %矩阵逆时针旋转90°A4=672159834>>A5=fliplr(A) %矩阵的左右翻转A5=618753294>>A6=shiftdim(A,3) %矩阵的位移A6=834159672>>U=triu(A) %矩阵的上三角矩阵U=816057002

1.7矩阵的基本运算矩阵的运算是MATLAB语言最基本的运算功能,MATLAB对于矩阵运算的处理与线性代数中的方法相同。在线性代数矩阵中的加、减及乘均有定义,而除没有定义。为了便于计算,MATLAB专门定义了矩阵的除法,并且定义了矩阵的左除和右除。MATLAB定义矩阵除法和线性代数中乘以矩阵的逆意义近似。1.7.1矩阵的代数运算矩阵的代数运算有加、减、乘、除运算,下面分别给予介绍。1.矩阵的加、减法运算MATLAB语言能对具有相同阶数的两个矩阵或者一个标量和一个矩阵进行加法与减法运算,其运算符号分别是“+”和“-”。两个矩阵的加法和减法是对应元素的加减,而矩阵与标量的加法和减法运算则是矩阵中每一个元素都与标量进行加减运算。【例1-14】矩阵的加减运算示例。其实现的MATLAB代码如下:>>A=magic(3) %创建魔方矩阵A=816357492>>B=rand(3) %随机矩阵B=0.81470.91340.27850.90580.63240.54690.12700.09750.9575>>C=A+B %矩阵相加C=8.81471.91346.27853.90585.63247.54694.12709.09752.9575>>D=A-B %矩阵相减D=7.18530.08665.72152.09424.36766.45313.87308.90251.04252.矩阵的乘法运算MATLAB语言的矩阵乘法运算有标量与矩阵相乘和矩阵与矩阵相乘两种方式,乘法所使用的运算符是“*”。标量与矩阵的乘法运算是标量与矩阵中的每一个元素进行相乘的运算;而矩阵与矩阵的乘法则按照线性代数中矩阵的乘法规则进行,即两个矩阵要相乘,只有当前一个矩阵的列数和后一个矩阵的行数相同时才能进行。【例1-15】矩阵的乘法运算示例。其实现的MATLAB代码如下:>>E=A*BE=8.18558.52468.51997.86206.584710.272511.66509.53987.9509>>E1=A*5E1=405301525352045103.矩阵的除法运算矩阵的除法有两种形式,即左除(用运算符“\”)和右除(用运算符“/”)。(1)矩阵的左除对于矩阵和来说,表示矩阵左除矩阵,其计算结果与矩阵的逆和矩阵相乘的结果相似。其实,是方程的解,当方程是欠定或超定情况时,所对应的是方程的最小二乘解。(2)矩阵的右除对于矩阵和来说,表示矩阵右除矩阵,其计算结果与矩阵和矩阵的逆相乘的结果相似。矩阵可以看成是方程的解。【例1-16】已知方程组,用矩阵除法求解。其实现的MATLAB代码如下:>>clearall;A=[52-1;472;1-34];B=[274]';X=A\BX=0.47830.39131.17394.矩阵的乘方运算MATLAB语言计算矩阵乘方的表达形式为,根据矩阵和的不同具体对象,矩阵的乘方有不同的含义。(1)如果矩阵为方阵,为大于1的整数,则矩阵的乘方所得到的结果是矩阵的连乘次;如果不是整数,则矩阵的乘方是计算矩阵的各特征值和特征向量的乘方。(2)(3)如果和都为方阵,或者和两个矩阵中有一个不是方阵,则MATLAB语言会给出运算出错的信息。【例1-17】矩阵的乘方运算示例。其实现的MATLAB代码如下:>>A=magic(3);>>B=4;>>C=A^BC=172591668316683166831725916683166831668317259>>A=magic(3);>>B=3;>>C=A^BC=119710291149107711251173110112211053>>D=B^AD=1.0e+006*4.78314.78284.78304.78294.78304.78304.78294.78304.78301.7.2矩阵的其他运算1.矩阵的转置运算MATLAB语言求矩阵的转置直接用来表示。如果是的矩阵,就是的矩阵。如果是复数矩阵,那么就表示复数矩阵的共轭转置。如果只想得到复数矩阵的转置,可以使用命令来完成,此时所得到的结果与conj()的结果相同。当为实数矩阵时,有。【例1-18】矩阵的转置运算示例。其实现的MATLAB代码如下:>>A=magic(3)%创建三阶魔方矩阵A=816357492>>B=A' %进行矩阵转置B=834159672>>A1=2+randn(3)*i %创建一个复数矩阵A1=2.0000-0.3034i2.0000+0.8884i2.0000-0.8095i2.0000+0.2939i2.0000-1.1471i2.0000-2.9443i2.0000-0.7873i2.0000-1.0689i2.0000+1.4384i>>C=(A+A1)' %复数矩阵的转置,结果为共轭转置C=10.0000+0.3034i5.0000-0.2939i6.0000+0.7873i3.0000-0.8884i7.0000+1.1471i11.0000+1.0689i8.0000+0.8095i9.0000+2.9443i4.0000-1.4384i2.矩阵的对数运算在MATLAB中提供了logm函数实现矩阵的对数运算。【例1-19】矩阵的对数运算示例。其实现的MATLAB代码如下:>>A=[111313;212223;313233]A=111313212223313233>>B=logm(A)B=0.8594+2.5878i0.3570-0.5880i1.0626-0.6058i1.6894-0.9779i0.6458+2.1033i1.7986-1.0697i1.4211-1.4165i3.1313-1.5041i1.4906+1.5921i3.矩阵的开方运算在MATLAB中提供了sqrtm函数实现矩阵的开方运算。【例1-20】矩阵的开方运算示例。其实现的MATLAB代码如下:>>A=[111313;212223;313233]A=111313212223313233>>B=sqrtm(A)B=1.4451+0.8546i1.5344-0.3446i1.5808-0.0962i2.5518-0.1649i2.7095+0.3813i2.7914-0.1988i3.6964-0.6211i3.9250-0.0551i4.0435+0.2809i

1.8MATLAB的程序设计MATLAB作为一种高级语言,它是以一种人机交互式的命令行的方式工作,还可以像Basic、Fortran、C等其他高级语言一样进行控制流的程序设计,即绘制一种以.m为扩展名的MATLAB程序(简称M文件,即为MATLAB特有的文件)。由于MATLAB自身的一些特点,M文件的编制同上述几种高级语言比较起来,有许多无法比拟的优点。1.8.1M文件是MATLAB所特有的使用该语言编写的磁盘文件。所有的M文件都是以.m作为文件的扩展名。MATLAB中的M文件可以分为两种类型,一种是脚本,另一种是函数。1.脚本式文件由于脚本式文件的运行相当于在命令窗口中逐行输入并运行命令,因此用户在编制此类文件时,只需要把所要执行的命令按行编辑到指定的文件中,且变量不需要预先定义,也不存在文件名对应问题,但需要注意以下几点:标点符号的运用要恰到好处。建立良好的书写风格,保持程序的可读性。要记得以.m为文件的扩展名。

注意:脚本文件不仅能够对工作空间内已经存在的变量进行操作,还能够使用这些变量创建新的数据。【例1-21】脚本M文件示例。其实现的MATLAB代码如下:%求素数的程序%用户由键盘输入正整数N%列出从2到N的全部素数clear;closeallN=input('N=\n');x=2:N; %列出从2到N的全部自然数foru=2:sqrt(N) %依次列出除数(最大到N的平方根)n=find(rem(x,u)==0&x~=u); %找出能被u除尽而u不等于x的序号x(n)=[]; %忽略该数end;x %循环结束显示结果数。给出N=40,结果为:x=235711131719232931372.函数式文件为了实现计算中的参数传递,需要用到函数式文件。函数式文件的标志是第1行为function。函数式文件可以有返回值,也可以只执行操作,而无返回值,不过大多数函数文件都有返回值。函数式文件在MATLAB中应用十分广泛,MATLAB所提供的绝大多数功能函数都是由函数式文件实现的,这足以说明函数式文件的重要性。函数式文件执行之后,只保留最后结果,不保留任何中间过程,所定义的变量也只在函数内部起作用,并随调用的结果而被清除。MATLAB语言函数的函数文件包含如下5个部分。(1)函数定义行:是函数语句的第1行,在该行中将定义函数名、输入变量列表及输出变量列表等。(2)H1行:指函数帮助文本的第1行,为该函数文件的帮助主题,当使用lookfor命令时,可以查看到该行信息。(3)函数帮助文本:这部分提供的函数的完整的帮助信息,包括H1之后到第1个可执行或空行为止的所有注释语句,通过MATLAB语言的帮助系统查看函数的帮助信息时,将显示该部分。(4)函数体:指函数代码段,也是函数的主体部分。(5)注释:指对函数体中各语句的解释和说明文本,注释语句是以%引导的。【例1-22】函数式文件。其实现的MATLAB代码如下:functiony=mean(x,dim) %函数定义行%MEANAverageormeanvalue. %H1行%Forvectors,MEAN(X)isthemeanvalueoftheelementsinX.For%函数帮助文档%matrices,MEAN(X)isarowvectorcontainingthemeanvalueof%eachcolumn.ForN-Darrays,MEAN(X)isthemeanvalueofthe%elementsalongthefirstnon-singletondimensionofX.%%MEAN(X,DIM)takesthemeanalongthedimensionDIMofX.%%Example:IfX=[012%345]%%thenmean(X,1)is[1.52.53.5]andmean(X,2)is[1%4]%%ClasssupportforinputX:%float:double,single%%SeealsoMEDIAN,STD,MIN,MAX,VAR,COV,MODE.%Copyright1984-2005TheMathWorks,Inc.%$Revision:$$Date:2005/05/3116:30:46$ifnargin==1, %函数主体%DeterminewhichdimensionSUMwill %注释dim=min(find(size(x)~=1));ifisempty(dim),dim=1;endy=sum(x)/size(x,dim);elsey=sum(x,dim)/size(x,dim);end在该函数定义行中,function为MATLAB语言中函数的标识符,而mean为函数名,x、dim为输入变量,y为输出变量。实际调用过程中,可以用有意义的变量替代使用。定义行的定义有一定的格式要求,输出变量是由中括号标识的,而输入变量是由小括号标识的,各变量间用逗号间隔。应该注意到,函数的输入变量引用的只是该变量的值而非其他值,所以函数内部对输入变量的操作不会带回到工作空间中。H1行,可以通过lookfor命令查看,函数的帮助信息可以通过help命令查看。函数体是函数的主体部分,也是实现编程目的的核心所在,它包括所有可执行的一切MATLAB语言代码。在函数体中“%”后的部分为注释语句,注释语句主要是对程序代码进行说明解释,使程序易于理解,也有利于程序的维护。MATLAB语言中将一行内百分号后所有文本均视为注释部分,在程序的执行过程中不被解释,并且百分号出现的位置也没有明确的规定,可以是一行的首位,这样,整行文本均为注释语句;也可以是在行中的某个位置,这样其后所有文本

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论