MATLABch04MATLAB程序设计基础知识课件

上传人:ni****g 文档编号:586688463 上传时间:2024-09-05 格式:PPT 页数:74 大小:725.50KB
返回 下载 相关 举报
MATLABch04MATLAB程序设计基础知识课件_第1页
第1页 / 共74页
MATLABch04MATLAB程序设计基础知识课件_第2页
第2页 / 共74页
MATLABch04MATLAB程序设计基础知识课件_第3页
第3页 / 共74页
MATLABch04MATLAB程序设计基础知识课件_第4页
第4页 / 共74页
MATLABch04MATLAB程序设计基础知识课件_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《MATLABch04MATLAB程序设计基础知识课件》由会员分享,可在线阅读,更多相关《MATLABch04MATLAB程序设计基础知识课件(74页珍藏版)》请在金锄头文库上搜索。

1、第第4讲讲 MATLAB程序设程序设计计-基础知识基础知识张建瓴张建瓴内容提要内容提要本章主要介绍本章主要介绍MATLAB程序设计的程序设计的有关基础知识。有关基础知识。4.1 MATLAB的变量和表达式的变量和表达式一、一、MATLABMATLAB的变量及其类型的变量及其类型1 1、变量命名规则、变量命名规则(1 1)变变量量名名(包包括括函函数数名名)对对字字母母的的大大小小写写敏敏感感,即即MATLABMATLAB区分字母的大小写;区分字母的大小写;(2 2)变变量量名名的的第第一一个个字字符符必必须须为为英英文文字字母母,而而且且不不能能超过超过3131个字符;个字符;(3 3)变变量

2、量名名由由英英文文字字母母、数数字字和和下下划划线线组组成成,即即变变量量名名 可可 以以 包包 含含 下下 连连 字字 符符 、 数数 字字 , 但但 不不 能能 为为 空空 格格 符符( (Backspace)Backspace)和标点。和标点。2 2、局部变量和全局变量、局部变量和全局变量(1)局部变量)局部变量只只在在每每个个函函数数体体内内定定义义、使使用用,而而不不能能从从其其他他函函数数和和MATLABMATLAB工作空间访问的变量称为局部变量。工作空间访问的变量称为局部变量。(2)全局变量)全局变量在多个函数及在多个函数及MATLABMATLAB函数中都能使用的变量称为全局变量

3、。函数中都能使用的变量称为全局变量。通通常常每每个个函函数数体体内内都都有有自自己己定定义义的的变变量量,不不能能从从其其他他函函数数和和MATLABMATLAB工工作作空空间间访访问问这这些些变变量量,这这就就是是局局部部变变量量。如如果果要要使使某某个个变变量量在在几几个个函函数数及及MATLABMATLAB函函数数中中都都能能使使用用,它就是全局变量。它就是全局变量。(3 3)局部变量和全局变量的区别)局部变量和全局变量的区别全全局局变变量量名名应应尽尽可可能能大大写写,并并用用“globalglobal声声明明。如如果果要要在在几几个个函函数数和和MATLABMATLAB的的工工作作空

4、空间间中中都都能能访访问问一一个个全全局局变变量量,则则需需在在每每个个函函数数和和MATLABMATLAB工工作作空空间间中中都都声声明该变量是全局变量。明该变量是全局变量。全全局局变变量量要要在在函函数数体体的的变变量量赋赋值值语语句句之之前前说说明明,整整个个函函数以及所有对函数的递归调用都可以利用全局变量。数以及所有对函数的递归调用都可以利用全局变量。【注注意意】:在在实实际际编编程程中中,应应尽尽量量避避免免使使用用全全局局变变量量,因因为为全全局局变变量量的的值值一一旦旦改改动动,则则在在其其他他包包括括该该变变量量的的函数中都将改变,这样有可能会出现不可预见的情况。函数中都将改变

5、,这样有可能会出现不可预见的情况。3 3、永久变量、永久变量/ /预定义变量预定义变量定定义义变变量量时时,有有些些MATLABMATLAB的的保保留留字字符符不不能能用用,其其中中有有一一部部 分分 就就 是是 MATLABMATLAB的的 永永 久久 变变 量量 , 也也 称称 为为 预预 定定 义义 变变 量量( (Predefmed Variable)Predefmed Variable)。每每当当MATLABMATLAB启启动动时时,系系统统自自动动定定义义变变量量,驻驻留留于于内内存存中中。它它们们不不会会被被命命令令clearclear清清除除(永永久久变变量量的的名名称称就就源

6、源于于此此)。系系统统也也可可以以为为这这些些永永久久变变量量赋赋值值,但但所所赋赋的的值值可可以以用用clearclear命命令令清清除除,从从而而恢恢复复系系统统预预定定义义的的值值(预预定定义义变变量量的名字就反映这个意思)。的名字就反映这个意思)。表表4-1 MATLAB的永久变量的永久变量变量名变量名含义含义ans预设的计算结果的变量名预设的计算结果的变量名EpsMATLAB定义的正的极小值定义的正的极小值=2.2204e-16pi内建的内建的值值Inf或或inf值,无限大,定义为值,无限大,定义为1/0NaN或或nan无法定义一个数目,非数(无法定义一个数目,非数(Not a Nu

7、mber),),如如0/0i 或或 j虚数单位虚数单位nargin函数输入参数个数函数输入参数个数nargout函数输出参数个数函数输出参数个数realmax最大的正实数最大的正实数realmin最小的正实数最小的正实数flops浮点运算次数浮点运算次数【注意】:【注意】:(1 1)用用户户在在编编写写指指令令和和程程序序时时,尽尽可可能能不不对对表表4-14-1中中所所列列永永久久变变量名重新赋值,以免产生混淆。量名重新赋值,以免产生混淆。(2 2)键入)键入clearclear则是去除所有定义过的变量名称,但不能清除永久变量。则是去除所有定义过的变量名称,但不能清除永久变量。例例4-14-

8、1example4_1.mexample4_1.m无穷大的使用和作用。无穷大的使用和作用。y=1/0 无穷大的使用无穷大的使用 Warning: Divide by zero. Y= Inf1/y 无穷大的作用和无穷大的作用和ans变量的使用变量的使用 ans= 0【说说明明】:在在MATLABMATLAB中中,象象1/01/0这这样样的的操操作作不不会会引引起起程程序序执执行行中中断断,只只是是在在给给出出警警告告信信息息的的同同时时,用用一一个个永永久久变变量量infinf来来表表示示,而而且且这这个个变变量量和和其其他他变变量量一一样样,可可在在各各种种运运算算中中发挥巨大的作用。发挥巨

9、大的作用。二、二、MATLABMATLAB基本表达式基本表达式MATLABMATLAB采采用用的的是是表表达达式式语语言言,用用户户输输入入的的语语句句由由MATLABMATLAB系系统统解解释释运运行行。用用户户可可以以在在MATLABMATLAB的的命命令令窗窗口口中中键键入入命命令令,也也可可以以在在编编辑辑器器内内编编写写应应用用程程序序,MATLABMATLAB软软件件对对此此命命令令或或程程序序中中各各条条语语句句进进行行翻翻译译,然然后后在在MATLABMATLAB环环境境下下对对它它进进行行处处理理,最最后返回运算结果。后返回运算结果。MATLAB语句由表达式和变量组成,有两种

10、表示形式:语句由表达式和变量组成,有两种表示形式:表达式表达式变量变量=表达式表达式表达式书写规则表达式书写规则MATLAB表达式书写规则与表达式书写规则与“手写算式手写算式”差不多相同,具体遵循以下规定:差不多相同,具体遵循以下规定:(1 1)表达式由变量名、运算符、数字和函数名组成;)表达式由变量名、运算符、数字和函数名组成;(2 2)表达式将按常规的优先级从左至右执行运算;)表达式将按常规的优先级从左至右执行运算;(3 3)优优先先级级的的规规定定是是:指指数数运运算算级级别别最最高高,乘乘除除运运算算次次之之,加减运算级别最低;加减运算级别最低;(4 4)括号可以改变运算顺序)括号可以

11、改变运算顺序;(5 5)书书写写表表达达式式时时,赋赋值值符符“= =”和和运运算算符符两两侧侧允允许许有有空空格格,以以增加可读性。但在复数或符号表达式中要尽量避免,以防出错;增加可读性。但在复数或符号表达式中要尽量避免,以防出错;(6 6)表表达达式式的的末末尾尾可可加加上上“;”“;”,也也可可以以不不加加。有有“;”“;”时时,MATLABMATLAB系系统统不不显显示示计计算算结结果果,而而是是直直接接把把数数值值赋赋给给变变量量,如如果果没没有有用用变变量量就就无无法法看看到到结结果果;没没有有“;”“;”时时,MATLABMATLAB系系统统将将会会在在该该条条语语句句的的下下面

12、面直直接接显显示示运运算算结结果。果。4.2 MATLAB数组及其类型数组及其类型一、一、MATLABMATLAB的数据结构的数据结构MATLABMATLAB是是一一种种面面向向数数组组( (Array)Array)的的编编程程语语言言,其其数数据据类类型型的的最最大大特特点点是是每每一一种种类类型型都都以以数数组组为为基基础础,从从数数组组中中派派生生出出来来的的,事实上,事实上,MATLABMATLAB把每种类型的数据都作为数组来处理。把每种类型的数据都作为数组来处理。在在MATLABMATLAB中中,有有6 6种种基基本本的的数数据据类类型型,即即:char(char(字字符符) )、d

13、ouble(double(双双 精精 度度 数数 值值 ) )、sparse(sparse(稀稀疏疏数数据据) )、storage(storage(存存储储型型) )、cell(cell(单单元数组元数组) )和和Struct(Struct(结构结构) )。【说明】:【说明】:(1)存存储储型型是是一一个个虚虚拟拟数数据据类类型型,它它包包括括int8(8位位整整型型)、uint8(无无符符号号8位位整整型型)、intl6(16位位整整型型)、uintl6(无无符符号号16位位控型控型)、iht32(32位整型位整型)和和uint32(无符号无符号32位整型位整型); (2 2)最最常常用用的

14、的数数据据类类型型只只有有双双精精度度型型和和字字符符型型,所所有有MATLABMATLAB计算都把数据当作双精度型处理;计算都把数据当作双精度型处理;(3 3)无符号)无符号8 8位整型一般用于储存图像数据;位整型一般用于储存图像数据; (4)稀疏数据一般用于处理稀疏矩阵;)稀疏数据一般用于处理稀疏矩阵;(5)单元数组和结构数组一般用在大型程序中;)单元数组和结构数组一般用在大型程序中;(6)储储型型数数组组一一般般只只用用于于内内存存的的有有效效储储存存,可可对对这这些些类类型型的的数数组组进进行行操操作作,但但不不能能进进行行任任何何数数学学运运算算,否否则则必必须须用用double函数

15、把它转换为双精度类型。函数把它转换为双精度类型。 3 3、数组之间的差别、数组之间的差别MATLABMATLAB的的数数组组有有:字字符符串串数数组组( (Character Character String String Array)Array)、 单单 元元 数数 组组 ( (Cell Cell Array)Array)、 结结 构构 数数 组组( (Structure Structure Array)Array)和和数数值值数数组组( (Numeric Numeric Army)Army),它它们之间的基本差别如表们之间的基本差别如表4-24-2所示。所示。 二、字符串数组二、字符串数组

16、对对于于MATLAB编编程程来来说说,字字符符处处理理必必不不可可少少。对对于于字符串的使用应符合以下规定:字符串的使用应符合以下规定:(1)所有字符串都用单引号括起来;)所有字符串都用单引号括起来;(2)字字符符串串中中的的每每个个字字符符都都是是字字符符串串变变量量(矩矩阵阵或或向向量量)中的一个元素;中的一个元素;(3)字字符符串串中中的的字字符符以以ASCII码码形形式式储储存存并并区区分分大大小小。用函数用函数abs可以看到字符的可以看到字符的ASCII码。码。1 1、字符串数组的建立、字符串数组的建立(1 1)直接赋值法)直接赋值法建建立立字字符符串串可可通通过过直直接接赋赋值值,

17、先先把把待待建建的的字字符符放放在在单单引引号号中,然后直接赋值给变量。如:中,然后直接赋值给变量。如:a=This is a book a= This is a book (2 2)建立中文字符串)建立中文字符串创创建建中中文文字字符符串串时时,字字符符外外边边的的单单引引号号对对必必须须在在英英文文状状态态下下输输入入。与与英英文文字字符符一一样样,每每个个中中文文字字符符也也占占一一个个元元素素位位置,但应注意此时的置,但应注意此时的ASCII大于大于256。A=中国长城中国长城 A= 中国长城中国长城(3)建立带单引号的字符串)建立带单引号的字符串当当字字符符串串中中的的字字符符包包含

18、含有有( (英英文文) )单单引引号号时时,每每个个单引号符用连续的两个单引号符表示。单引号符用连续的两个单引号符表示。B=China中国中国 B= China中国中国 (4)多行字符串的创建)多行字符串的创建在在直直接接创创建建多多行行字字符符串串数数组组时时,要要保保证证同同一一字字符符串串数数组组的的各各行行字字符符数数相相等等,即即保保证证各各行行等等长长。如如果果不不等等长长,则则用空格符来调节其长度,使它们彼此相等。如:用空格符来调节其长度,使它们彼此相等。如:AB=中国中国 ;chang cheng AB= 中国中国 chang cheng (5)利用字符串操作函数创)利用字符串

19、操作函数创建字符串数组建字符串数组在在MATLAB中中,有有专专用用函函数数char、str2mat和和strvcat创创建建多多行行字字符符串串数数组组。这这三三个个函函数数创创建建多多行行数数组组时时,不不必必担担心心每每行行字字符符是是否否相相等等,它它们们总总会会按按最最长长行行设设置置第第二二维维的的长长度度,其他行的尾部用空格填充。它们的调用格式为:其他行的尾部用空格填充。它们的调用格式为:S=char(TI,T2,T3,)S=str2mat(T1,T2,T3,) S=strvcat(T1,T2,T3,) 其其中中T1,T2,T3,是是字字符符串串,在在输输入入时时,T1,T2,T

20、3,两边要加英文状态下的单引号。两边要加英文状态下的单引号。(6)利用转换函数建立字符串数组)利用转换函数建立字符串数组在在MATLAB中中,把把数数值值数数组组转转化化为为字字符符串串数数组组的的常常用用函函数数为为int2str、num2str、mat2str、char和和double。函函数数命命令令char可可把把ASCII码码数数组组转转化化为为字字符符串串数数组组;命命令令double可把其他任何数组转化为数值数组。可把其他任何数组转化为数值数组。【说明】:【说明】:中文字符能被命令中文字符能被命令char和和double正确转化。正确转化。 2 2、字符串数组的操作、字符串数组的

21、操作(1)字符串的连接)字符串的连接字字符符串串可可以以连连接接到到一一起起组组成成更更大大的的字字符符串串。可可以以直直接接在在中中括号内用逗号连接,也可以通过函数括号内用逗号连接,也可以通过函数strcat连接。如:连接。如:A=中国长城中国长城B=China中国中国ab=A, ,B, 第二个输入是表示输入空格字符串第二个输入是表示输入空格字符串 ab= 中国中国 长城长城China中国中国 strcat(A,B) 函数函数strcat连接,忽略原字符串结尾处的空格连接,忽略原字符串结尾处的空格 ans= 中国长城中国长城China中国中国3、字符串数组元素的标识、字符串数组元素的标识在在

22、一一维维字字符符串串数数组组中中,MATLABMATLAB按按从从左左向向右右的的顺顺序序用用自自然然数数数数码码(1(1,2 2,3 3等等) )标标识识字字符符位位置置,其其操作也用标识来进行。操作也用标识来进行。三、单元数组三、单元数组 Cell ArrayCell Array单单元元数数组组(Cell Array)是是一一种种比比较较特特殊殊的的MATLAB数数组组,该该数数组组的的基基本本成成分分是是单单元元,它它的的每每个个元元素素都都是是一一个个单单元元,单单元元中中包包含含其其他他MATLAB数数组组。每每个个单单元元本本身身在在数数组组中中是是平平等等的的,它它们们只只能能以

23、以下下标标区区分分。单单元元内内可可以以存存放放任任何何类类型型、任任何何大大小小的的数数组组,而而且且同同一单元数组内各单元的内容可以不同。一单元数组内各单元的内容可以不同。同同数数值值数数组组一一样样,单单元元数数组组的的维维数数不不受受限限制制,可可以以是是一一维维、二二维维或或更高维。单元数组对单元的编址方法有单下标编址和全下标编址。更高维。单元数组对单元的编址方法有单下标编址和全下标编址。对对于于单单元元数数组组来来说说,单单元元和和单单元元里里的的内内容容是是两两个个不不同同的的范范畴畴。因因此此,寻寻访访单单元元和和寻寻访访单单元元内内容容是是两两种种不不同同的的操操作作。以以二

24、二维维单单元元数数组组为为例例,A(2,3)是是指指A单单元元数数组组中中的的第第二二行行第第三三列列单单元元元元素素;而而A2,3是是指指A单单元元数数组组中中的的第第二二行行第第三三列列单单元元中中所所允允许许存存或或取取的的内内容。两者的区别仅是用圆括号或是用花括号。容。两者的区别仅是用圆括号或是用花括号。1 1、单元数组的建立、单元数组的建立(1)利用赋值语句建立单元数组)利用赋值语句建立单元数组用用小小括括号号括括起起单单元元的的下下标标,在在赋赋值值语语句句的的右右侧侧用用花括号括起单元的内容。如:花括号括起单元的内容。如:A(1,1)=Mtalab; 单元单元(1,1),字符串,

25、字符串A(1,2)=6.0; 单单元元(1,2),标标量量,记记录录版版本本号号A(2,1)=矩矩阵阵; 单单元元(2,1),中中文文字字符串符串A(2,2)=2 3 4;23 l 4;5 4 8; 单元单元(2,2),矩阵,矩阵A 列出矩阵列出矩阵A A= 结果结果 matlab 6 矩阵矩阵 3x3 double(1)利用赋值语句建立)利用赋值语句建立单元数组单元数组(续)(续)用用花花括括号号括括起起单单元元的的下下标标,在在赋赋值值语语句句的的右右侧侧直直接指定单元的内容。如上面命令可写成:接指定单元的内容。如上面命令可写成:A1,1=matlab; 单元单元(1,1)中的内容中的内容

26、A1,2=6.0; 单元单元(1,2)中的内容中的内容A2,2=矩阵矩阵; 单元单元(2,1)中的内容中的内容A2,2=2 3 4;23 1 4;5 4 8; 单单元元(2,2)中中的的内内容容 (2)利用花括号(单元数组法)利用花括号(单元数组法)建立单元数组建立单元数组在在花花括括号号中中直直接接赋赋值值,单单元元与与单单元元之之间间用用逗逗号号、空空格格或或分分号号隔开,使用如下语句也可得出与上面相同的单元数组。隔开,使用如下语句也可得出与上面相同的单元数组。A=matlab,6.0; 矩阵矩阵,2 3 4;23 1 4;5 4 8或或A=matlab 6.0; 矩阵矩阵 2 3 4;

27、23 1 4;5 4 8【说说明明】:上上式式中中6.0后后面面的的分分号号表表示示数数组组另另起起一一行行,不不能能用别的符号代替。用别的符号代替。(3)利用)利用cell函数建立单元数组函数建立单元数组cellcell函数用来预分配指定大小的单元数组,其调用格式为:函数用来预分配指定大小的单元数组,其调用格式为:c=cell(n) 建立建立nn的单元数组,单元是空矩阵;的单元数组,单元是空矩阵;C=cell(m,n)或或cell(m,n) 建建立立mn的的单单元元数数组组,单单元是空矩阵;元是空矩阵;c=cell(m,n,p,)或或cell(m,n,p,.) 建建立立mnp的的单元数组,单

28、元是空矩阵;单元数组,单元是空矩阵;c=cell(size(A) 建立和建立和A大小相同的单元数组。大小相同的单元数组。2 2、单元数组的访问、单元数组的访问(1 1)用内容下标(花括号)访问单元内容)用内容下标(花括号)访问单元内容A1,1 访问第访问第(1,1)个单元中的内容个单元中的内容 ans= matlab(2)用单元下标(小括号)访问单元子集)用单元下标(小括号)访问单元子集A(1,1) 访问第访问第(1,1)个单元个单元 ans= matlabb=A(1:2,1) 把把单单元元数数组组A中中第第一一列列的的两两个个单单元赋给元赋给b,b也成为单元数组也成为单元数组 b2= mat

29、lab 矩阵矩阵3 3、单元数组的显示、单元数组的显示单单元元数数组组中中的的内内容容一一般般以以压压缩缩的的形形式式显显示示。要要形形象象地地查查看看单单元元数数组组中中的的内内容容,MATLAB提提供供了了函函数数cellplot命命令令,而而函数函数celldisp命令只是显示单元数组全部或部分内容。命令只是显示单元数组全部或部分内容。(1)cellplot函数函数【调用格式】:【调用格式】:H=cellplot(C, legend); 式式中中第第二二个个输输入入参参数数用用于于现现实实色色彩彩图图例例,该该命命令令用用大大白白方方格格表表示示单单元元,用用小小方方格格表表示示所所存存

30、的的数数组组元元素素,色色彩彩表表示数据属性。示数据属性。4 4、单元数组的操作、单元数组的操作(1 1)把把单单元元(注注意意,不不是是单单元元内内容容)设设置置为为空空来来删删除除该该单单元数组中的单元;元数组中的单元;(2)用用函函数数reshape命命令令来来改改变变单单元元数数组组的的大大小小,但但要要注注意改变形状时数组中的元素个数;意改变形状时数组中的元素个数;(3)单元数组也可像一般数组那样用方括号进行连接;)单元数组也可像一般数组那样用方括号进行连接;(4)单元数组可代替用逗号或空格分隔的变量列表;)单元数组可代替用逗号或空格分隔的变量列表;(5 5)如如果果数数组组中中的的

31、多多个个单单元元是是用用花花括括号号和和冒冒号号一一起起引引用用的的,MATLABMATLAB则把每个单元的内容看作一个独立的变量。则把每个单元的内容看作一个独立的变量。四、结构数组四、结构数组 Structure ArrayStructure ArrayMATLAB中中的的结结构构数数组组(Structure Array)与与单单元元数数组组一一样样,能能在在一一个个数数组组存存放放各各类类数数组组。从从一一定定意意义义上上讲讲,结结构构数组组织数据的能力比单元数组更强、更富于变化。数组组织数据的能力比单元数组更强、更富于变化。结结构构数数组组的的基基本本成成分分是是结结构构(Structu

32、re),数数组组中中的的每每个个结结构构相相等等,它它们们以以下下标标区区分分。结结构构必必须须在在划划分分“域域”后后才才能能使使用。数据不能直接存放在结构上,而只能存放在域中。用。数据不能直接存放在结构上,而只能存放在域中。结结构构的的域域可可以以存存放放任任何何类类型型、任任何何大大小小的的数数组组,而而且且不不同结构的同名域中存放的内容可以不同。同结构的同名域中存放的内容可以不同。1 1、结构数组的建立、结构数组的建立(1)直接建立结构数组)直接建立结构数组直直接接建建立立结结构构和和各各个个域域,同同时时给给各各域域赋赋值值( (也也可可以以不不赋赋值值) ),结结构构和和域域之之间

33、间用用点点连连接接。在在访访问问结结构构数数组组的的各各个个域域时时,也也是是“结结构构数数组组名名. .域域名名”的的格格式式。当当结结构构带带有有子子域域时时,需需完完整整地地键键入入结结构构名名、域域名名、子子域域名名,才才能能显显示示域域中中的的内内容容。结结构构数数组组的的各各个个域域可可以以按照其本身的数据类型进行相应的各种运算。按照其本身的数据类型进行相应的各种运算。例例4-54-5example4-5.mexample4-5.m建立一桥梁混凝土试件强度的结构数组。建立一桥梁混凝土试件强度的结构数组。bridge.name=XX大大桥桥; 域域名名为为name,中中文文字字符符串

34、串,记录桥名记录桥名bridge.position=顶顶板板; 域域名名为为position,中中文文字字符符串,记录试件位置串,记录试件位置bridge.position.group=2组组; 子子域域名名为为group,字字符符串串,记录组数记录组数bridge.position.value=28.4 29.4 30.1;26.8 29.0 28.8; 子子域名域名value,记录试件强度记录试件强度例例4-54-5example4-5.mexample4-5.m(续)续)bridge 得到结构数组的内容如下得到结构数组的内容如下 bridge= name: XX大桥大桥 position

35、: 1x1 struct bridge.position 显示域显示域position中的内容中的内容 ans= group: 2组组 value:2x3 doublebridge.position.value 显示域显示域value中的内容中的内容 ans= 28.4000 29.4000 30.1000 26.8000 29.0000 28.8000 (2 2)利用)利用structurestructure函数创建结构数组函数创建结构数组MATLABMATLAB有有一一个个专专门门建建立立结结构构数数组组的的函函数数structstruct。该该函函数数命令的调用格式为:命令的调用格式为:

36、 struct(fieldl,valuesl,field2,values2,) struct(fieldl,valuesl,field2,values2,) 用用指指定定的的域域名和各个域的数据建立结构数组。名和各个域的数据建立结构数组。如如果果数数组组中中包包含含多多个个结结构构,而而且且各各个个结结构构域域中中的的数数据据不不尽尽相相同同,则则域域的的数数据据valuesl、values2、必必须须是是单单元元数数组组。建建立立的的结结构构数数组和单元数组的大小相同。组和单元数组的大小相同。2 2、结构数组的操作、结构数组的操作(1)结构数组域中内容的调取和设置)结构数组域中内容的调取和设

37、置在在MATLAB中中,对对结结构构数数组组域域中中内内容容的的调调取取和和设设置置可可通通过过函数函数getfield和和setfield进行。进行。(2)删除结构的域)删除结构的域 在在MATLAB中,利用函数中,利用函数rmfield可以删除结构的域。可以删除结构的域。(3)结构数组和单元数组的转换)结构数组和单元数组的转换在在MATLAB中中,利利用用函函数数struct2cell和和cell2struct可可以以进进行结构数组和单元数组之间的转换。行结构数组和单元数组之间的转换。3、数据的分配、数据的分配MATLABMATLAB中中的的函函数数dealdeal可可把把输输入入数数据据

38、分分配配给给输输出出数数据据,其调用格式为:其调用格式为:(1)A,B,C,=deal(X,Y,Z,) 等等价价于于 A=X,B=Y,C=Z,(2)A,B,C,=deal(X) 等价于等价于A=X,B=X,C=X,例例4-64-6example4_6.mexample4_6.msys=rand(3) ones(3,1) eye(3) zeros(3,1); 建立单元数组建立单元数组sysa,b,c,d=deal(sys:); 把把sys中中的的每每个个“单单元元”分分配配给给相相对对应的变量应的变量 a= 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.

39、6068 0.7621 0.8214 b= 1 1 1 c= 1 0 0 0 1 0 0 0 1 d= 0 0 0【说说明明】:例例4-5中中的的sys:和和sys不不同同,sys是是将将整整个个单单元元数数组组分分配配给每个变量。给每个变量。4.3 MATLAB的运算符和操作符的运算符和操作符一、运算符一、运算符在在MATLAB中,最常见的运算符如表中,最常见的运算符如表4-4所示。所示。【注】:【注】:在矩阵运算中,左除和右除有一定的区别。在矩阵运算中,左除和右除有一定的区别。二、操作符二、操作符MATLAB中中,操操作作符符在在资资料料构构造造和和运运算算中中非非常常有有用用。各各操操作

40、作符符的含义如表的含义如表4-5所示。所示。【说明】:【说明】:(3)分分号号“;” 在在方方括括号号中中,分分号号表表示示矩矩阵阵中中行行的的结结尾尾。如如用用在在每每行行的的结结尾尾,则则MATLAB不不会会显显示示该该行行运运算算的的结结果果,此此功功能能可可以以用用在在M文文件件中中控控制命令的显示,减少输出篇幅。制命令的显示,减少输出篇幅。(1 1)冒冒号号“:” 冒冒号号在在矩矩阵阵的的构构造造和和运运算算中中极极为为实实用用,它它可可以以用用来来产产生生向向量量;用用作作矩矩阵阵的的下下标;部分地选择矩阵元素;进行行循环操作等。标;部分地选择矩阵元素;进行行循环操作等。(2 2)

41、续续号号“” 如如果果一一个个命命令令很很长长,一一行行容容不不下下,则则可可以以在在一一行行的的末末尾加三个或更多的点,表示此行未完,而在下一行继续。尾加三个或更多的点,表示此行未完,而在下一行继续。4.4 MATLAB的关系运的关系运算和逻辑运算算和逻辑运算除除了了传传统统的的数数学学运运算算,MATLABMATLAB支支持持关关系系和和逻逻辑辑运运算算。在在程程序序流流程程控控制制中中,常常有有一一些些逻逻辑辑和和模模糊糊逻逻辑辑推推理理,需需要要对对其其做做出出“是是真真、是是假假”的的判判断断或或回回答答,以以便便控制程序的流程,或执行次序。控制程序的流程,或执行次序。作作为为所所有

42、有关关系系和和逻逻辑辑表表达达式式的的输输入入,MATLABMATLAB把把任任何何非非零零数数值值当当作作真真,把把零零当当作作假假。所所有有关关系系和和逻逻辑辑表表达达式式的输出,对于真,输出为的输出,对于真,输出为1 1;对于假,输出为零。;对于假,输出为零。关系和逻辑运算的有关规定关系和逻辑运算的有关规定(1 1)在在所所有有的的关关系系表表达达式式和和逻逻辑辑表表达达式式中中,输输入入的的任任何何非非0 0数数都都被被看看作作是是“逻逻辑辑真真”,而而只只有有0 0才才被被认认为为是是“逻辑假逻辑假”;(2 2)所所有有关关系系表表达达式式和和逻逻辑辑表表达达式式的的计计算算结结果果

43、是是一一个个由由0 0和和1 1组组成成的的“逻逻辑辑数数组组( (Logical Logical Array)Array)”,数数组组中中的的1 1表示表示“真真”,0 0表示表示“假假”;(3 3)逻逻辑辑数数组组是是一一种种特特殊殊的的数数值值数数组组,与与“数数值值类类”有有关关的的操操作作和和函函数数对对它它也也适适用用;但但它它又又不不同同于于普普通通的的“数数值值”,它它还还表表示示对对事事物物的的判判断断结结论论“真真”与与“假假”,有有其其自自身身的的特特殊用途。殊用途。一、关系运算一、关系运算1、关系运算符、关系运算符MATLABMATLAB关关系系(运运算算)操操作作符符

44、用用来来比比较较两两个个同同样样大大小小的的数数组组,或或用用来来比比较较一一个个数数组组和和一一个个标标量量。其其关关系系操操作作符符如如表表4-64-6所示。所示。注注:= =和和=意意味味着着两两种种不不同同的的事事:= = 比比较较两两个个变变量量,当当它它们们相相等等时时返返回回1 1,当当它它们们不不相相等等时时返返回回0 0;在在另另一一方方面面,= =被被用来将运算的结果赋给一个变量。用来将运算的结果赋给一个变量。关系操作符关系操作符功能说明功能说明关系操作符关系操作符功能说明功能说明小于小于大于大于 =大于或等于大于或等于=等于等于=不等于不等于2 2、关系运算规则、关系运算

45、规则(1 1)比较的两个变量是标量)比较的两个变量是标量若标量若标量a a、b b之间关系成立,则关系运算结果为之间关系成立,则关系运算结果为l l;若标量若标量a、b之间关系不成立,则关系结果为之间关系不成立,则关系结果为0。(2)比较的两个变量是数组)比较的两个变量是数组当当两两个个维维数数相相同同的的数数组组A A和和B B比比较较时时,数数组组A A、B B比比较较的的是是相相同同位位置置的的元元素素,按按标标量量的的运运算算规规则则逐逐个个进进行行。关关系系运运算算的的结结果果是是一一个个维维数数和和A A相相同同的的数数组组,它它的的元元素素由由0 0和和1 1组成。组成。(3)比

46、较的两个变量一个是数)比较的两个变量一个是数组组A,另一个是标量另一个是标量b把把标标量量b b和和数数组组A A的的每每一一个个元元素素按按标标量量关关系系运运算算规规则则逐逐个个比比较较。关关系系运运算算的的结结果果是是一一个个维维数数和和数数组组A A相相同同的数组,它是由的数组,它是由0 0和和l l组成。组成。(4)算术运算、关系运算和逻辑运算的优先级)算术运算、关系运算和逻辑运算的优先级由高到低为算术运算、关系运算和逻辑运算。由高到低为算术运算、关系运算和逻辑运算。例例4-94-9example4_9.mexample4_9.m关系运算示例关系运算示例A=1:9, B=9-A A

47、= 1 2 3 4 5 6 7 8 9 B = 8 7 6 5 4 3 2 1 0tf=A4 %找找出出A中中大大于于4的的元元素素;0出出现现在在A4的地方的地方tf = 0 0 0 0 1 1 1 1 1例例4-94-9example4_9.mexample4_9.m(续)续)tf=(A=B) %找出找出A中的元素等于中的元素等于B中的元素中的元素tf = 0 0 0 0 0 0 0 0 0tf=B-(A2) %找找出出A2,并并从从B中中减减去去所所求求得得的结果向量的结果向量tf = 8 7 5 4 3 2 1 0 -1例例4-134-13example4_13.mexample4_1

48、3.m关系运算示例关系运算示例A=3 4 8;9 0 2;5 3 7 输入矩阵输入矩阵A A= 3 4 8 9 0 2 5 3 7B=4 4 1;7 8 4;5 1 7 输入矩阵输入矩阵B B= 4 4 1 7 8 4 5 1 7例例4-134-13example4_13.mexample4_13.m(续续1 1)E=(A=B) 比较矩阵比较矩阵A和和B是否相等是否相等 E= 0 1 0 0 0 0 1 0 1NE=(A=B) 比较矩阵比较矩阵A和和B是否不等是否不等 NE= 1 0 1 1 1 1 0 1 0例例4-134-13example4_13.mexample4_13.m(续续2 2

49、)A0=(A5) 标出矩阵标出矩阵A中大于中大于5的元素的元素 A0= 0 0 1 1 0 0 0 0 1B0=(B=A=3 4 8;9 0 2;5 3 7 输入矩阵输入矩阵A A= 3 4 8 9 0 2 5 3 7B=4 4 1;7 8 4;5 1 7 输入矩阵输入矩阵B B= 4 4 1 7 8 4 5 1 7例例4-164-16example4_16.mexample4_16.m(续续1 1)AB=A&B 对矩阵对矩阵A和和B求逻辑求逻辑“与与” AB= 1 1 1 1 0 1 1 1 1A_B=A|B 对对矩矩阵阵A和和B求求逻逻辑辑“或或” A_B= 1 1 1 1 1 1 1 1

50、 1例例4-164-16example4_16.mexample4_16.m(续续2 2)C=A 对矩阵对矩阵A求逻辑求逻辑“非非” C= 0 0 0 0 1 0 0 0 0cc=(A3)&(AA=1:9;B=9-A;tf=A4 %找出找出A大于的元素大于的元素tf = 0 0 0 0 1 1 1 1 1tf=(A4) %对上面的结果取非,也就是对上面的结果取非,也就是1替换替换0,0替换替换1tf = 1 1 1 1 0 0 0 0 0tf=(A2)&(Ax=linspace(0, 10, 100); % create datay=sin(x) ; % compute sinez=(y=0)

51、.*y ; % set negative values of sin(x) to zeroz=z+0.5*(yz=(xplot(x, z)xlabel(x), ylabel(z=f(x), title(A Discontinuous Signal)三、关系与逻辑函数三、关系与逻辑函数MATLABMATLAB提提供供了了大大量量的的其其他他关关系系与与逻逻辑辑函函数数,这这些些函函数数在在交交互互运运算算及及进进行行矩矩阵阵的的标标化化中中非非常常有有用用,可可以以很很方方便便地地查查找找或或替替换矩阵中满足一定条件的部分或所有元素,如表换矩阵中满足一定条件的部分或所有元素,如表4-84-8所示

52、。所示。函数名称函数名称功能功能xor(A,B)异异或或运运算算。A或或B非非零零(真真)返返回回1,x和和y都都是是零零(假假)或或都都是是非非零零(真真)返回返回0。any(A)如如果果在在一一个个向向量量x中中,任任何何元元素素是是非非零零,返返回回1;矩矩阵阵x中中的的每每一一列有非零元素,返回列有非零元素,返回1all(A)如如果果在在一一个个向向量量x中中,所所有有元元素素非非零零,返返回回1;矩矩阵阵x中中的的每每一一列列所有元素非零,返回所有元素非零,返回1isequel(A,B)ismember(A,B)1 1、anyany函数函数这这是是一一个个判判断断向向量量中中元元素素

53、是是否否有有非非0的的函函数数。在在矩矩阵阵处处理理时时,有有时时要要判判断断矩矩阵阵中中的的元元素素有有无无0值值。如如果果在在对对矩矩阵阵进进行行数数组组除除时,就要判断作除数的矩阵是否有时,就要判断作除数的矩阵是否有0元素。其调用格式为:元素。其调用格式为:(1)any(A) 若若A是是向向量量,如如果果A向向量量中中至至少少有有一一个个元元素素为为非非0数数,any(A)将将返返回回逻逻辑辑“真真”,即即为为1,否否则则为为0;若若A为为矩矩阵阵,函函数数any(A)按按向向量量的的列列判判断断,如如果果矩矩阵阵A的的某某列列中中存存在在某某个个元元素素为为非非0数数,则则返返回回当当

54、前前列列的的结结果果为为l;若若A是是多多维维矩矩阵阵,any(A)将将第一个不是单维的维作为向量,按向量的运算规则进行判断;第一个不是单维的维作为向量,按向量的运算规则进行判断;(2)any(A,dim) 指指定定的的第第dim维维作作为为向向量量进进行行计计算算。如如any(A,1)就是按向量就是按向量A第一维进行计算。第一维进行计算。例例4-254-25example4_25.mexample4_25.m函数函数anyany的用法的用法A=3 4 8;9 0 2;5 3 7 输入矩阵输入矩阵A A= 3 4 8 9 0 2 5 3 7any(A) 逻辑运算逻辑运算 ans= 1 1 1a

55、ny(A,2) 对对的的二二维进行逻辑运算维进行逻辑运算 ans= 1 1 1 2 2、allall函数函数【格式】:【格式】:(1)all(A) 若若A是是向向量量,如如果果A向向量量中中每每个个元元素素都都是是非非0数数,all(A)将将返返回回逻逻辑辑“真真”,即即为为1,如如果果至至少少有有一一个个元元素素为为0,则则返返回回值值为为0。若若A为为矩矩阵阵,函函数数a1l(A)按按向向量量的的列列判判断断,如如果果矩矩阵阵A的的某某列列中中所所有有元元素素都都为为非非0数数,则则返返回回当当前前列列的的结结果果为为1。若若A是是多多维维矩矩阵阵,all(A)将将第第一一个个不不是是单单

56、维维的的维维作作为为向向量量,按按向向量量的的运算规则进行判断;运算规则进行判断;(2 2)all(A,dim) all(A,dim) 指指定定的的第第dimdim维维作作为为向向量量进进行行计计算算。如如all(A,1)all(A,1)就是按向量就是按向量A A第一维进行计算。第一维进行计算。例例4-274-27example4_27.mexample4_27.m判断矩阵判断矩阵A=3 4 8;9 0 2;5 3 7A=3 4 8;9 0 2;5 3 7的所有元素是否都大于或等于的所有元素是否都大于或等于1 1。A=3 4 8;9 0 2;5 3 7 输入矩阵输入矩阵A A= 3 4 8 9

57、 0 2 5 3 7all(all(A=1) 用函数用函数all判断判断 ans= 0A=1 看看矩阵看看矩阵A大于等于大于等于1的值的值 ans= l 1 1 1 0 1 1 1 1all(A=1) 用一次函数用一次函数all判断判断 ans= 1 0 1四、判断函数四、判断函数除除了了关关系系及及逻逻辑辑函函数数外外,MATLABMATLAB还还提提供供了了大大量量的的判判断断函函数数,测测试试特特殊殊值值或或条条件件的的存存在在,返返回回逻逻辑辑值值。这这些些命命令令在在MATLABMATLAB程程序序设设计计和直接交互运算中非常有用。和直接交互运算中非常有用。函数名称函数名称功能功能f

58、inite元素有限,返回真值。元素有限,返回真值。isempty参量为空,返回真值。参量为空,返回真值。isglobal参量是一个全局变量,返回真值。参量是一个全局变量,返回真值。ishold当前绘图保持状态是当前绘图保持状态是ON,返回真值。返回真值。isieee计算机执行计算机执行IEEE算术运算,返回真值。算术运算,返回真值。判断函数判断函数isinf元素无穷大,返回真值。元素无穷大,返回真值。isletter元素为字母,返回真值。元素为字母,返回真值。isnan元素为不定值,返回真值。元素为不定值,返回真值。isreal参量无虚部,返回真值。参量无虚部,返回真值。isspace元素为空

59、格字符,返回真值。元素为空格字符,返回真值。isstr参量为一个字符串,返回真值。参量为一个字符串,返回真值。isstudentMATLAB为学生版,返回真值为学生版,返回真值isunix计算机为计算机为UNIX系统,返回真值。系统,返回真值。isvms计算机为计算机为VMS系统,返回真值。系统,返回真值。1 1、findfind函数函数函函数数find是是找找出出向向量量或或矩矩阵阵中中非非0元元素素的的位位置置标标识识。在在许许多多情情况况下下,都都需需对对矩矩阵阵或或向向量量中中某某一一特特定定条条件件下下的的元素位置进行定位,元素位置进行定位,例例如如将将某某一一矩矩阵阵中中为为0的的

60、元元素素位位置置取取1。如如果果这这个个矩矩阵阵的的元元素素非非常常多多,手手工工修修改改非非常常麻麻烦烦,而而灵灵活活运运用用find函函数数和和各各种种逻逻辑辑关关系系运运算算可可以以实实现现绝绝大大多多数数条条件件的的元元素定位。素定位。【调用格式】:【调用格式】:(1 1)I=find(X) I=find(X) 返返回回向向量量或或矩矩阵阵X X中中的的所所有有非非0 0元元素素的的位位置置标识组成的向量,如果没有非标识组成的向量,如果没有非0 0元素则会返回空值。元素则会返回空值。(2)I,J=find(X) 返返回回矩矩阵阵X的的非非0元元素素行行和和列列的的标标识识。其其中中I是

61、行标识,是行标识,J是列标识。此函数经常用在稀疏矩阵中。是列标识。此函数经常用在稀疏矩阵中。(3 3) I,J,V=find(X) I,J,V=find(X) 返返回回矩矩阵阵X X中中的的非非0 0元元素素行行和和列列的的标标识识。其其中中I I是是行行标标识识,J J是是列列标标识识,同同时时,将将相相应应的的非非0 0元元素素的的值值放放入入列列向向量量V V中中。即即I I和和J J的的值值与与 I,J=find(X)I,J=find(X)相相同同,只只是是增增加加了了非非0 0元素的值这一项。元素的值这一项。 例例4-304-30example4_30.mexample4_30.m函

62、数函数findfind的用法的用法A=0 4 8;9 0 2;5 3 7 输入矩阵输入矩阵A A= 0 4 8 9 0 2 5 3 7find(A) 查查找找矩矩阵阵A中中的的非非零零元素位置元素位置 ans= 结结果果显显示示,非非零零元元素素的的标标识识是是按按列列进进行行的的,即即从从第第2列列开开始始,数数完该列后再数第完该列后再数第3列,依次数下去列,依次数下去 2 3 4 6 7 8 9例例4-304-30example4_30.mexample4_30.m(续续1 1)I,J=find(A) 查查找找矩矩阵阵A中中非非零零元素位置,并列出其具体位置元素位置,并列出其具体位置 I=

63、 2 3 1 3 1 2 3 J= 1 1 2 2 3 3 3例例4-304-30example4_30.mexample4_30.m(续续2 2)I,J,V=find(A) 标标出出矩矩阵阵A中中非零数值的位置,并写出非零数值非零数值的位置,并写出非零数值 I= 2 3 1 3 1 2 3 J= 1 1 2 2 3 3 3例例4-304-30example4_30.mexample4_30.m(续续3 3) V= 指指出出非非零零元素的数值元素的数值 9 5 4 3 8 2 7find(AA(find(A=0)=-5 将将矩矩阵阵A中等于中等于0的元素替换为的元素替换为-5 A= -5 4

64、8 9 -5 2 5 3 7例例4-304-30example4_30.mexample4_30.m(续续4 4)C=3 0 4;0 7 5;1 2 3 输入矩阵输入矩阵C C= 3 0 4 0 7 5 1 2 3A(find(A=-5)=C(find(A=-5) %将将矩矩阵阵A中中等等于于-5的的元元素素的的值值替替换换成成矩矩阵阵C中中相相应应位位置置上上的的元元素素,即即部部分分矩矩阵阵元元素素值值的的替换替换 A= 3 4 8 9 7 2 5 3 7A(fmd(A=9)= 将将矩阵矩阵A中等于中等于9的元素删除的元素删除 A= 3 5 4 7 3 8 2 7 五、运算符的优先级五、运

65、算符的优先级小结小结通过本章的学习,应该能够掌握如下内容:通过本章的学习,应该能够掌握如下内容:(1 1)了解)了解MATLABMATLAB的变量类型,掌握基本表达式;的变量类型,掌握基本表达式;(2 2)了了解解MATLABMATLAB的的数数据据结结构构,掌掌握握MATLABMATLAB的的字字符符串串数组、单元数组以及结构数组的建立和访问方法;数组、单元数组以及结构数组的建立和访问方法;(3 3)掌握)掌握MATLABMATLAB运算符与操作符的含义和用法;运算符与操作符的含义和用法;(4 4)了解并初步掌握)了解并初步掌握MATLABMATLAB的关系运算与逻辑运算;的关系运算与逻辑运算;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号