1、1,MATLAB基础 及控制系统辅助设计,武汉大学动机学院 2007.4,2,第一部分 MATLAB 基础及其基本应用,第二部分 模糊控制系统设计模糊逻辑工具箱应用,模糊逻辑控制系统特点 模糊逻辑控制系统基本结构原理 使用GUI工具建立FIS系统 与Simulink一起工作,MATLAB 基础MATLAB的程序设计MATLAB控制系统工具箱及其应用SIMULINK与水轮机调节系统的仿真,本部分讨论MATLAB的基本知识及用于控制系统仿真和简单辅助分析的基本方法。选取的实例主要为水轮机调节系统。,本部分主要讨论MATLAB模糊逻辑工具箱在模糊控制系统设计中的应用。,3,第三部分 神经网络与应用神
2、经网络工具箱应用,本部分主要讨论MATLAB神经网络工具箱及其GUI工具的应用。,感知器(Perceptron)线性神经网络(Linear network)BP网络 (Back Propagation network)径向基函数网络(Radial Base Function network, RBF)神经网络图形用户界面应用神经网络Simulink模型设计,4,第一部分 MATLAB基础及其基本应用,第一章 MATLAB 基础,参考教材:,MATLAB控制系统辅助设计工程师工具软件应用系列欧阳黎明编著,国防工业出版社。 Matlab神经网络与应用,董长虹编著,国防工业出版社。 Matlab模糊
3、逻辑工具箱的分析与应用,闻新等编著,科学出版社。其它相关教材,5,11 MATLAB与控制系统仿真,111 控制系统与系统仿真,一般来说,控制系统仿真过程可以分为五个步骤:,(1)系统建模:根据要分析的控制系统,建立相应的数学模型。,(2)仿真算法:找到合适的仿真算法。 MATLAB已经被确认为准确、可靠的科学计算标准软件。,(3)仿真语言:应用仿真语言编写计算程序。MTLAB语言有非常突出的优点,是控制系统仿真首选的仿真语言。,(4)仿真计算:根据初步的仿真结果对该数学模型进行验证。,(5)系统仿真:进行系统仿真,并认真地分析仿真的结果。,仿真算法、仿真语言和仿真程序构成了数字仿真软件。,确
4、认数学模型的正确性、仿真算法的可行性、仿真程序的准确性和可靠性,最后编制成一个成熟的仿真软件。,6,控制系统仿真在教学实践中应用越来越普遍。,对于改进教学效果、给学生提供形象化的信息、激发学生的学习兴趣、提高学生的自学能力、加强学生对授课内容的理解等无疑是十分有益的。有利于对学生分析问题的能力和解决问题的能力的培养。,学生掌握了系统仿真的方法以后,不但使他加强了对所学课程的理解,同时还便于钻研一些他本人感兴趣的问题,有利于部分学有余力的学生进一步自学的要求。,在美国和欧洲大学中,九十年代将MATLAB正式列入了电气工程专业研究生和本科生的教学计划, MATLAB是必须掌握的基本工具。,在设计研
5、究单位和工业界,MATLAB也成为工程师们应该掌握的一种工具,是被认作进行高效研究、开发的首选软件工具。,7,1. 1. 2 MATLAB及其课程学习,MATLAB 具有计算机语言的属性,因此可以看作是一种使用方便、语句效率很高、更接近于人们思维和表达习惯的一种计算机语言。MATLAB 更可以被认为是一种进行科学研究的强有力工具。理由是具有由各领域顶尖科学家参与开发的、功能丰富的工具箱。在这些工具箱的支持下,人们在各个研究领域几乎都可以找到它的应用。与学习其它课程有所不同,MATLAB牵扯面极广,几乎涉及现代科学的所有领域,因此,学习MATLAB必须与个人所从事的学科相结合。与学习计算机语言类
6、似,必须勤于实践。挖掘其功能为科学研究服务,主要要靠自己努力。本课程主要侧重于怎样做,仅在必要时简要说明为什么。,8,113 MATLAB的发展史,MATLAB名字由MATrix和 LABoratory 两词的前三个字母组合而成。那是20世纪七十年代,时任美国新墨西哥大学计算机科学系主任的Cleve Moler出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK矩阵软件工具包库程序的的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。,1984年由Little、Moler、Steve Bangert合作成立MathWorks公司,并把MATLAB正
7、式推向市场。从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。,1997年仲春,MATLAB5.0版问世,紧接着是5.1、5.2,以及和1999年春的5.3版。当前的最新版为7.x。现今的MATLAB拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。,9,114 MATLAB语言的主要特点,(1)具有丰富的数学功能,包括矩阵各种运算。如:正交变换、三角分解、特征值、常见的特殊矩阵等。,包括各种特殊函数。如:贝塞尔函数、勒让德函数、伽码函数、贝塔函数、椭圆函数等。,包括各种数学运算功能
8、。如:数值微分、数值积分、插值、求极值、方程求根、FFT 、常微分方程的数值解等。,(2)具有很好的图视系统,可方便地画出两维和三维图形。,图形用户界面GUI制作工具,可以制作用户菜单和控件。使用者可以根据自己的需求编写出满意的图形界面。,高级图形处理。如:色彩控制、句柄图形、动画等。,10,113 MATLAB语言的主要特点(续),(3)可以直接处理声言和图形文件。,(4)具有若干功能强大的应用工具箱。,(5)使用方便,具有很好的扩张功能。,声言文件。如: WAV文件(例:wavread,sound等)。,图形文件。如: bmp 、gif 、 pcx 、tif 、jpeg等文件。,对于控制系
9、统的应用如:SIMULINK、Control、 Neural Network、 Fuzzy Logic等多种工具箱。,可以把M文件转变为独立于平台的EXE可执行文件。,使用MATLAB语言编写的程序可以直接运行,无需编译。,MATLAB的应用接口程序API是MATLAB提供的十分重要的组件 ,由 一系列接口指令组成 。用户就可在FORTRAN或C中 , 把MATLAB当作计算引擎使用 。,11,113 MATLAB语言的主要特点(续),(6)具有很好的帮助功能,提供十分详细的帮助文件(PDF 、HTML 、demo文件)。,联机查询指令:help指令(例:help elfun,help exp
10、,help simulink),lookfor关键词(例: lookfor fourier )。,12,12 MATLAB简介,1. 2. 1 MATLAB的基本结构及环境,就其使用效果而言,MATLAB可以被认为是一种解释性编程语言。其优点在于语法简单,程序易于调试,交互性,且单一语句的效率很高。正因为如此,它被称为第四代编程语言。在图121中的语言内核及编译控制程序运行部分提供了该语言的运行环境。图121,从外部表现来说,在Windows98/2000/XP系统环境下安装好MATLAB后,双击MATLAB图标或从“开始”菜单打开MATLAB,即可进入MATLAB集成环境,也就是MATLAB
11、命令窗(MATLAB Command Window)。在后台,与该命令窗对应的是其工作空间(Workspace)。MATLAB的所有变量,运算结果均存贮在这个空间中,并由该空间管理我们所有输入的命令和函数调用。命令窗外形如图122 所示。,13,1. 2. 2 MATLAB的主要功能,MATLAB发展至今,已不仅仅是单纯矩阵运算的数学处理软件,其开放式的结构吸引了许多优秀人才编写M函数和工具箱,目前已经渗透到了工程计算和设计的各个领域。其中与控制系统设计与仿真相关的功能大致有以下各项:,一数值计算及分析(1) 向量、矩阵的运算分析。(2) 复数运算及分析 (3) 微分方程的求解(4) 稀疏矩阵
12、的运算(5) 特殊函数的计算机分析(6) 快速傅里叶变换及信号处理矩阵计算(7) 数据分析及统计计算,二程序语言及算法实现(1) 程序流程控制语句 (2) C语言产生器,14,(3) 文件管理,三MATLAB绘图功能(1) 二维图形绘制 (2) 特殊坐标图形绘制及修改(3) 三维坐标图形绘制,四MATLAB与高级语言接口(1) MATLAB与C语言接口及库函数(2) MATLAB与C+语言接口及库函数 (3) MATLAB编译器,五Simulink 建模与仿真,六功能强大的工具箱(1) 控制系统工具箱(Control System Toolbox)(2) 鲁棒控制工具箱(Robust Cont
13、rol Toolbox)(3) 模型预测控制工具箱(Model Predictive Control Toolbox) (4) mu分析与校正工具箱(mu Analysis and Systhesis Toolbox)(5)多变量系统频域设计工具箱(MultiVariable Frequency Design Toolbox),15,(6) 定量反馈控制工具箱(Quantitative Feedback Theory Toolbox)(7)频域系统辨识工具箱(Frequency Domain System Identifica-tion Toolbox)(8) 系统辨识工具箱(System I
14、dentification Toolbox)(9) 神经网工具箱(Neural Network Toolbox)(10) 小波分析工具箱(Wavelet Toolbox)(11) 最优化工具箱(Optimization Toolbox)(12) 偏微分方程工具箱(Partial Differential Equation Toolbox)(13) 信号处理工具箱(Signal Processing Toolbox)(14) 图像处理工具箱(1mage Processing Toolbox)(15) 扩展符号数学工具箱(Extended Symbolic Math Toolbox),1. 2.
15、3 MATLAB的主要管理命令,help 命令: help exp,help simulink等;lookfor命令: lookfor 关键词,例: lookfor fourier;demo: 运行演示程序;,16,who命令:列出当前工作空间的变量; whos 命令: 列出当前工作空间的变量(长表);clear 命令:清除工作空间的所有变量;save 和 load命令:,在 MATLAB的Command Window中可以方便地将数据存成文件,也可以随时调用数据文件。这可通过选择Command Window的菜单项File Save Workspace As来实现。注意,所有MATLAB的数
16、据文件后缀名必须为mat, 即:XXX.mat。数据的存储和调用,除了菜单操作之外,还可以直接在工作空间中输入命令。键入命令save,则将工作空间中所有变量存入到磁盘上的MATLAB.mat文件中,当 MATLAB再被运行时,键入命令1oad,则将这些变量从MATLAB.mat文件中调出并重新装入到MATLAB的工作空间中去。,17,save和1oad命令的后边也可以跟文件名和指定的变量名,若仅是直接使用save和load命令,则只能将所有变量存入到MATLAB.mat文件中和从MATLAB.mat文件中将所有变量重新装人工作空间,而加上文件名和指定的变量名后可实现好几种功能,如:Save s
17、y将所有变量存入到sy.mat文件中;1oad sy 将变量从sy.mat文件中调出来,放入当前的工作空间中;若欲存入指定的变量到某个文件中,可使用save sy x y;load sy x y将存入的指定变量 x,y从 sy.mat文件中重新调出到当前工作空间中。此外,SIMULINK也可产生.mat文件,其调用方法与上述方法相同。,1. 2. 4 MATLAB的基本使用方法,有三种方法使用MATLAB:,(1)演草纸式的数学运算,18,用MATLAB进行数学运算,就像在计算器上算算术一样简单方便。因此,MATLAB被誉为“演草纸式的科学计算语言”。例如,在MATLAB的Command Wi
18、ndow下可以极为方便地进行下列算术运算:4+6+2ans =12 注意,输入who命令可检查在工作空间中所建立的变量名。当前工作空间中的变量ans为默认变量,这意味着如果我们没有指定变量的话,所有的运算结果都将赋值给ans。,(2)在Command Window上直接输入MATLAB程序命令语句如: a=4;b=6;c=2;d=a+b+c;d=12,19,(3)用编辑器编写程序(脚本文件)然后运行在Command Window下选择菜单FileNewM-file 打开编辑器Editor/Debugger;在Editor/Debugger中输入程序命令;在Editor/Debugger上选择菜
19、单Filesave as, 所有MATLAB 的可运行程序后缀名必须为m, 即:XXX.m;在Command Window下选择菜单FileRun-M file, 即可运行。,1. 2. 5 MATLAB的基本语句结构,MATLAB语言能够完成高级计算机语言的绝大部分功能,语法和语句结构也非常类似,因此,有高级语言基础的读者能够很快适应MATLAB的风格。一、变量,作为MATLAB的最基本运算单元,变量是具体运算和编写函数的基础。与高级语言类似,变量的基本赋值语句结构是:变量名=表达式,20,变量名可以是字母或数字,但首字符必须是字母。表达式可以是任意合法的数字、函数及运算符。如果表达式没有命
20、名,则MATLAB把结果存储和显示在ans变量中,以备查询和使用。请看下例:例ex1_1 在MATLAB环境下求解表达式:,求解过程:在MATLAB Command Window下直接键入: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对变量名的大小写敏感,
21、大小写代表不同的变量。 (2) 显示结果的缺省格式是5位有效数字,命令“format short e”、“format long”和“format long e”的输出格式分别为5位浮点数、15位定点数和15为浮点数。 (3) MATLAB中有一些保留的常量,例如inf表示无穷大。MATLAB依照IEEE的标准允许除数为0,产生这种情况时只给出警告,不中止程序,结果为inf。另一个常量NaN表示非数字(Not a Number),一般是由inf/inf或0/0产生的。这些特点使得MATLAB比一般的高级语言有着更高的容错性,更加灵活可靠。 (4) 变量在应用之前不必是维数确定的。在MATLAB
22、中,变量一旦被采用,会自动产生(如果必要,变量的维数以后还可以改变)。,22,二、运算符和特殊字符 (1) “+”:加号,用于标量、向量和矩阵的相加。例如,A+B,A和B两矩阵必须有相同的大小,或其中之一为标量,标量可以与任意大小的矩阵相加。(2) “”:减号,用于标量、向量和矩阵的相减。例如, AB,A和B两矩阵必须有相同的大小,或其中之一为标量,标 量可以与任意大小的矩阵相减。(3) “*”:矩阵乘法(注意标量和向量也是矩阵的特殊形式)。例如CA*B为两矩阵线性代数的乘积,即对于非标量A和B,A的列数必须与B的行数相等。(4) “ .* ”:数组乘积。A .* B表示数组A和数组B的对应元
23、素相乘;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,
24、 j) 次幂,A与B必须大小相同,或者其中之一为标量。(11) “ ”:矩阵转置。A表示矩阵A的线性代数转置。对于复矩阵,表示复共轭转置。(12) “ : ”:冒号操作符。冒号操作符在MATLAB中起着重要作用。该操作符用来建立矢量,赋予矩阵下标和规定迭代。例如,j:k表示(j j+1 k),A(:,j)表示矩阵A的第j列,A(i,:)表示矩阵A的第i行。(13) 关系运算符:,分别表示小于”、 “大于”、 “小于等于”、“大于等于”、“等于”、“不等于”;数组进行关系运算时,对每个元素进行比较,运算结果是一个与数组大小一样的由0和1构成的数组。,四种运算,只比较操作数实部,而,既比较实部又比
25、较虚部。,24,(14) 逻辑运算符:|,&,xor分别表示“或”,“与”,“非”,“异或”运算。,(15) “%” 操作符: 在MATLAB中以“%”开始的程序行或一行程序中“%”后面的部分,表示注解和说明。这些注解和说明是不执行的。如果注解和说明需要一行以上的程序行,则每一行均需以“%”为起始。,(16) “ ; ”分号操作符: 分号用来取消打印。在MATLAB中,如果一行语句和命令后没有任何符号,则该语句或命令产生的结果均将在屏幕上打印出来。在有些情况下这是必要的,但在有些情况下又是多余的,而且要大大降低程序的运行效率。如果语句的最后一个符号是分号,则打印被取消,但是命令仍在执行,而结果
26、不再显示。此外,在输入矩阵时,除非是最后一行,分号用来指示一行的结束。,三、矩阵和向量的赋值方法,(1) 矩阵和向量的赋值方法,25,要输入一个向量如:a=1 2 3 4,可以直接键入 a=1 2 3 4或 a=1 2 3 4。 要输入一个矩阵如:,可以直接键入A=1 2 3; 4 5 6; 7 8 9。在MATLAB中,应十分注意“:”的用法,它有时会使问题得到简化。如键入x1:4即产生一个l4单位增量的行向量:x=1 2 3 4 又如:,y=0:pi/4:pi 表示:y=0 0.7854 1.5708 2.3562 3.1416 行向量z=7:-1:2 表示:z=7 6 5 4 3 2行向
27、量,26,下面的运算:x=0:0.2:1.0;y=exp(-x).*sin (x); x y 产生的结果为: ans =0 00.2000 0.16270.4000 0.26100.6000 0.30990.8000 0.32231.0000 0.3096,上述矩阵的第一列为向量x,第二列为向量y。请注意这里出现的 “.*”号,正如前面所提到的,它仅表示向量或矩阵元素间的乘运算,而不是通常意义上的向量或矩阵的乘运算。,27,(2) 矩阵的下标,设有矩阵,则有A(3,3)=9, A(1,3)=4;A(3,1)=3等。设B为一个1010的矩阵,则B(1:5,3)指B阵第三列中前五行构成的子阵(这里
28、是一个向量)。B(1:5,7:10)指B阵前五行最后四列构成的子阵(这里是一个矩阵)。,四、特殊矩阵及其赋值方法,在控制系统设计领域要用到许多特殊形式的矩阵,例如求解传递函数最小实现时用到的Hankel矩阵,系统参数和阶次辨识时用到的随机矩阵等等。MATLAB提供了许多生成和操作这些,28,特殊矩阵的函数,并且都是考虑到各种极端的情况,经过专业人员测试通过的,可以放心的使用。下面有选择的简要介绍几种重点的特殊几种函数。,(1) 单位矩阵单位矩阵可以说是用途最广泛的矩阵之一,MATLAB提供了一条eye()函数可以用来生成指定维数的单位矩阵。这条函数有两种调用格式,第一种是eye (n),生成n
29、维的单位矩阵;第二种是eye (m,n)生成一个 m x n 维的矩阵,其主对角元为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、上的均匀分布。其调用格式为,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.2190 0.0470 0.6789 0.6793rand (seed
31、, 1)rand (1, 4)ans =0.5129 0.4605 0.3504 0.0950rand (seed, 0),31,rand (1, 4)ans =0.2190 0.0470 0.6789 0.6793如果希望得到正态分布的随机矩阵,则应该调用randn()函数,其格式与rand()函数基本类似,缺省是均值为0,方差为1的正态分布的随机数。,(5) Vandermonde 矩阵 (范德蒙矩阵)将控制系统的可控规范型化为特征值规范型时,所用到的变换矩阵就是由原规范型的系数矩阵特征值组成的范德蒙(Vandermonde)矩阵。控制领域使用的Vandermonde矩阵的具体形式为:,3
32、2,MATLAB提供了一条实现此Vandermonde矩阵的函数vander(),但是使用此函数生成的Vandermonde矩阵和上述的W矩阵相差90o。也就是说,将用vander()函数生成的矩阵元素逆时针旋转90o后就是控制领域常用的Vandermonde矩阵。MATLAB提供了一条函数rot90()专门用来对矩阵的元素进行逆时针旋转90o的操作,请看下例:C=1 2 3 4vander(C)ans =1 1 1 18 4 2 127 9 3 164 16 4 1rot90(ans),33,ans =1 1 1 11 2 3 4 1 4 9 161 8 27 64,(6) Hankel矩阵
33、给定一个序列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=1inspac
34、e(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. 6 MATLAB的数据类型,现有四种基本数据类型:双精度数组、字符串数组、元胞数组、构架数组。,(1)
35、构架数组(Structure Array)能存放各类数据。,类似于C语言中的结构,即通常所说的 Structure。该数组的基本组分是域。构架数组的创建和使用以例子来说明:,例:ex1_struc。本例通过温室数据(包括温室名、容积、温度、湿度等)演示单构架green_house的创建和使用。它有三个域:name,volume,parameter。而 parameter又有两个子域:temperature,humidity。% 构架的域由(构架名).(域名)标识。green_house.name=一号房;green_house.volume=2000立方米;% 域还可包含子域,36,green
36、_house.parameter.temperature=31.2,30.4,31.6,28.7,29.7,31.1,3 0.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。在command win dows 下键入相应命令可得:green_house.name ans =一号房green_house.parameter.temperatureans =31.2000 30.4000 31.6000 28.7000 29.7000
37、 31.1000 30.9000 29.6000,该数组的基本组分是域。,构架必须在划分“域”后才能使用。,数据不能存放于构架,只能存放在域中。,37,例:ex1_cell。本例演示:元胞数组的创建。C_str=char(武汉大学,动力系); % 产生字符串R=1 2 3;4 5 6;7 8 9; % 产生(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) 元胞数组(
38、Cell Array)元胞数组是一种比较特殊的数组形式,使用方便,其形式就如同银行里的保险箱库一样。在Matlab中,当描述一个较大的数据集合,如一个神经网络就通常使用元胞数组。,构架的域可以存放任何类型、任何大小的数组。,不同构架的同名域中存放的内容可不同。,38,% (2)直接创建法之二:“编址元胞元素内涵的直接赋值法”B1,1=C_str;B1,2=R;B2,1=Cn;B2,2=S_sym;,上述语句运行后,则生成了元胞数组A, B。元胞数组的显示和引用可参见下面的实例。在 command windows 下键入相应命令可得: (a) 显示元胞数组结构A A = 2x4 char 3x3
39、 double1.0000+ 2.0000i 1x1 sym (b) 显示元胞数组内容,39,celldisp(A) A1,1 = 武汉大学动力系 A2,1 =1.0000 + 2.0000iA1,2 =1 2 34 5 67 8 9A2,2 =sin(-3*t)*exp(-t),40,(c) 引用元胞数组元素内容x=B1,2 x =1 2 34 5 67 8 9y=B1,2(1,2)y =2,该数组的基本组分是元胞(Cell),以中的下标来区分。,元胞可以存放任何类型、任何大小的数组。,同一个元胞数组中各元胞的内容可以不同。,41,1. 2. 7 MATLAB的基本矩阵运算,(1) 矩阵的行
40、列式运算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, 且有一个标量入 满足:A
41、x入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
42、中求逆函数为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)=c0xn+c1xn-1+cn-1x+cn,该多项式C(x)称为矩阵A的特征多项式,其中系数ci
43、, 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的
44、降幂排列的特征多项式系数。,(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), 。,MAT
45、LAB中提供的将满秩方阵分解为一个下三角矩阵和一个上三角矩阵乘积的方法如下:L U=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. 8 MATLAB的矩阵非线性运算,前边介绍的主要是加、减、乘、
46、除等矩阵的基本运算,包括求逆、对角化、旋转等线性变换在内,这些运算统称为矩阵的线性运算。而矩阵的非线性运算,一般我们在学习线性代数的过程中恐怕接触得比较少。这些非线性运算主要是根据不同的工程需要发展起来的,一方面是实际运算的需要,另一方面也是为了书写简洁。这些非线性运算主要分为两大类:一类是对矩阵元素的非线性运算,基本上标量的非线性运算都可以在矩阵运算中找到对应的版本(如前所述,事实上MATLAB运算的基本元素是矩阵,标量的运算也是以矩阵的方式进行的);另一类是对于整个矩阵的非线性运算,包括求取矩阵的指数、对数或者是任意表达式的函数等等;事实上这些对整个矩阵的非线性运算都是用加、减、乘、除等线
47、性运算来近似的,但使用MATLAB提供的矩阵非线性运算函数,可以事半功倍,省去了高级语言编程的工作量,迅速得到相应的结果。,47,(1) 矩阵元素的非线性运算矩阵元素的非线性运算是对矩阵的单个元素进行的。当然,我们既可以对矩阵中指定的元素进行非线性运算,也可以对矩阵中每个元素整体进行同样的非线性运算。有关标量的非线性运算基本都可以对矩阵进行,只是需要特别注意该非线性函数的实现条件。下表列出了一些常用的矩阵非线性函数,更多的信息可从帮助文件获得。,48,例如:A=1 2 3 4;5 6 7 8;4 3 2 1;8 7 6 5 A =1 2 3 45 6 7 84 3 2 18 7 6 5log(
48、A) ans =0 0.6931 1.0986 1.38631.6094 1.7918 1.9459 2.07941.3863 1.0986 0.6931 02.0794 1.9459 1.7918 1.6094log(A(1,:) ans = 0 0.6931 1.0986 1.3863,49,(2) 整个矩阵的非线性运算,MATLAB提供了一条函数funm()可以进行矩阵一般函数运算,但这条函数语句在实现过程中使用了一种潜在不稳定的算法,尤其是对于病态矩阵,有可能得出不正确的结果。如果该函数内嵌的检查器检查出不符合计算条件的矩阵,MATLAB就会自动报警。但这个检查器过于灵敏,虚警概率较高
49、。因此,对于常用的矩阵指数和对数等运算,MATLAB推荐使用其专有函数expm()、logm(),这些函数的实现算法与funm()不同。funm()的调用格式为:F = funm (A,fun),一般要求A是方阵。我们仍然使用上例 的矩阵A,有:funm(A,cos) Warning: Result from FUNM may be inaccurate. esterr = 1.ans =0.2541 -0.3325 0.0809 0.4943-0.8214 0.5920 0.0054 0.41890.6515 0.2381 0.8247 -0.58870.5760 0.1626 -0.2508 0.3358,