已阅读5页,还剩93页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,MATLAB基础及控制系统辅助设计,武汉大学动机学院2007.4,.,2,第一部分MATLAB基础及其基本应用,第二部分模糊控制系统设计模糊逻辑工具箱应用,模糊逻辑控制系统特点模糊逻辑控制系统基本结构原理使用GUI工具建立FIS系统与Simulink一起工作,MATLAB基础MATLAB的程序设计MATLAB控制系统工具箱及其应用SIMULINK与水轮机调节系统的仿真,本部分讨论MATLAB的基本知识及用于控制系统仿真和简单辅助分析的基本方法。选取的实例主要为水轮机调节系统。,本部分主要讨论MATLAB模糊逻辑工具箱在模糊控制系统设计中的应用。,.,3,第三部分神经网络与应用神经网络工具箱应用,本部分主要讨论MATLAB神经网络工具箱及其GUI工具的应用。,感知器(Perceptron)线性神经网络(Linearnetwork)BP网络(BackPropagationnetwork)径向基函数网络(RadialBaseFunctionnetwork,RBF)神经网络图形用户界面应用神经网络Simulink模型设计,.,4,第一部分MATLAB基础及其基本应用,第一章MATLAB基础,参考教材:,MATLAB控制系统辅助设计工程师工具软件应用系列欧阳黎明编著,国防工业出版社。Matlab神经网络与应用,董长虹编著,国防工业出版社。Matlab模糊逻辑工具箱的分析与应用,闻新等编著,科学出版社。其它相关教材,.,5,11MATLAB与控制系统仿真,111控制系统与系统仿真,一般来说,控制系统仿真过程可以分为五个步骤:,(1)系统建模:根据要分析的控制系统,建立相应的数学模型。,(2)仿真算法:找到合适的仿真算法。MATLAB已经被确认为准确、可靠的科学计算标准软件。,(3)仿真语言:应用仿真语言编写计算程序。MTLAB语言有非常突出的优点,是控制系统仿真首选的仿真语言。,(4)仿真计算:根据初步的仿真结果对该数学模型进行验证。,(5)系统仿真:进行系统仿真,并认真地分析仿真的结果。,仿真算法、仿真语言和仿真程序构成了数字仿真软件。,确认数学模型的正确性、仿真算法的可行性、仿真程序的准确性和可靠性,最后编制成一个成熟的仿真软件。,.,6,控制系统仿真在教学实践中应用越来越普遍。,对于改进教学效果、给学生提供形象化的信息、激发学生的学习兴趣、提高学生的自学能力、加强学生对授课内容的理解等无疑是十分有益的。有利于对学生分析问题的能力和解决问题的能力的培养。,学生掌握了系统仿真的方法以后,不但使他加强了对所学课程的理解,同时还便于钻研一些他本人感兴趣的问题,有利于部分学有余力的学生进一步自学的要求。,在美国和欧洲大学中,九十年代将MATLAB正式列入了电气工程专业研究生和本科生的教学计划,MATLAB是必须掌握的基本工具。,在设计研究单位和工业界,MATLAB也成为工程师们应该掌握的一种工具,是被认作进行高效研究、开发的首选软件工具。,.,7,1.1.2MATLAB及其课程学习,MATLAB具有计算机语言的属性,因此可以看作是一种使用方便、语句效率很高、更接近于人们思维和表达习惯的一种计算机语言。MATLAB更可以被认为是一种进行科学研究的强有力工具。理由是具有由各领域顶尖科学家参与开发的、功能丰富的工具箱。在这些工具箱的支持下,人们在各个研究领域几乎都可以找到它的应用。与学习其它课程有所不同,MATLAB牵扯面极广,几乎涉及现代科学的所有领域,因此,学习MATLAB必须与个人所从事的学科相结合。与学习计算机语言类似,必须勤于实践。挖掘其功能为科学研究服务,主要要靠自己努力。本课程主要侧重于怎样做,仅在必要时简要说明为什么。,.,8,113MATLAB的发展史,MATLAB名字由MATrix和LABoratory两词的前三个字母组合而成。那是20世纪七十年代,时任美国新墨西哥大学计算机科学系主任的CleveMoler出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK矩阵软件工具包库程序的的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。,1984年由Little、Moler、SteveBangert合作成立MathWorks公司,并把MATLAB正式推向市场。从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。,1997年仲春,MATLAB5.0版问世,紧接着是5.1、5.2,以及和1999年春的5.3版。当前的最新版为7.x。现今的MATLAB拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。,.,9,114MATLAB语言的主要特点,(1)具有丰富的数学功能,包括矩阵各种运算。如:正交变换、三角分解、特征值、常见的特殊矩阵等。,包括各种特殊函数。如:贝塞尔函数、勒让德函数、伽码函数、贝塔函数、椭圆函数等。,包括各种数学运算功能。如:数值微分、数值积分、插值、求极值、方程求根、FFT、常微分方程的数值解等。,(2)具有很好的图视系统,可方便地画出两维和三维图形。,图形用户界面GUI制作工具,可以制作用户菜单和控件。使用者可以根据自己的需求编写出满意的图形界面。,高级图形处理。如:色彩控制、句柄图形、动画等。,.,10,113MATLAB语言的主要特点(续),(3)可以直接处理声言和图形文件。,(4)具有若干功能强大的应用工具箱。,(5)使用方便,具有很好的扩张功能。,声言文件。如:WAV文件(例:wavread,sound等)。,图形文件。如:bmp、gif、pcx、tif、jpeg等文件。,对于控制系统的应用如:SIMULINK、Control、NeuralNetwork、FuzzyLogic等多种工具箱。,可以把M文件转变为独立于平台的EXE可执行文件。,使用MATLAB语言编写的程序可以直接运行,无需编译。,MATLAB的应用接口程序API是MATLAB提供的十分重要的组件,由一系列接口指令组成。用户就可在FORTRAN或C中,把MATLAB当作计算引擎使用。,.,11,113MATLAB语言的主要特点(续),(6)具有很好的帮助功能,提供十分详细的帮助文件(PDF、HTML、demo文件)。,联机查询指令:help指令(例:helpelfun,helpexp,helpsimulink),lookfor关键词(例:lookforfourier)。,.,12,12MATLAB简介,1.2.1MATLAB的基本结构及环境,就其使用效果而言,MATLAB可以被认为是一种解释性编程语言。其优点在于语法简单,程序易于调试,交互性,且单一语句的效率很高。正因为如此,它被称为第四代编程语言。在图121中的语言内核及编译控制程序运行部分提供了该语言的运行环境。图121,从外部表现来说,在Windows98/2000/XP系统环境下安装好MATLAB后,双击MATLAB图标或从“开始”菜单打开MATLAB,即可进入MATLAB集成环境,也就是MATLAB命令窗(MATLABCommandWindow)。在后台,与该命令窗对应的是其工作空间(Workspace)。MATLAB的所有变量,运算结果均存贮在这个空间中,并由该空间管理我们所有输入的命令和函数调用。命令窗外形如图122所示。,.,13,1.2.2MATLAB的主要功能,MATLAB发展至今,已不仅仅是单纯矩阵运算的数学处理软件,其开放式的结构吸引了许多优秀人才编写M函数和工具箱,目前已经渗透到了工程计算和设计的各个领域。其中与控制系统设计与仿真相关的功能大致有以下各项:,一数值计算及分析(1)向量、矩阵的运算分析。(2)复数运算及分析(3)微分方程的求解(4)稀疏矩阵的运算(5)特殊函数的计算机分析(6)快速傅里叶变换及信号处理矩阵计算(7)数据分析及统计计算,二程序语言及算法实现(1)程序流程控制语句(2)C语言产生器,.,14,(3)文件管理,三MATLAB绘图功能(1)二维图形绘制(2)特殊坐标图形绘制及修改(3)三维坐标图形绘制,四MATLAB与高级语言接口(1)MATLAB与C语言接口及库函数(2)MATLAB与C+语言接口及库函数(3)MATLAB编译器,五Simulink建模与仿真,六功能强大的工具箱(1)控制系统工具箱(ControlSystemToolbox)(2)鲁棒控制工具箱(RobustControlToolbox)(3)模型预测控制工具箱(ModelPredictiveControlToolbox)(4)mu分析与校正工具箱(muAnalysisandSysthesisToolbox)(5)多变量系统频域设计工具箱(MultiVariableFrequencyDesignToolbox),.,15,(6)定量反馈控制工具箱(QuantitativeFeedbackTheoryToolbox)(7)频域系统辨识工具箱(FrequencyDomainSystemIdentifica-tionToolbox)(8)系统辨识工具箱(SystemIdentificationToolbox)(9)神经网工具箱(NeuralNetworkToolbox)(10)小波分析工具箱(WaveletToolbox)(11)最优化工具箱(OptimizationToolbox)(12)偏微分方程工具箱(PartialDifferentialEquationToolbox)(13)信号处理工具箱(SignalProcessingToolbox)(14)图像处理工具箱(1mageProcessingToolbox)(15)扩展符号数学工具箱(ExtendedSymbolicMathToolbox),1.2.3MATLAB的主要管理命令,help命令:helpexp,helpsimulink等;lookfor命令:lookfor关键词,例:lookforfourier;demo:运行演示程序;,.,16,who命令:列出当前工作空间的变量;whos命令:列出当前工作空间的变量(长表);clear命令:清除工作空间的所有变量;save和load命令:,在MATLAB的CommandWindow中可以方便地将数据存成文件,也可以随时调用数据文件。这可通过选择CommandWindow的菜单项FileSaveWorkspaceAs来实现。注意,所有MATLAB的数据文件后缀名必须为mat,即:XXX.mat。数据的存储和调用,除了菜单操作之外,还可以直接在工作空间中输入命令。键入命令save,则将工作空间中所有变量存入到磁盘上的MATLAB.mat文件中,当MATLAB再被运行时,键入命令1oad,则将这些变量从MATLAB.mat文件中调出并重新装入到MATLAB的工作空间中去。,.,17,save和1oad命令的后边也可以跟文件名和指定的变量名,若仅是直接使用save和load命令,则只能将所有变量存入到MATLAB.mat文件中和从MATLAB.mat文件中将所有变量重新装人工作空间,而加上文件名和指定的变量名后可实现好几种功能,如:Savesy将所有变量存入到sy.mat文件中;1oadsy将变量从sy.mat文件中调出来,放入当前的工作空间中;若欲存入指定的变量到某个文件中,可使用savesyxy;loadsyxy将存入的指定变量x,y从sy.mat文件中重新调出到当前工作空间中。此外,SIMULINK也可产生.mat文件,其调用方法与上述方法相同。,1.2.4MATLAB的基本使用方法,有三种方法使用MATLAB:,(1)演草纸式的数学运算,.,18,用MATLAB进行数学运算,就像在计算器上算算术一样简单方便。因此,MATLAB被誉为“演草纸式的科学计算语言”。例如,在MATLAB的CommandWindow下可以极为方便地进行下列算术运算:4+6+2ans=12注意,输入who命令可检查在工作空间中所建立的变量名。当前工作空间中的变量ans为默认变量,这意味着如果我们没有指定变量的话,所有的运算结果都将赋值给ans。,(2)在CommandWindow上直接输入MATLAB程序命令语句如:a=4;b=6;c=2;d=a+b+c;d=12,.,19,(3)用编辑器编写程序(脚本文件)然后运行在CommandWindow下选择菜单FileNewM-file打开编辑器Editor/Debugger;在Editor/Debugger中输入程序命令;在Editor/Debugger上选择菜单Filesaveas,所有MATLAB的可运行程序后缀名必须为m,即:XXX.m;在CommandWindow下选择菜单FileRun-Mfile,即可运行。,1.2.5MATLAB的基本语句结构,MATLAB语言能够完成高级计算机语言的绝大部分功能,语法和语句结构也非常类似,因此,有高级语言基础的读者能够很快适应MATLAB的风格。一、变量,作为MATLAB的最基本运算单元,变量是具体运算和编写函数的基础。与高级语言类似,变量的基本赋值语句结构是:变量名=表达式,.,20,变量名可以是字母或数字,但首字符必须是字母。表达式可以是任意合法的数字、函数及运算符。如果表达式没有命名,则MATLAB把结果存储和显示在ans变量中,以备查询和使用。请看下例:例ex1_1在MATLAB环境下求解表达式:,求解过程:在MATLABCommandWindow下直接键入:x=exp(0.5)+sin(pi/6)*log(sqrt(10)可得到:x=2.2244或直接输入exp(0.5)+sin(pi/6)*log(sqrt(10)可得到:ans=2.2244,.,21,通过上述例子可以很快熟悉MATLAB中变量的使用方法,事实上,通过这个例子还会发现MATLAB可以作为一个功能强大的函数计算器使用。关于变量的使用还有一些需要说明的问题:,MATLAB对变量名的大小写敏感,大小写代表不同的变量。(2)显示结果的缺省格式是5位有效数字,命令“formatshorte”、“formatlong”和“formatlonge”的输出格式分别为5位浮点数、15位定点数和15为浮点数。(3)MATLAB中有一些保留的常量,例如inf表示无穷大。MATLAB依照IEEE的标准允许除数为0,产生这种情况时只给出警告,不中止程序,结果为inf。另一个常量NaN表示非数字(NotaNumber),一般是由inf/inf或0/0产生的。这些特点使得MATLAB比一般的高级语言有着更高的容错性,更加灵活可靠。(4)变量在应用之前不必是维数确定的。在MATLAB中,变量一旦被采用,会自动产生(如果必要,变量的维数以后还可以改变)。,.,22,二、运算符和特殊字符(1)“+”:加号,用于标量、向量和矩阵的相加。例如,A+B,A和B两矩阵必须有相同的大小,或其中之一为标量,标量可以与任意大小的矩阵相加。(2)“”:减号,用于标量、向量和矩阵的相减。例如,AB,A和B两矩阵必须有相同的大小,或其中之一为标量,标量可以与任意大小的矩阵相减。(3)“*”:矩阵乘法(注意标量和向量也是矩阵的特殊形式)。例如CA*B为两矩阵线性代数的乘积,即对于非标量A和B,A的列数必须与B的行数相等。(4)“.*”:数组乘积。A.*B表示数组A和数组B的对应元素相乘;A和B必须大小相同,或者其中之一为标量。(5)“”:斜线或矩阵右除,B/A近似等于B*inv(A)。(6)“./”:数组右除。A./B表示矩阵元素A(i,j)/B(i,j),A和B必须大小相同,或者其中之一为标量。(7)“”:反斜线或左除。如果A为方阵,AB近似等于inv(A)*B。,.,23,(8)“.”:数组左除。A.B表示矩阵元素B(i,j)/A(i,j),A与B必须大小相同,或者其中之一为标量。(9)“”:矩阵幂。例如Xp,如果p为标量,表示X的p次幂。X和p不能同为矩阵。(10)“.”:数组幂。A.B表示矩阵元素A(i,j)的B(i,j)次幂,A与B必须大小相同,或者其中之一为标量。(11)“”:矩阵转置。A表示矩阵A的线性代数转置。对于复矩阵,表示复共轭转置。(12)“:”:冒号操作符。冒号操作符在MATLAB中起着重要作用。该操作符用来建立矢量,赋予矩阵下标和规定迭代。例如,j:k表示(jj+1k),A(:,j)表示矩阵A的第j列,A(i,:)表示矩阵A的第i行。(13)关系运算符:,分别表示小于”、“大于”、“小于等于”、“大于等于”、“等于”、“不等于”;数组进行关系运算时,对每个元素进行比较,运算结果是一个与数组大小一样的由0和1构成的数组。,四种运算,只比较操作数实部,而,既比较实部又比较虚部。,.,24,(14)逻辑运算符:|,”分号操作符:分号用来取消打印。在MATLAB中,如果一行语句和命令后没有任何符号,则该语句或命令产生的结果均将在屏幕上打印出来。在有些情况下这是必要的,但在有些情况下又是多余的,而且要大大降低程序的运行效率。如果语句的最后一个符号是分号,则打印被取消,但是命令仍在执行,而结果不再显示。此外,在输入矩阵时,除非是最后一行,分号用来指示一行的结束。,三、矩阵和向量的赋值方法,(1)矩阵和向量的赋值方法,.,25,要输入一个向量如:a=1234,可以直接键入a=1234或a=1234。要输入一个矩阵如:,可以直接键入A=123;456;789。在MATLAB中,应十分注意“:”的用法,它有时会使问题得到简化。如键入x1:4即产生一个l4单位增量的行向量:x=1234又如:,y=0:pi/4:pi表示:y=00.78541.57082.35623.1416行向量z=7:-1:2表示:z=765432行向量,.,26,下面的运算:x=0:0.2:1.0;y=exp(-x).*sin(x);xy产生的结果为:ans=000.20000.16270.40000.26100.60000.30990.80000.32231.00000.3096,上述矩阵的第一列为向量x,第二列为向量y。请注意这里出现的“.*”号,正如前面所提到的,它仅表示向量或矩阵元素间的乘运算,而不是通常意义上的向量或矩阵的乘运算。,.,27,(2)矩阵的下标,设有矩阵,则有A(3,3)=9,A(1,3)=4;A(3,1)=3等。设B为一个1010的矩阵,则B(1:5,3)指B阵第三列中前五行构成的子阵(这里是一个向量)。B(1:5,7:10)指B阵前五行最后四列构成的子阵(这里是一个矩阵)。,四、特殊矩阵及其赋值方法,在控制系统设计领域要用到许多特殊形式的矩阵,例如求解传递函数最小实现时用到的Hankel矩阵,系统参数和阶次辨识时用到的随机矩阵等等。MATLAB提供了许多生成和操作这些,.,28,特殊矩阵的函数,并且都是考虑到各种极端的情况,经过专业人员测试通过的,可以放心的使用。下面有选择的简要介绍几种重点的特殊几种函数。,(1)单位矩阵单位矩阵可以说是用途最广泛的矩阵之一,MATLAB提供了一条eye()函数可以用来生成指定维数的单位矩阵。这条函数有两种调用格式,第一种是eye(n),生成n维的单位矩阵;第二种是eye(m,n)生成一个mxn维的矩阵,其主对角元为1,其余元素为零。,(2)零矩阵或向量矩阵或数组所有元素为0。Azeros(n)返回一个nxn阶零矩阵A=zeros(m,n)返回一个mxn阶零矩阵,.,29,MATLAB提供了一条函数diag(),可以用来生成对角矩阵。最简单的调用格式为diag(V),V是维数为n的向量。,(3)对角矩阵所谓对角矩阵就是主对角元为非零元素,其余元素均为零的方阵,在数学文献中一般记为:,(4)随机矩阵所谓随机矩阵就是矩阵的各个元素是随机生成的。MATLAB的rand()函数生成的随机矩阵的元素满足0,1区间上的均匀分布。其调用格式为,.,30,A=rand(n)返回一个nxn,其元素伪随机数的方阵。A=rand(m,n)返回一个mxn,其元素伪随机数的矩阵。,m和n分别为随机矩阵的行数和列数。熟悉仿真算法的同学清楚,由计算机生成的随机数只是伪随机数,为了降低数据的相关性应该随时更换随机数发生器的种子数。在MATLAB中,这种想法可以通过调用该函数的rand(seed,s)格式来实现。其中s是标量,可以通过不同的s值来改变机器随机数发生器的种子数,s=0则设回缺省值。如:rand(1,4)ans=0.21900.04700.67890.6793rand(seed,1)rand(1,4)ans=0.51290.46050.35040.0950rand(seed,0),.,31,rand(1,4)ans=0.21900.04700.67890.6793如果希望得到正态分布的随机矩阵,则应该调用randn()函数,其格式与rand()函数基本类似,缺省是均值为0,方差为1的正态分布的随机数。,(5)Vandermonde矩阵(范德蒙矩阵)将控制系统的可控规范型化为特征值规范型时,所用到的变换矩阵就是由原规范型的系数矩阵特征值组成的范德蒙(Vandermonde)矩阵。控制领域使用的Vandermonde矩阵的具体形式为:,.,32,MATLAB提供了一条实现此Vandermonde矩阵的函数vander(),但是使用此函数生成的Vandermonde矩阵和上述的W矩阵相差90o。也就是说,将用vander()函数生成的矩阵元素逆时针旋转90o后就是控制领域常用的Vandermonde矩阵。MATLAB提供了一条函数rot90()专门用来对矩阵的元素进行逆时针旋转90o的操作,请看下例:C=1234vander(C)ans=1111842127931641641rot90(ans),.,33,ans=1111123414916182764,(6)Hankel矩阵给定一个序列cc1,c2,cn,用这些数写出一个矩阵,第(i,j)元素为hi,jCi+j-1,这样就构成一个Hankel矩阵,因此,该种矩阵是对称矩阵,且其反对角线上元素相同。n阶Hankel矩阵表示为,.,34,在MATLAB中生成Hankel矩阵有两种方法:Hhankel(c)产生一个Hankel方阵其第一列元素为向量c,而反主对角线以下元素均为0。Hhankel(c,r)产生一个Hankel矩阵,其第一列元素为向量c,最后一行元素是r,如果c最后一个元素与r第一个元素不等,取c最后一个元素。,(7)线性间隔向量产生线性增量的向量;其功能与“:”操作相似。v=1inspace(a,b)产生一个在a,b间线性间隔的100点行向量v。v=1inspace(a,b,n)产生一个在a,b间线性间隔的n点行向量v,(8)对数间隔向量产生对数增量向量,对于产生频率向量特别有用。,vlogspace(a,b)产生一个在10a10b间的50个对数间隔点的行向量v;vlogspace(a,b,n)产生一个在10a10b间的n个对数间隔点的行向量v;v1ogspace(a,pi)产生一个在10api间的50个对数间隔点的行向量v。,.,35,1.2.6MATLAB的数据类型,现有四种基本数据类型:双精度数组、字符串数组、元胞数组、构架数组。,(1)构架数组(StructureArray)能存放各类数据。,类似于C语言中的结构,即通常所说的Structure。该数组的基本组分是域。构架数组的创建和使用以例子来说明:,例:ex1_struc。本例通过温室数据(包括温室名、容积、温度、湿度等)演示单构架green_house的创建和使用。它有三个域:name,volume,parameter。而parameter又有两个子域:temperature,humidity。%构架的域由(构架名).(域名)标识。green_=一号房;green_house.volume=2000立方米;%域还可包含子域,.,36,green_house.parameter.temperature=31.2,30.4,31.6,28.7,29.7,31.1,30.9,29.6;green_house.parameter.humidity=62.1,59.5,57.7,61.5,62.0,61.9,59.2,57.5;上述4条语句则构建了构架数组green_house。在commandwindows下键入相应命令可得:green_ans=一号房green_house.parameter.temperatureans=31.200030.400031.600028.700029.700031.100030.900029.6000,该数组的基本组分是域。,构架必须在划分“域”后才能使用。,数据不能存放于构架,只能存放在域中。,.,37,例:ex1_cell。本例演示:元胞数组的创建。C_str=char(武汉大学,动力系);%产生字符串R=123;456;789;%产生(3X3)实数阵RCn=1+2i;%产生复数标量S_sym=sym(sin(-3*t)*exp(-t);%产生一个符号函数%(1)直接创建法之一:“外标识元胞元素赋值法”A(1,1)=C_str;A(1,2)=R;A(2,1)=Cn;A(2,2)=S_sym;,(2)元胞数组(CellArray)元胞数组是一种比较特殊的数组形式,使用方便,其形式就如同银行里的保险箱库一样。在Matlab中,当描述一个较大的数据集合,如一个神经网络就通常使用元胞数组。,构架的域可以存放任何类型、任何大小的数组。,不同构架的同名域中存放的内容可不同。,.,38,%(2)直接创建法之二:“编址元胞元素内涵的直接赋值法”B1,1=C_str;B1,2=R;B2,1=Cn;B2,2=S_sym;,上述语句运行后,则生成了元胞数组A,B。元胞数组的显示和引用可参见下面的实例。在commandwindows下键入相应命令可得:(a)显示元胞数组结构AA=2x4char3x3double1.0000+2.0000i1x1sym(b)显示元胞数组内容,.,39,celldisp(A)A1,1=武汉大学动力系A2,1=1.0000+2.0000iA1,2=123456789A2,2=sin(-3*t)*exp(-t),.,40,(c)引用元胞数组元素内容x=B1,2x=123456789y=B1,2(1,2)y=2,该数组的基本组分是元胞(Cell),以中的下标来区分。,元胞可以存放任何类型、任何大小的数组。,同一个元胞数组中各元胞的内容可以不同。,.,41,1.2.7MATLAB的基本矩阵运算,(1)矩阵的行列式运算det(A)。(2)矩阵迹的运算trace(A)。矩阵的迹定义为其对角线上各元素之和,矩阵的迹与矩阵的特征值之和是相等的。(3)矩阵求秩rank(A)。矩阵A=aij,i=1,2,m,j=1,2,n。如果该矩阵中共有rc个列向量线性无关,则称矩阵的列秩为rc,rcm,则为列满秩矩阵;如果该矩阵中共有rr个行向量线性无关,则称矩阵的行秩为rr,rr=n则为行满秩矩阵,可以证明,矩阵的行秩与列秩是相等的,即,rank(A)=rc=rr。(4)矩阵的特征值与特征向量定义:对于一个矩阵A=aijnxn;如果存在非零向量x=x1,x2,xn,且有一个标量入满足:Ax入x;则入为A的一个特征值,而x为对应于特征值入的特征向量。,.,42,运算:V,Deig(A)。D为对角阵,其对角线上为A的特征值,每个特征值对应矩阵V的列为特征值的特征向量,该矩阵为一满秩矩阵,AVVD;且每个特征向量各元素之平方和均为l。(5)矩阵求逆及广义矩阵逆矩阵求逆通常与线性方程的求解有关,对于线性方程AxB;式中A和B为相容维数的矩阵,而x也为矩阵,是方程的解。如果A为非奇异方阵,则可得出:x=A-1B,称A-1为A的逆矩阵。一般地,对一个已知的nxn阶非奇异方阵A来说,如果有一个同样大小的矩阵C满足ACCAI则称C为A的逆矩阵,并记逆矩阵为:CA-1。MATLAB中求逆函数为Cinv(A)它返回方阵A的逆,如果A为奇异或接近奇异矩阵,则产生出错信息。如果需要求奇异矩阵的一种“逆”阵,这种“逆”就称为矩阵的广义逆,又叫伪逆,其定义如下:如果存在一个矩阵N,满足,.,43,ANAA,则N称为A的广义逆矩阵,记作NA。在MATLAB中求矩阵广义逆的函数为:Npinv(A)它返回矩阵A的广义逆。(6)矩阵的特征多项式、特征方程与特征根若A为一方阵,I为与A同阶的单位矩阵,则可构成矩阵:CxI-A,求该矩阵的行列式,得一多项式:C(x),C(x)det(xI-A)=c0 xn+c1xn-1+cn-1x+cn,该多项式C(x)称为矩阵A的特征多项式,其中系数ci,i0,1,2,n称为矩阵A的特征多项式系数。MATLAB中提供了求矩阵特征多项式系数的函数,其调用格式为:cpoly(A)A为n阶方阵,返回一个由n+1个元素组成的行向量c,其各个分量为矩阵A的降幂排列的特征多项式系数。令特征多项式等于0所构成的方程式为该矩阵的特征方程,而特征方程的根为该矩阵的特征根。MATLAB中求矩阵特征根的函数调用方法为:,.,44,rroots(c)c为特征多项式的系数向量,而所求得的列向量r为特征方程的解,即原矩阵的特征根。在已知矩阵的特征根向量r后,也可求得原矩阵的特征多项式系数:cpoly(r)r为矩阵的特征根向量,返回一个行向量c,其各个分量为原矩阵A的降幂排列的特征多项式系数。,(7)矩阵的三角分解矩阵的三角分解就是将一个满秩方阵分解为一个下三角矩阵和一个上三角矩阵的乘积,又称为矩阵的LU分解。高级语言中一些求解线性方程组的算法就是基于矩阵的LU分解,因为,相对来说上三角和下三角矩阵的逆矩阵是比较容易求解的,并且如果注意到主对角元选取的问题,就可以保证计算的数值稳定性。在系统辨识的阶次推导和Hankel矩阵的理论推导过程中也会用到LU分解。,.,45,基本矩阵函数:cond(A),dot(A,B),norm(A,1),norm(A,2),norm(A,inf),norm(A,fro),rcond(A),svd(A),。,MATLAB中提供的将满秩方阵分解为一个下三角矩阵和一个上三角矩阵乘积的方法如下:LU=lu(A)除上面介绍的常用方法之外,MATLAB还提供了很多基本矩阵函数和矩阵分解函数,如:,矩阵分解函数:cdf2rdf(V,D),chol(A),Hess(A),null(A),LU(A),orth(A),qr(A),qz(A),rref(A),rst2csf(V,D),schur(A),subspace(A,B),svd(A)。这些函数的用法可通过help命令查询,此处不再过多描述。,.,46,1.2.8MATLAB的矩阵非线性运算,前边介绍的主要是加、减、乘、除等矩阵的基本运算,包括求逆、对角化、旋转等线性变换在内,这些运算统称为矩阵的线性运算。而矩阵的非线性运算,一般我们在学习线性代数的过程中恐怕接触得比较少。这些非线性运算主要是根据不同的工程需要发展起来的,一方面是实际运算的需要,另一方面也是为了书写简洁。这些非线性运算主要分为两大类:一类是对矩阵元素的非线性运算,基本上标量的非线性运算都可以在矩阵运算中找到对应的版本(如前所述,事实上MATLAB运算的基本元素是矩阵,标量的运算也是以矩阵的方式进行的);另一类是对于整个矩阵的非线性运算,包括求取矩阵的指数、对数或者是任意表达式的函数等等;事实上这些对整个矩阵的非线性运算都是用加、减、乘、除等线性运算来近似的,但使用MATLAB提供的矩阵非线性运算函数,可以事半功倍,省去了高级语言编程的工作量,迅速得到相应的结果。,.,47,(1)矩阵元素的非线性运算矩阵元素的非线性运算是对矩阵的单个元素进行的。当然,我们既可以对矩阵中指定的元素进行非线性运算,也可以对矩阵中每个元素整体进行同样的非线性运算。有关标量的非线性运算基本都可以对矩阵进行,只是需要特别注意该非线性函数的实现条件。下表列出了一些常用的矩阵非线性函数,更多的信息可从帮助文件获得。,.,48,例如:A=1234;5678;4321;8765A=1234567843218765log(A)ans=00.69311.09861.38631.60941.79181.94592.07941.38631.09860.693102.07941.94591.79181.6094log(A(1,:)ans=00.69311.09861.3863,.,49,(2)整个矩阵的非线性运算,MATLAB提供了一条函数funm()可以进行矩阵一般函数运算,但这条函数语句在实现过程中使用了一种潜在不稳定的算法,尤其是对于病态矩阵,有可能得出不正确的结果。如果该函数内嵌的检查器检查出不符合计算条件的矩阵,MATLAB就会自动报警。但这个检查器过于灵敏,虚警概率较高。因此,对于常用的矩阵指数和对数等运算,MATLAB推荐使用其专有函数expm()、logm(),这些函数的实现算法与funm()不同。funm()的调用格式为:F=funm(A,fun),一般要求A是方阵。我们仍然使用上例的矩阵A,有:funm(A,cos)Warning:ResultfromFUNMmaybeinaccurate.esterr=1.ans=0.2541-0.33250.08090.4943-0.82140.59200.00540.41890.65150.23810.8247-0.58870.57600.1626-0.25080.3358,.,50,可以看到MATLAB警告说funm()函数计算结果可能不准确。为了保险起见,对于一般的非线性运算可以用Taylor级数来近似,用MATLAB语言编程只需很短的程序就可以实现,精度和准确性都可以人为设定。在控制系统设计和仿真领域,使用最多的矩阵非线性运算就是矩阵指数运算,其定义为:对于nxn的方阵A,有:,对于控制系统的状态空间描述形式Ax=Bu,因为下式的存在:,即状态空间系数矩阵A的指数的拉普拉斯变换等于其预解矩阵,而预解矩阵是求解状态空间方程的关键,因此,指数矩阵获得了非常广泛的应用。状态方程的求解、系统的模态判定等等都要用到指数矩阵的概念。,.,51,MATLAB提供了四条函数可以求解矩阵指数,分别是expm()、expml()、expm2()、expm3。其中expm()和expml()都使用Pade算法来逼近矩阵指数的真实值,对于没有特殊限制的矩阵,一般推荐使用这两个函数,能够保证算法的收敛性,其缺点是速度比较慢。这两个函数的区别是:expm()嵌在系统内核里,而expml()是以M文件的格式存为外部函数。expm2()使用上述矩阵指数的定义式来计算,即Taylor展开法。这种方法的优点是结构和思路都比较简单,适于用户自己修改和控制,满足其特殊要求。其缺点是速度比较慢且不能保证算法一定收敛(绝大部分情况是可以保证得到正确结果的)。expm3()对特征向量满秩的矩阵进行了优化,通过A矩阵的特征向量和特征值来计算其指数矩阵。,例:考虑如下矩阵A,试比较分别用expm()、expm2()和expm3()求解其矩阵指数的结果。,.,52,A=2345;0234;0045;0004A=2345023400450004,expm(A)ans=7.389122.1672167.3879691.505507.389170.8136326.87020054.5982272.990800054.5982,.,53,expm2(A)ans=7.389122.1672167.3879691.505507.389170.8136326.87020054.5982272.990800054.5982,expm3(A)Warning:Matrixisclosetosingularorbadlyscaled.Resultsmaybeinaccurate.RCOND=3.847805e-017.,ans=7.38910200.6386184.661907.389170.813600054.5982000054.5982,.,54,从以上的代码和运行结果中可以看出,expm3()函数在求解有重特征值矩阵(上例特征值为2,2,4,4)的指数时有可能得到不正确的结果,而使用expm()和expm2()时一般会得到正确的结果。因此,如果不是对计算时间要求过高的话,一般使用expm()或原始的定义式expm2()。,(3)特殊函数,besselj(NU,Z)、bessely(NU,Z):贝塞尔函数;beta(Z,W):beta函数;erf(X)、erfinv(Y):高斯分布函数的积分;gamma(X):gamma函数;rat(X,tol):有理逼近函数;ellipke(M,tol)、ellipj(U,M):椭圆积分函数这些函数不一定我们每个人都能在工作中全都遇到。但一旦需要,均可通过help来获得其用法,并且可以为我们带来很大的方便。,.,55,1.2.9MATLAB的数据统计分析,MATLAB提供了一系列的函数,用于对数据集合进行统计分析。例如:求最大值、最小值、平均值、标准偏差、相关系数等。对于一组给定的数据,xi,i=1,2,N,在MATLAB中用一向量表示为:x=x1,x2,xN。常用的MATLAB数据分析函数有:求最大值,max(x);求最小值,min(x);求平均值,mean(x);求标准差,std(x);求协方差,cov();求相关系数,corrcoef();求元素之差或近似导数,diff();求梯度值,gradient();排序,sort(x);元素乘积,prod(x);,.,56,1.2.10MATLAB的数值分析,MATLAB提供了一系列的函数,求函数极值、函数零点和极点、数值积分、数值微分、微分方程的数值解等。,(1)极值分析在实际分析和应用中,我们常对一些函数的极值感兴趣,MATLAB中提供了求函数极小值的函数:fmin(),fmins(),用于单纯形法求解最优化问题,可求解极大值或极小值,在求函数极大值时,定义一个函数为原函数的负函数,而用fmin()或fmins()求新定义函数的极小值,即可求出原函数的极大值。函数:xfmin(fun,xl,x2)返回函数fun(x)在区间xl,x2内的局部极小值。函数:xfmin(fun,xl,x2,options)使用options对参数进行控制,同样返回函数fun(x)在区间xl,x2内的局部极小值。,.,57,(2)零点分析,zfzero(fun,x)找到函数fun在x附近的零点。fun为一个函数名的字符串,函数为单变量实值函数。返回值的附近函数变号。如果x为两元素向量,则认为x为区间。如果找到Inf,NaN,或复数值,则停止在查找区间内的搜索。例:z=fzero(cos,2)z=1.5708,(3)数值积分,数值积分方法实际上是计算函数图形下的面积。常用求定积分的方法有:梯形法、Simpson方法、Romberg方法等。Matlab中常用积分函数有:quad():q=quad(fun,a,b)返回函数fun在上、下限a和b上的数值积分。,.,58,quad8():quad8()函数是更高阶的求积分方法,具有与quad()同样的调用方法。函数quad()采用低阶方法,使用自适应递归Simpson法则,而quad8()采用较高阶方法,使用自适应递归Newton-Cotes8panel法则。trapz():trapz()函数通过计算(单位间隔)梯形面积的方法来求积分。调用格式如下:Ttrapz(Y)如果Y为向量,则计算Y的积分;如果Y是矩阵,得一个每列积分的行向量。Ttrapz(X,Y)用梯形积分法,依据X计算Y的积分。例如:quad(sin,0,pi)ans=2.0000 x=0:pi/100:pi;y=sin(x);,.,59,z=trapz(x,y)z=1.9998z=(pi/100)*trapz(y)z=1.9998,(4)数值微分,积分描述了函数的整体或宏观性质,而微分则描述了函数在某一点处的斜率,表现函数的微观性质。因此函数的形状在小范围内的改变对其积分影响不大,而对于微分来讲,这些微小变化使其值变化很大。因此,数值微分比数值积分的困难将大得多。MATLAB中常用的求微分的方法有:求多项式微分函数polyder(),通过计算数组中元素间的差分函数diff()来粗略计算微分函数等。对于多项式而言,常用下述方法调用polyder():,.,60,Kpolyder(p)返回多项式p的微分;Kpolyder(a,b)返回多项式a和b乘积的微分;q,dpolyder(b,a)返回多项式商b/a的微分,分子q,分母d。例:有两多项式,a=3,4,3,9;b=2,3,1;k=polyder(a)k=983k2=polyder(a,b)k2=3068636230q,d=polyder(b,a),.,61,q=-6-18-152824d=9243478815481,1.2.11用MATLAB实现付立叶变换,设有时间函数w(t),应用FFT,求时间函数w(t)的Fourier级数展开系数。Ffft(w,N)(付立叶变换)w=ifft(F,N)(付立叶逆变换),.,62,1.2.12MATLAB的符号计算,符号表达式和符号矩阵。,符号矩阵的基本运算。,符号计算的两大特点:符号解和任意精度解。,MATLAB的符号计算借助符号工具箱(Symbolic)实现。,定义基本符号对象的指令有两个:sym,syms。,符号表达式:。,符号矩阵:,两个符号矩阵的和:symadd(A,B),两个符号矩阵的差:symsub(A,B),两个符号矩阵的积:symmul(A,B),两个符号矩阵的除:symdiv(A,B),符号矩阵的求逆:inv(B),.,63,符号微积分。,符号积分变换。,符号代数方程的求解。,符号微分方程的求解:y1,y2,=dsolve(a1,a2,an),符号表达式的微分:diff(f),符号表达式的积分:int(f),线性方程组的符号解:X=linsolve(A,B)(特解),
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 互联网时代下的综合业务创新与挑战
- 影视制片人电影项目执行计划与市场分析
- 金属制品生产车间的环境保护措施
- 心理矫正面试技巧案例分析
- 中阶旅行规划师行程设计与执行方案
- 品牌策划总监资深整合营销传播与品牌价值提升计划
- 科研领域前沿动态与技术发展趋势分析报告
- 市场调研与数据分析洞察消费者需求与市场趋势
- 汽车项目管理中的问题与对策
- 广告投放效果评估与优化
- 孤儿生活费申请表
- 低压配电柜检验报告
- 水产品安全性评价
- 气弹簧力学计算器
- 专利产品体验报告
- 毕业论文机械手夹持器设计
- 医疗护理服务管理之优质护理服务培训PPT
- 系统熟悉级航机务培训中心
- 高处作业施工安全专项施工方案
- 乳房下垂的整形治疗课件
- 《黄金分割》 完整版课件
评论
0/150
提交评论