《MATLAB其他数据类型.ppt》由会员分享,可在线阅读,更多相关《MATLAB其他数据类型.ppt(98页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第4 4章章 MATLAB MATLAB其他数据类型其他数据类型 4.1 4.1 字符与字符串字符与字符串 4.2 4.2 单元数组单元数组 4.3 4.3 结构型变量结构型变量 4.4 4.4 符号型变量符号型变量 MATLABMATLAB支持的数据类型见下图:支持的数据类型见下图:4.1 4.1 字符与字符串字符与字符串4.1.1 4.1.1 生成字符串生成字符串4.1.2 4.1.2 字符串元素的读取与显示字符串元素的读取与显示4.1.3 4.1.3 字符串的字符串的ASCIIASCII操作操作4.1.4 4.1.4 字符串的运算字符串的运算4.1.5 4.1.5 字符串的执行字符串的
2、执行4.1.1 4.1.1 生成字符串生成字符串字符与字符串运算是各种高级语言不可缺少字符与字符串运算是各种高级语言不可缺少的部分,的部分,MatlabMatlab具有强大的字符处理能力。具有强大的字符处理能力。在在MATLAB7.0MATLAB7.0中的字符串一般是中的字符串一般是ASCIIASCII值的数值的数值数组,它作为字符串表达式进行显示。字符串一值数组,它作为字符串表达式进行显示。字符串一般以行向量的形式存在,并且每一个字符占用两个般以行向量的形式存在,并且每一个字符占用两个字节的内存。字节的内存。字符串是一个字符串是一个 ASCII ASCII 码的字符数组,与普通码的字符数组,
3、与普通数组一样,字符串也可以形成矩阵(表现为一个字数组一样,字符串也可以形成矩阵(表现为一个字符串有多行)。但是,这些行必须有相同数目的列符串有多行)。但是,这些行必须有相同数目的列数。因此,要用数。因此,要用空格空格以使所有行有相同长度。以使所有行有相同长度。q 字符串和字符数组字符串和字符数组n 字符串必须用字符串必须用单引号单引号括起来括起来n 字符串是由多个字符组成的字符串是由多个字符组成的字符行向量字符行向量str1=Matrix Laboratorystr2=M,a,t,r,i,xn 字符数组必须是方的,即每行的字符个数必须相等字符数组必须是方的,即每行的字符个数必须相等str3=
4、M,a,t;r,i,x若需要在字符串内容中包含单引号,则需要在键入若需要在字符串内容中包含单引号,则需要在键入字符串内容时,连续键入两个单引号即可。字符串内容时,连续键入两个单引号即可。使用使用 char 函数函数ASCII 码码 字符串字符串直接赋值直接赋值只需用单引号(只需用单引号()将需设定的字符串引注即可。)将需设定的字符串引注即可。stringname=the content of the stringstr1=Matrixstr2=Laboratorystr=str1,str2str=char(77,97,116,108,97,98)str=char(str1,str2)l 生成一
5、个字符数组,第一行为生成一个字符数组,第一行为 str1,第二行为,第二行为 str2例例4-84-8:字符数组存储方式:字符数组存储方式 a=house;china;tiger a=house;china;tigera=a=househousechinachinatigertiger a a数组保存字符的顺序为:数组保存字符的顺序为:h c t o h i u i g s n e e a rh c t o h i u i g s n e e a r4.1.2 4.1.2 字符串元素的读取与显示字符串元素的读取与显示 由于字符串是数值数组,可按由于字符串是数值数组,可按数组操数组操作作进行读取
6、。用户可以根据需要读取已经进行读取。用户可以根据需要读取已经设定的字符串中的某一个元素或是多个元设定的字符串中的某一个元素或是多个元素。素。字符串的显示有两种方式:直接显示字符串的显示有两种方式:直接显示和利用和利用 disp disp 函数进行显示。函数进行显示。例例4-104-10:读取例:读取例4-84-8中字符数组中字符数组a a的第的第6 6个元素、个元素、a a的第的第1 1个到个到6 6个元素,并使用个元素,并使用dispdisp函数显示函数显示a a的的第第1 1个到个到6 6个元素。个元素。a=house;china;tiger;a=house;china;tiger;a(6
7、)a(6)ans=ans=i i a(1:6)a(1:6)ans=ans=hctohihctohi disp(a(1:6)disp(a(1:6)hctohihctohistr=Matrixdouble(str(3)double(str)q Matlab中字符是以中字符是以 ASCII 码存储的,因而码存储的,因而区分大小写区分大小写,可用,可用 double 函数查看一个字函数查看一个字符的符的 ASCII 码码4.1.3 4.1.3 字符串的字符串的ASCIIASCII操作操作例例4-114-11:求取字符串:求取字符串s=AaBbCc123s=AaBbCc123的的ASCIIASCII码,
8、码,并将其反变换字符串,存储在变量并将其反变换字符串,存储在变量S S中。中。s=AaBbCc123 s=AaBbCc123 doubledouble(s)(s)ans=ans=65 97 66 98 67 99 49 65 97 66 98 67 99 49 50 5150 51 S=S=charchar(ans)(ans)ascii=char(reshape(32:127,32,3)ascii=char(reshape(32:127,32,3)由于由于MATLAB7.0MATLAB7.0语言是用语言是用C C语言开发的,因语言开发的,因此它的字符串操作与此它的字符串操作与C C语言的操作基
9、本相同。常语言的操作基本相同。常用的字符串操作函数如表所示。用的字符串操作函数如表所示。函数名函数名功能功能函数名函数名功能功能strcat链链接字符串接字符串strvcat垂直垂直链链接字符串接字符串strcmp比比较较字符串大小字符串大小strncmp比比较较字符串的前字符串的前n个字符个字符findstr在其他的字符串中在其他的字符串中寻寻找找该该字符串字符串strjust证证明字符数明字符数组组strmatch查查找可能匹配的字符串找可能匹配的字符串strrep用其他字符串代用其他字符串代替替该该串串strtok查查找字符串中的找字符串中的记记号号blanks生成空字符串生成空字符串d
10、eblank删删除字符串内的空格除字符串内的空格ischar字符串字符串检验检验iscellstr字符串的字符串的单单元元检验检验isletter字母字母检验检验isspace空格空格检验检验stringsstrings函数帮助函数帮助4.1.4 4.1.4 字符串的运算字符串的运算 (1 1)判断字符串是否相同)判断字符串是否相同 (2 2)字符串中字符的分类)字符串中字符的分类 (3 3)查找与替换)查找与替换 (4 4)字符串的合并)字符串的合并 (5 5)字符串与数值的转换)字符串与数值的转换 (1 1)判断字符串是否相同)判断字符串是否相同(1/2)n字符串的比较主要为比较两个字符串
11、是否相同,字符字符串的比较主要为比较两个字符串是否相同,字符串中的子串是否相同和字符串中的个别字符是否相同。串中的子串是否相同和字符串中的个别字符是否相同。用于比较字符串的函数主要是用于比较字符串的函数主要是 strcmp 和和 strncmp。strcmp:用于比较两个字符串是否相同。用法为:用于比较两个字符串是否相同。用法为 strcmp(str1,str2),当两个字符串相同时返回,当两个字符串相同时返回1,否则返回,否则返回0。当所比较的两个字符串是单元字符数组时,返回值为一个当所比较的两个字符串是单元字符数组时,返回值为一个列向量,元素为相应行比较的结果。列向量,元素为相应行比较的结
12、果。strncmp:用于比较两个字符串的前面几个字符是否相同。:用于比较两个字符串的前面几个字符是否相同。用法为用法为 strncmp(str1,str2,n),当字符串的前当字符串的前 n 个字符相同个字符相同时返回时返回1,否则返回,否则返回 0。当所比较的两个字符串时单元数组。当所比较的两个字符串时单元数组时,返回值为列向量,元素为相应行比较的结果。时,返回值为列向量,元素为相应行比较的结果。n还可以通过简单运算比较两个字符串。当两个字还可以通过简单运算比较两个字符串。当两个字符串拥有相同的维数时,可以利用符串拥有相同的维数时,可以利用 MATLAB MATLAB 运算运算法则,对字符数
13、组进行比较。字符数组的比较与法则,对字符数组进行比较。字符数组的比较与数值数组的比较基本相同,不同之处在于字符数数值数组的比较基本相同,不同之处在于字符数组比较时进行比较的是字符的组比较时进行比较的是字符的 ASCII ASCII 码值。进码值。进行比较返回的结果为一个数值向量,元素为对应行比较返回的结果为一个数值向量,元素为对应字符比较的结果。需要注意的是在利用这些运算字符比较的结果。需要注意的是在利用这些运算比较字符串时,相互比较的两个字符串必须有相比较字符串时,相互比较的两个字符串必须有相同数目的元素。同数目的元素。符号符号符号意符号意义义英文英文简简写写=等于等于eq=不等于不等于ne
14、大于大于gt=大于等大于等于于ge(1 1)判断字符串是否相同)判断字符串是否相同(2/2)例例4-134-13:调用函数:调用函数strcmpstrcmp和和strncmpstrncmp判断字判断字符串符串word1word1、word2word2是否相等是否相等 word1=what;word1=what;word2=whatever;word2=whatever;N=strcmp(word1,word2)N=strcmp(word1,word2)N=N=0 0 M=strncmp(word1,word2,4)M=strncmp(word1,word2,4)M=M=1 1例例4-144-1
15、4:使用运算比较符来比较字符串:使用运算比较符来比较字符串word1word1、word2word2%注:此时必须满足注:此时必须满足word1word1、word2word2是相同维数的是相同维数的 word1=what ;%word1 word1=what ;%word1后面加了四个空格后面加了四个空格 word2=whatever;word2=whatever;N=(word1=word2)N=(word1=word2)N=N=1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 M=(word1 M=(word1 word1=what ;word1=what ;word2=w
16、hatever;word2=whatever;isspace(word1)isspace(word1)ans=ans=0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 word2 word2=e e%可以统计可以统计word2word2中含有字符中含有字符e e的个数的个数ans=ans=0 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0(3 3)查找与替换)查找与替换n查找与替换是字符串操作中的一项重要内容。用查找与替换是字符串操作中的一项重要内容。用于查找的函数主要有于查找的函数主要有 findstr findstr,strmatchstrmatch,strrep
17、strrep,strtok strtok 等。等。findstrfindstr:用于在一个字符串中查找子字符串,:用于在一个字符串中查找子字符串,返回子字符串出现的起始位置。用法为返回子字符串出现的起始位置。用法为findstr(str1,str2)findstr(str1,str2),执行时系统首先判断两,执行时系统首先判断两个字符串的长短,然后在长的字符串中检索短个字符串的长短,然后在长的字符串中检索短的子字符串。的子字符串。strrepstrrep:查找字符串中的子字符串并将其替换:查找字符串中的子字符串并将其替换为另一个子字符串。用法为为另一个子字符串。用法为 str=str=strr
18、ep(str1,str2,str3)strrep(str1,str2,str3),将,将 str1 str1 中的所中的所有子字符串有子字符串 str2 str2 替换为替换为 str3 str3。strmatchstrmatch:在字符数组的每一行中查找:在字符数组的每一行中查找是否存在待查找的字符串,存在则返回是否存在待查找的字符串,存在则返回1 1,否则返回,否则返回0 0。用法为。用法为strmatch(str,strmatch(str,STRS)STRS),查找,查找 str str 中以中以 STRS STRS 开头的字开头的字符串。另外可以用符串。另外可以用strmatch(st
19、r,strmatch(str,STRS,exact)STRS,exact),查找精确包含,查找精确包含 STRS STRS 的字符串。的字符串。strtokstrtok:该函数用于选取字符串中的第:该函数用于选取字符串中的第一个部分(一个单词)。该函数的简单一个部分(一个单词)。该函数的简单用法为用法为 strtok(str)strtok(str)。例例4-164-16:演示字符串的查找与替换:演示字符串的查找与替换 s1=This is a good example.;a1=findstr(s1,a)a1=9 18 a1=findstr(s1,good)a1=11 str=strrep(s1
20、,good,great)str=This is a great example.字符串利用字符串利用“”“”运算符进行合并,不过运算符进行合并,不过合并字符串时需要注意以下两点:合并字符串时需要注意以下两点:若使用若使用“,”作为不同字符串之间的间隔,作为不同字符串之间的间隔,则相当于扩展字符串成为更长的字符串向量。则相当于扩展字符串成为更长的字符串向量。若使用若使用“;”作为不同字符串之间的间隔,作为不同字符串之间的间隔,则相当于扩展字符串成为二维或者多维的数组,则相当于扩展字符串成为二维或者多维的数组,这时,不同行上的字符串必须具有这时,不同行上的字符串必须具有同样的长度同样的长度。(4
21、4)字符串的合并)字符串的合并q 水平水平合并合并u 直接使用中括号直接使用中括号u 使用使用 strcat 函数函数 str1=hello,world!str2=strcat(hello,world!)l 使用使用 strcat 时,自动去除时,自动去除原字符串原字符串结尾处结尾处的空格的空格l 水平水平合并合并得到的是一个更长的字符串得到的是一个更长的字符串 q 垂直垂直合并合并u 直接使用中括号直接使用中括号u 使用使用 strvcat 函数函数 str3=Matrix ;Laboratorystr4=strvcat(Matrix,Laboratory)l 在中括号中用在中括号中用分号分
22、号实现垂直实现垂直合并合并,必须保证,必须保证每个字符串每个字符串的的长度相等,否则需用空格补齐长度相等,否则需用空格补齐l 用用 strvcat 合并合并,自动为较短的字符串,自动为较短的字符串补补充充空格空格l 垂直合并垂直合并得到的是一个字符得到的是一个字符数组数组 l 数值矩阵到字符数组:数值矩阵到字符数组:num2str、int2str、mat2strl 字符数组到数值数组:字符数组到数值数组:str2numq 字符串、字符数组与数值数组之间的转换字符串、字符数组与数值数组之间的转换u 按按 ASCII 码转换码转换l 字符数组到数值数组:字符数组到数值数组:doublel 数值数组
23、到字符串:数值数组到字符串:charu 直接将数值数组转换成字符数组直接将数值数组转换成字符数组(4 4)字符串与数值的转换)字符串与数值的转换 函数名函数名功能功能函数名函数名功能功能hex2dec将将16进进制字符串制字符串转转化化为为10进进制制整数整数dec2hex将将10进进制整数制整数转转化化为为16进进制字制字符串符串bin2dec将将2进进制字符串制字符串转转化化为为10进进制制整数整数dec2bin将将10进进制整数制整数转转化化为为2进进制字符制字符串串base2dec转转化化B底字符串底字符串为为10进进制整数制整数hex2num将将16进进制整数制整数转转化化为为双精度
24、数双精度数upper改改该该字符串字符串为为大写大写lower改改该该字符串字符串为为小写小写fprintf把格式化的文本写到文件或把格式化的文本写到文件或显显示屏上示屏上sprintf用格式控制,数字用格式控制,数字转换转换成字符成字符串串sscanf用格式控制,字符串用格式控制,字符串转换转换成数成数字字charASCII转换转换成字符串成字符串num2str数字数字转换转换成字符串成字符串int2str整数整数转换转换成字符串成字符串在在MATLAB7.0MATLAB7.0语言中,还可以使用语言中,还可以使用hex2numhex2num和和hex2dechex2dec等函数实现十进制、十
25、六进制和二进制等函数实现十进制、十六进制和二进制数字之间的转换,如表所示。数字之间的转换,如表所示。例例4-174-17a=97,97.3;97.8,98str1=char(a)str2=num2str(a)str3=int2str(a)str4=mat2str(a)l charchar 的输入参数范围为的输入参数范围为 0,655350,65535,当输入参数,当输入参数中有小数时,直接将小数部分舍去。中有小数时,直接将小数部分舍去。l num2strnum2str 直接将每个数字转换成字符直接将每个数字转换成字符l mat2strmat2str 把整个矩阵转换成字符把整个矩阵转换成字符行向
26、量行向量,包括矩,包括矩阵中的阵中的方括号方括号、空格空格 和和 分号分号(逗号自动去除)(逗号自动去除)例例4-184-18str5=mat2str(97,97.3;97.8,98)l 数值数组转换为字符数组后,表面上看数值数组转换为字符数组后,表面上看象一个数象一个数值数组值数组,但此时的元素是字符而不是数字!,但此时的元素是字符而不是数字!a=1,2,3b=num2str(a)c=2*ad=2*be=2*str2num(b)4.1.5 4.1.5 字符串的执行字符串的执行q 执行字符串所表示的表达式或命令:执行字符串所表示的表达式或命令:evalstr=1+2a=eval(str)eva
27、l(string)eval(string)的作用就是相当于在的作用就是相当于在命令窗命令窗里输入里输入stringstring这个命令并执行。这个命令并执行。比如比如 eval(a=rand(2,3)eval(a=rand(2,3)就相当于在命令窗输入就相当于在命令窗输入a=rand(2,3)a=rand(2,3)后回车后回车str=A=magic(3)eval(str)例例4-194-19:用:用evaleval执行路径改变命令执行路径改变命令 cd c:cd c:pathname=D:MATLAB701;pathname=D:MATLAB701;eval(cd,pathname);eval
28、(cd,pathname);%执行的功能同执行的功能同cd D:MATLAB701cd D:MATLAB701str1=figure(1);mesh(peaks(60);str2=figure(2);waterfall(peaks(60);eval(str1)eval(str2)4.2 4.2 单元数组单元数组(元胞数组)元胞数组)4.2.1 4.2.1 单元数组的生成单元数组的生成元胞数组的基本操作元胞数组的基本操作4.2.3 4.2.3 单元数组的显示与获取单元数组的显示与获取4.2.4 4.2.4 单元数组的变维处理单元数组的变维处理元胞数组是元胞数组是MATLABMATLAB的一种特殊
29、数据类型,可以将的一种特殊数据类型,可以将元胞数组看作无所不包的通用矩阵,或者叫做广义矩元胞数组看作无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的阵。组成元胞数组的元素可以是任何一种数据类型的常数或者变量,每一个元素也可以具有不同的尺寸和常数或者变量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫作元胞(所以元胞数组的元素叫作元胞(cellcell)。和一般的数)。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。值矩阵一样,元胞数组的内存空间也是动态分配的
30、。与数值数组相同,元组数组的维数不受限制,元与数值数组相同,元组数组的维数不受限制,元胞数组可以是一维的、二维的,甚至也可以是多维的。胞数组可以是一维的、二维的,甚至也可以是多维的。访问元胞数组的元素可以使用单下标方式或者全下标访问元胞数组的元素可以使用单下标方式或者全下标方式。方式。元胞数组的创建元胞数组的创建组成元胞数组的内容可以是任意类型的数组成元胞数组的内容可以是任意类型的数据,所以创建元胞数组之前需要创建相应的数据,所以创建元胞数组之前需要创建相应的数据。据。1、用赋值语句直接定义用赋值语句直接定义 A=1 2;3 4;str=Matlab;M=1:4,A,str;celldisp(
31、M)q 可以通过以下两种方式定义一个元胞变量可以通过以下两种方式定义一个元胞变量 创建元胞数组需要使用运算符花括号创建元胞数组需要使用运算符花括号,例如,例如在创建数组在创建数组A A时,使用花括号将不同类型和尺寸的数据时,使用花括号将不同类型和尺寸的数据组合在一起构成了元胞数组,在这个数组中有标量、组合在一起构成了元胞数组,在这个数组中有标量、多维数组、向量和字符串。多维数组、向量和字符串。注意创建注意创建B B时使用了不同的方法,该方法是将数组时使用了不同的方法,该方法是将数组的每一个元素都使用花括号括起来,然后再用数组创的每一个元素都使用花括号括起来,然后再用数组创建的符号方括号建的符号
32、方括号将数组的元素括起来。将数组的元素括起来。还有一种创建元胞数组的方法,如创建数组还有一种创建元胞数组的方法,如创建数组C C时所时所用的方法,用的方法,MATLABMATLAB自动扩展数组的尺寸,没有被明确自动扩展数组的尺寸,没有被明确赋值的元素作为空元胞数组存在。赋值的元素作为空元胞数组存在。一般说来,构成元胞数组的数据类型可以一般说来,构成元胞数组的数据类型可以是字符串、双精度数、元胞数组、结构或其他是字符串、双精度数、元胞数组、结构或其他MATLABMATLAB数据类型。每一个元胞数据也可以为标数据类型。每一个元胞数据也可以为标量、向量、矩阵、量、向量、矩阵、N N维数组。维数组。2
33、、用、用 cell 函数预先分配存储空间,然后对函数预先分配存储空间,然后对元胞的每个元素逐个赋值。元胞的每个元素逐个赋值。cell(m,n)l 生成一个生成一个 m 行行 n 列列 的元胞数组。的元胞数组。cellcell函数的作用是用来创建空元胞数组,可以创建一函数的作用是用来创建空元胞数组,可以创建一维、二维或多维数组,但是创建的数组都为空元胞。注维、二维或多维数组,但是创建的数组都为空元胞。注意区别空数组意区别空数组00个字节个字节 和空元胞之间和空元胞之间44个字节个字节 占用内占用内存的区别。存的区别。元胞数组的基本操作元胞数组的基本操作 主要包括对元胞数组元胞和元胞数据的访主要包
34、括对元胞数组元胞和元胞数据的访问、修改,元胞数组的扩展,收缩或者重组。问、修改,元胞数组的扩展,收缩或者重组。与操作一般的数值数组相类似,操作数值数组与操作一般的数值数组相类似,操作数值数组的函数也可以应用在元胞数组上。例如:的函数也可以应用在元胞数组上。例如:这里使用圆括号直接访问元胞数组的元胞。获取的数这里使用圆括号直接访问元胞数组的元胞。获取的数据也是一个元胞数组。据也是一个元胞数组。例:元胞元素的访问。例:元胞元素的访问。使用花括号可以直接获取元胞数组的元胞内容。使用花括号可以直接获取元胞数组的元胞内容。例例4-204-20:使用:使用cellcell函数生成元胞数组函数生成元胞数组
35、A=cell(2,2)A=cell(2,2)A=A=A1,1=1 A1,1=1A=A=1 1 A1,2=wang A1,2=wangA=A=1 wang 1 wang 4.2.3 4.2.3 元胞数组的显示与获取元胞数组的显示与获取A=1 2;3 4;str=Matlab;M=1:4,A,str N=hello,M;eye(2),magic(3)N1,1N1,2N1,21,2N1,21,2(2,1)l元元胞变量的引用必须使用大括号。相关函数相关函数celldispl 输出元胞变量的内容。输出元胞变量的内容。cellplotl 用图形方式显示元胞变量的内容。用图形方式显示元胞变量的内容。isce
36、lll 判别一个变量是否为元胞变量。判别一个变量是否为元胞变量。例A=1 2;3 4;str=Matlab;M=1:4,A,str;celldisp(M)cellplot(M)iscell(A)iscell(M)celldisp celldisp 函数用于显示单元数组的全部内容,函数用于显示单元数组的全部内容,有时候只需要显示单元数组的一个单元,可以用有时候只需要显示单元数组的一个单元,可以用花括号对单元进行索引。花括号对单元进行索引。例例4-214-21:使用:使用celldispcelldisp函数显示元胞数组内容函数显示元胞数组内容 A=1,wang,1+3i,1 2;3 4;A=1,w
37、ang,1+3i,1 2;3 4;celldisp(A)celldisp(A)A1=A1=1 1A2=A2=wang wangA3=A3=1.0000+3.0000i 1.0000+3.0000iA4=A4=1 2 1 2 3 4 3 4例例4-224-22:使用花括号获取元胞数组的内容:使用花括号获取元胞数组的内容 A=1,wang,1+3i,1 2;3 4;A=1,wang,1+3i,1 2;3 4;A1 A1ans=ans=1 1 A4 A4 A(4)A(4)其类型为其类型为cellcell型,而型,而A4A4类型为其应属的类型类型为其应属的类型ans=ans=1 2 1 2 3 4 3
38、 4元胞数组的变维处理元胞数组的变维处理 改变数组的维数可以通过添加或删除数组改变数组的维数可以通过添加或删除数组元素完成。删除数组元素时,采用的索引方式元素完成。删除数组元素时,采用的索引方式为一维下标,格式为:为一维下标,格式为:A(cell_subscripts)=A(cell_subscripts)=。得到的元胞数组为原数组中剩下元素排列而得到的元胞数组为原数组中剩下元素排列而成,为一维数组。添加数组元素时,自动添成,为一维数组。添加数组元素时,自动添加该数组所对应的行和列,其他元素为空。加该数组所对应的行和列,其他元素为空。另外可以通过函数另外可以通过函数 reshape resha
39、pe 改变数组的改变数组的形状。形状。reshape reshape 函数按照顺序将原元胞数组的函数按照顺序将原元胞数组的元素进行重新放置,得到新的元胞数组元素个元素进行重新放置,得到新的元胞数组元素个数与原数组相同。数与原数组相同。例例4-234-23:添加或删除单元数组的单元:添加或删除单元数组的单元 A=1,wang,1+3i,1 2;3 4;A=1,wang,1+3i,1 2;3 4;B=5 6;7 8,li,zhang,1 2 3;4 5 6;B=5 6;7 8,li,zhang,1 2 3;4 5 6;C=A,B C=A,B D=A;B D=A;B F=D F=D whos C D
40、 whos C D E=D(1,:)E=D(1,:)D2=D2=D(4)=D(4)=F(2,:)=F(2,:)=F(2,5)=energy F(2,5)=energy例例4-244-24:使用:使用reshapereshape函数改变单元数组的结构函数改变单元数组的结构 A=1,wang,1+3i,1 2;3 4;A=1,wang,1+3i,1 2;3 4;B=reshape(A,2,2)B=reshape(A,2,2)B=B=1 1.0000+3.0000i 1 1.0000+3.0000i wang 2x2 double wang 2x2 double whos A B whos A B
41、在在MATLAB7.0MATLAB7.0语言中,与单元数组相关的操语言中,与单元数组相关的操作还有作还有iscelliscell、cellfuncellfun和和num2cellnum2cell等函数,大等函数,大家可以参考家可以参考MATLAB7.0MATLAB7.0的的HelpHelp做进一步了解。做进一步了解。4.3 4.3 结构型变量结构型变量4.3.1 4.3.1 结构型变量的生成结构型变量的生成4.3.2 4.3.2 结构型变量的操作结构型变量的操作 和和C C语言类似,语言类似,MATLABMATLAB也具有结构类型也具有结构类型的数据。结构(的数据。结构(structstruc
42、t)是包含一组记录的)是包含一组记录的数据类型,而记录,则存储在相应的字段中。数据类型,而记录,则存储在相应的字段中。结构的字段可以是任意一种结构的字段可以是任意一种MATLABMATLAB数据类型数据类型的变量或者对象。的变量或者对象。4.3.1 4.3.1 结构型变量的生成结构型变量的生成 可以使用两种方法生成结构型变量,一种可以使用两种方法生成结构型变量,一种是在命令窗口中直接输入,还有一种是使用是在命令窗口中直接输入,还有一种是使用structstruct函数。函数。n通过直接输入结构体各元素值的方法可以创建通过直接输入结构体各元素值的方法可以创建一个结构体。输入的同时定义该元素的名称
43、,一个结构体。输入的同时定义该元素的名称,并使用并使用“.”“.”将变量名与元素名连接。将变量名与元素名连接。nstruct struct 函数的最基本的使用方式是函数的最基本的使用方式是 struct_name=struct(field1,V1,field2,struct_name=struct(field1,V1,field2,V2,.)V2,.),其中,其中 fieldn fieldn 是各成员变量名,是各成员变量名,VnVn为对应的各成员变量的内容。为对应的各成员变量的内容。例例4-254-25:用直接输入法生成结构型变量:用直接输入法生成结构型变量 student.score=90
44、95 89 100 99;student.score=90 95 89 100 99;student.name=Li Ning;student.name=Li Ning;student.weight=69;student.weight=69;student.height=178;student.height=178;student.number=200708008;student.number=200708008;student student whos student whos student 例例4-264-26:使用:使用structstruct函数生成结构型变量函数生成结构型变量 s=
45、struct(field1,field2,s=struct(field1,field2,.)creates an empty structure with.)creates an empty structure with fields field1,field2,.fields field1,field2,.student=struct(number,200708008,student=struct(number,200708008,200709009,name,Li Ning,Ma Lin)200709009,name,Li Ning,Ma Lin)student(2).name stude
46、nt(2).name4.3.2 4.3.2 结构型变量的操作结构型变量的操作对于结构的基本操作其实就是对结构型变对于结构的基本操作其实就是对结构型变量元素包含的记录的操作。主要有结构量元素包含的记录的操作。主要有结构记录数据的访问,字段的增加和删除等。记录数据的访问,字段的增加和删除等。访问结构数组元素包含的记录的方法访问结构数组元素包含的记录的方法很简单,直接使用结构数组的名称和字很简单,直接使用结构数组的名称和字段的名称以及操作符段的名称以及操作符“.”“.”完成相应的操完成相应的操作。作。添加成员变量添加成员变量 n如果需要向结构体中添加新的成员,可以如果需要向结构体中添加新的成员,可以
47、直接输入该变量的名称并赋值。直接输入该变量的名称并赋值。例例4-274-27:在结构型变量中添加成员变量:在结构型变量中添加成员变量 student=struct(number,200708008,student=struct(number,200708008,200709009,name,Li Ning,Ma 200709009,name,Li Ning,Ma Lin);Lin);student(1).gender=Male;student(1).gender=Male;student(1).age=21;student(1).age=21;student(2).gender=Male;st
48、udent(2).gender=Male;student(2).age=22;student(2).age=22;student student删除成员变量删除成员变量 n在在 MATLAB MATLAB 中可以使用函数中可以使用函数 rmfield rmfield 从结从结构体中删除成员变量。命令构体中删除成员变量。命令 S=rmfield(S,field)S=rmfield(S,field)将删除结构体将删除结构体 S S 中的成员中的成员 field field,同时保留,同时保留 S S 原有的结构。原有的结构。n可以使用命令可以使用命令 S=rmfield(S,fields)S=rm
49、field(S,fields)一次一次删除多个成员,其中删除多个成员,其中 fields fields 为字符行变为字符行变量或者元胞型变量。该命令删除量或者元胞型变量。该命令删除 fields fields 中指定的成员。中指定的成员。例例4-284-28:在结构型变量中删除成员变量在结构型变量中删除成员变量s=rmfield(s,field)removes the specified field from the structure array s.student=struct(number,200708008,student=struct(number,200708008,2007090
50、09,name,Li Ning,Ma Lin);200709009,name,Li Ning,Ma Lin);student=rmfield(student,name)student=rmfield(student,name)student=student=1x2 struct array with fields:1x2 struct array with fields:number number 在在MATLAB7.0MATLAB7.0中中,getfieldgetfield和和setfieldsetfield函数也是有关结构型变量的函数。函数也是有关结构型变量的函数。getfieldgetf