




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,字符串数组(Character String Array),字符串数组的属性和标识,复杂字符串数组的创建,串转换函数和串操作函数,元胞数组 (Cell Array),元胞数组的创建,元胞数组的内容显示,元胞数组的内容获取,元胞数组的扩充、收缩和重组,构架数组(Structure Array),构架数组的创建,构架数组数据的获取和设置,构架数组域的获取,数据类型归纳,三、字符串元胞构架数组,2,3.1 字符串数组(Character String Array),【例31】字符串入门,String1=b; String2=This is an example!;% 英文字母、空格、数字、标点、
2、中文字符 String3=例子char array;%都是占一个元素位,两个字节 s1=class(String1) s1 = char,s2=size(String2) s2 = 1 19, whos Name Size Bytes Class String1 1x1 2 char array String2 1x19 38 char array String3 1x14 28 char array s1 1x4 8 char array s2 1x2 16 double array Grand total is 40 elements using 92 bytes,在MATLAB中,字符串
3、是作为字符数组来引入的; 一个字符串由多个字符组成,用单引号()来界定; 字符串是按行向量进行存储的,每一字符(包括空格)是以其ASCII码的形式存放.。,3,3.1.1 字符串数组的属性和标识,1. 创建串数组,必须将待建字符放在“单引号对”中,当串中本身包含单引号时,每个单引号符用“连续的两个单引号”表示。,2. 串数组的大小,size指令可获得串数组的大小。串中的每一个字符,包括中英文字符、空格、标点都算一个元素。,3. 串数组的元素标识,按从左至右的顺序依次用1、2、3、4等标识元素在串中的位置。,4. 串数组的ASCII码,指令abs和double可以显示串数组对应的ASCII码数值
4、数组,指令char则可把ASCII码数值数组转换成串数组。,5. 字符串ASCII码数组的操作,可以对ASCII码数组进行数值数组的各种运算。但其结果就变成一般数值向量的运算,而不再是字符串的运算。,注意: 必须在英文状态下输入“单引号对”。 将多个字符串变量直接用“,”连接,可构成一个较长的新字符串变量。,4,【例32】串数组基本操作, string=this is an example!%输入字符串string string = this is an example!, s_1=string(end:-1:1)%倒序排列string得到s_1 s_1 = !elpmaxe na si si
5、ht, s_2=string(end:-2:1) %倒序排列string且每隔一个字符取一个元素得到s_2 s_2 = !lmx as it, w=string=a%定义新串STRING,其内容与string相同 STRING(w)=char(string(w)-32)%将小写字符转换成大写字符(ASCII码相差32) STRING = THIS IS AN EXAMPLE!, Str=Exm03_2.m,string(5:end) %构造新的字符串Str Str = Exm03_2.m is an example!,5,3.1.2 复杂字符串数组的创建,1. 多行串数组的直接创建,必须保证各
6、行等长,可以利用增减“空格”来实现。, s=Hello, 6个字符 Nice to meet you! 17个字符 ? Error using = vertcat All rows in the bracketed expression must have the same number of columns., s=Hello, *ones(1,11) 补充11个空格 Nice to meet you! s = Hello, Nice to meet you!,size(s) ans = 2 17,2. 利用串操作函数创建多行串数组,利用专门的str2mat、strvcat和char函数可以
7、构造出字符串数组,而不必考虑每行的字符数是否相等,总是按最长的设置,不足的末尾用空格补齐。, s=char(Hello, Nice to meet you!); s=str2mat(Hello, Nice to meet you!); s=strvcat(Hello, Nice to meet you!);,s = Hello, Nice to meet you!,6, s1=str2mat(Hello, ,Nice to meet you!); s2=strvcat(Hello, ,Nice to meet you!); s1,s2, s_s=size(s),s_s1=size(s1),s_
8、s2=size(s2) s_s = 2 17 s_s1 = 3 17 s_s2 = 2 17,s1 = s2 = Hello, Hello, Nice to meet you! Nice to meet you!,区别: str2mat认为空串代表空行; strvcat省略空串。,3. 利用串转换函数产生数码字符串,常用的数组/字符串转换函数有int2str , num2str , mat2str 。 int2str:把整数数组转换成字符串数组,非整数将被四舍五入后再转换; num2str :把非整数数组转换成字符串数组,常用于图形中数据点的标识; mat2str:把数值数组转换成字符串数组。
9、, a=0.9576 0.8 2.151;4.0 5 7.8; 23数值数组 a1=int2str(a) ; %取整数 a2=num2str(a,2); 保持2位有效数字,转换为串 a3=mat2str(a,2); 保持2位有效数字,转换为一行串 a,a1,a2,a3,7,%清除内存变量 %时间 t 从 0 到 10 每隔 0.01 均匀采样 %对应每一个 t 求 y 值 %求最大值 y_max 及其下标 i_max %生成最大值点的横坐标字符串 %生成最大值点的纵坐标字符串 %三行字符来标识最大值点 %图名称字符串 %新建一个图形窗 %画一条黑色的水平线 %保持图形不被清除 %蓝色实线画曲线
10、 y(t) %大小为 20 的红色圆点标记最大值点 %在最大值点附近显示注释字符 %显示图名 %显示横坐标名 %显示纵坐标名 %取消图形保持,【例33】作出函数y=e-2tsin(3t)的图形,并标注最大值点,clear t = 0 : 0.01 : 10; y = exp( -2*t ) .* sin( 3*t ); y_max, i_max = max( y ); t_text = t = , num2str( t(i_max) ) ; y_text = y = , num2str( y_max ) ; max_text = char( Maxium, t_text, y_text );
11、Title = y = exp( -2*t ) .* sin( 3*t ) ; Figure plot( t,zeros( size(t) ), k ) hold on plot( t, y, b ) plot( t(i_max), y_max, r., MarkerSize, 20 ) text( t(i_max)+0.3, y_max+0.05, max_text ) title( Title ); xlabel( t ) ylabel( y ) hold off,8,9,3.1.3 串转换函数和串操作函数,1. 字符串转换函数(详见P76表3.1-1),2. 字符串操作函数(详见P77表
12、3.1-2),length:用来计算字符串的长度(即组成字符的个数)。 char(s1,s2,):将串s1,s2,逐个写成行,形成多行数组。 class或ischar:用来判断某一个变量是否为字符串。class函数返回char则表示为字符串,而ischar函数返回1表示为字符串。,10,strcmp(s1,s2):比较字符串s1和s2是否相同。返回值如果为1则相同,为0则不同。 findstr(s1,s2):寻找在某个长字符串s1中的子字符串s2,返回其起始位置。 deblank(s ): 删除字符串尾部的空格。,str1=Hello ; str2=I like MATLAB %重复单引号来输
13、入含有单引号的字符串 str2 = I like MATLAB, length(str2) %字符串str2的长度 ans = 15, x1=double(str1) %查看字符串str1的ASCII码 x1 = 72 101 108 108 111, x2=str1+1 %字符串的数值运算 x2 = 73 102 109 109 112, char(x1) %将ASCII码转换成字符串形式 ans = Hello, char(x2) ans = Ifmmp,11, char(str1,str2) 形成两行字符 ans = Hello I like MATLAB, strcat(str1,!,
14、str2,.) 形成一长串 ans = Hello!I like MATLAB., strcmp(str1,str2) 比较两串是否相同 ans = 0, findstr(str2,like) 寻找子串like的起始字符在主串中的下标 ans = 3, isletter(str2) %以逻辑1指示串中英文字母的位置 ans = Columns 1 through 12 1 0 1 1 1 1 0 0 1 1 1 1 Columns 13 through 15 1 1 0, class(str1) ,class(x1), 判断变量类型 ans = char ans = double,12,执行字
15、符串 如果需要直接“执行”某一字符串,可以使用eval命令,效果就如同直接在MATLAB命令窗口内输入此命令。, str3=a=2*5 str3 = a=2*5, eval(str3) %执行字符串 a = 10,显示字符串 字符串可以直接使用disp命令显示出来,即使后面加分号(;)也显示。, disp(请输入2*2的矩阵a) 请输入2*2的矩阵a, disp(char(str1,str2); Hello I like MATLAB,str1=Hello , str2=I like MATLAB str1 = Hello str2 = I like MATLAB,13,3.2元胞数组 (Ce
16、ll Array),特点: 元胞数组的基本组成单元是元胞(cell),元胞在数组中以下标来进行区分; 元胞可以是任何类型、任意大小的数组(如:数值数组、字符串数组、符号对象等); 一个元胞数组中各个元胞可以是不同类型的内容; 元胞数组的维数不受限制,可以采用单下标或全下标寻址; 元胞和元胞里的内容是两个不同范畴的东西,分别通过“元胞外标识(Cell Indexing)”和”元胞内编址(Content Addressing)”来寻访。“外标识的元胞元素”用圆括号对(),而“编址元胞元素内涵”用花括号对,如A(2,3)表示元胞数组A第2行第3列的元胞,A2,3则表示元胞数组A第2行第3列的元胞中的
17、内容。,3.2.1 元胞数组的创建,1. 直接使用花括号创建, clear A=This is the first Cell.,1 2;3 4;eye(3),Tom,Jane A = 1x23 char 2x2 double 3x3 double 1x2 cell ,创建的元胞数组中的元胞A(1,1)是字符串,A(1,2)是数组,A(2,1)是数组,而A(2,2)为一个元胞数组。, whos Name Size Bytes Class A 2x2 524 cell array Grand total is 49 elements using 524 bytes,14,2. 由各元胞创建外标识元
18、胞元素赋值法, B(1,1)=This is the second Cell.;B(1,2)=5+3*i;B(1,3)=1 2;3 4; 5 6; B 显示元胞数组 B = 1x24 char 5.0000+ 3.0000i 3x2 double,3. 由各元胞内容创建 编址元胞元素内涵的直接赋值法, C1,1=This is the third Cell.;C2,1=magic(4) 生成21的元胞数组 C = This is the third Cell. 4x4 double,3.2.2 元胞数组 的内容显示,在MATALB命令窗口中输入元胞数组的名称,并不直接显示出元胞数组的各元胞元素
19、的内容值,而是显示各元胞元素的数据类型和结构 ,单元素的元胞除外。,1. 使用celldisp命令显示元胞数组的内容,A1,1 = This is the first Cell. A2,1 = 1 0 0 0 1 0 0 0 1,A1,2 = 1 2 3 4 A2,21 = Tom A2,22 = Jane, celldisp(A), celldisp(C),C1 = This is the third Cell. C2 = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1,表示元胞数组的元胞元素内容,A2,21表示第2行第2列的元胞元素中存放的元胞数组的第1个元胞
20、元素的内容,15,2. 使用cellplot命令以图形显示元胞数组的内容,cellplot(A),3.2.3 元胞数组的内容获取,1. 取元胞数组的元素内容,x1=A1,2 %用花括号寻访取A(1,2) 元胞元素的内容 x1 = 1 2 3 4,16,【例34】元胞数组的基本应用,C = char(这是, 元胞数组 ); %两行的字符串数组 R = reshape( 1:9,3,3 ); % 33 的数值数组 S = sym( sin(-3*t)*exp(-t) ); %符号表达式 A( 1,1 ) = C ; %对元胞数组 A 进行赋值 A 2,1 = S; %注意 和 () 的区别,当用圆
21、括号来寻址时,所表示的是元胞,相应地等号右边也应该是一个元胞; 当用花括号来寻址时,所表示的是元胞中的内容,可以是任意类型、大小的数组。,x2=A1,2(2,2) %取A(1,2) 元胞元素的数组第二行第二列内容 x2 = 4,2. 取元胞数组的元素,x3=A(1,2) 用圆括号寻访得到的是元胞 x3 = 2x2 double,3. 使用deal函数取多个元胞元素的内容,x4,x5,x6=deal(A2,3,4) 单下标寻址取A的三个元胞内容,x4 = 1 0 0 0 1 0 0 0 1,x5 = 1 2 3 4,x6 = Tom Jane,注意:x1是数组,x2是标量。,17, celldi
22、sp( A ) %显示元胞数组 A 的元胞中的内容 A1,1 = 这是 元胞数组 A2,1 = sin(-3*t)*exp(-t) A1,2 = A2,2 = 1 4 7 2 5 8 3 6 9,A 2,2 = R; A %显示元胞数组 A 的元胞 A = 2x4 char 1x1 sym 3x3 double, A 2,2 = R A = 2x4 char 1x1 sym 1x1 cell celldisp( A ) A1,1 = 这是 元胞数组 A2,1 = sin(-3*t)*exp(-t) A1,2 = A2,21 = 1 4 7 2 5 8 3 6 9 A 2,2 1(1,3)7,考
23、虑A 2,2 = R的情况:, class( A(2,1) ) %元胞的类型 ans = cell, class( A2,1 ) %元胞的内容的类型 ans = sym,18, A( 2,1 ) % A 的第2行第1列的元胞 ans = 1x1 sym, A 2,1 % A 的第2行第1列的元胞中的内容 ans = sin(-3*t)*exp(-t), save exm03_04.mat 保存内存变量,3.2.4 元胞数组的扩充、收缩和重组,【例35】元胞数组的扩充、收缩和重组, clear load exm03_04 %载入数据文件 B = cell( 2 ); %创建空的 22 元胞数组
24、B 1,1 = Another cell array; %对元胞数组进行赋值 B( :,2 ) = num2str(R) ; 1+2i %对第二列元胞赋值,注意前后大小一致 B = Another cell array 3x7 char 1.0000+ 2.0000i,19, A_B = A ; B %将 A, B 作为两行排列得到 4*2 的元胞数组 A_B = 2x4 char 1x1 sym 3x3 double Another cell array 3x7 char 1.0000+ 2.0000i,cellplot( A_B , legend ) %元胞数组的形象结构图,%元胞数组的收
25、缩 A_B( 3,: ) = %删除元胞数组的第 3 行 A_B = 2x4 char 1x1 sym 3x3 double 1.0000+ 2.0000i, RA_B = reshape( A_B, 2,3 ) %重新排列元胞数组的内容,得到 23 的元胞数组 RA_B = 2x4 char 3x3 double 1x1 sym 1.0000+ 2.0000i,元胞数组内容的获取 A_B( 2,2 ) %取出 A_B 中的一个元胞 ans = 3x3 double,20, A_B 2,2 %取出该元胞的所有内容 ans = 1 4 7 2 5 8 3 6 9, A_B 2,2 ( 2,: )
26、 %取出该元胞中第 2 行的所有元素 ans = 2 5 8, a1,a2 = deal( A_B 1,2 ) %一次取出多个元胞,并逐个分配 a1 = 这是 元胞数组 a2 = sin(-3*t)*exp(-t), a3=A_B2,2(:,1,3) %取出第 2 行第2列元胞内容中的第1,3列 a3 = 1 7 2 8 3 9,注意:花括号、圆括号和中括号在寻址时的不同含义,21,3.3 构架数组(Structure Array),特点: 构架数组的基本组成是构架(Structure),以下标区分各个构架; 构架必须划分成“域”后才能使用,每一个构架都包含多个域(Fields) ; 构架不能
27、直接存放数据,数据必须存放在构架下面的“域”中; 构架的域可以存放任意类型、任意大小的数组(数值数组、字符串数组、符号对象、元胞等); 不同构架的同名域中可以存放不同类型的内容; 构架数组可以是任意维的,可以利用单下标或全下标寻址。,3.3.1 构架数组的创建,1. 直接创建法直接对域赋值,ps(1).name= 曲线1 ; %构架的域由(构架名).(域名)标识 ps(1).color=red ; ps(1).position=0,0,300,300 ; ps(2).name=曲线2; ps(2).color=blue; ps(2).position=100,100,300,300 ;,ps是
28、构架数组,ps(1)和ps(2)是构架,name、color和position是域。,22,ps ps为12的构架数组,有三个域 ps = 1x2 struct array with fields: name color position, ps(1) 显示构架 ans = name: 曲线1 color: red position: 0 0 300 300,2. 利用struct函数创建, ps(1)=struct(name,曲线1,color,red,position,0,0,300,300); ps(2)=struct(name,曲线2,color,blue,position,100,1
29、00,300,300) ps = 1x2 struct array with fields: name color position,3.3.2 构架数组数据的获取和设置,1. 直接获取, x1=ps(1) 获取一个构架,x1 = name: 曲线1 color: red position: 0 0 300 300,23, x2=ps(1) .position 获取构架ps(1)中一个域position的全部内容 x2 = 0 0 300 300, x3= ps(1) .position(1,3) 获取构架ps(1) position域中第1行第3列的元素内容 x3 = 300,2. 用get
30、field获取构架数组的数据, x4=getfield(ps,1,color) 获取构架ps(1)中一个域color的全部内容 x4 = red, x5=getfield(ps,1, color,1) 获取构架ps(1) color域中第一个元素的内容 x5 = r,3. 用setfield设置构架数组的数据, ps=setfield(ps,1, color, green); %对ps(1)中color域的内容进行设置 ps(1) ans = name: 曲线1 color: green position: 0 0 300 300,24,3.3.3 构架数组域的获取,1. 使用fieldnam
31、es获取构架数组的所有域, x6=fieldnames(ps) x6 = name color position,2. 获取构架数组域的数据,使用“”合并相同域的数据并排成水平向量, all_x= all_x = 曲线1曲线2,使用cat将其变成多维数组, cat(1,ps.position) %沿第一维排列 ans = 0 0 300 300 100 100 300 300, cat(2,ps.position) %沿第二维排列 ans = 0 0 300 300 100 100 300 300,25,【例36】已知2输入2输出的LTI系统的传递函数,利用表示该传递函数的构架数
32、组来练习构架数组的基本操作。,%1. 创建代表 2 输入 2 输出系统的传递函数的构架数组 clear num = 3,2 ; 4 1,1 ; %分子系数构成的元胞数组 den = 1,3,2,1,1,1 ; 1 2 2 1,1 0 ; %分母系数构成的元胞数组, %2. 获取构架数组的域名 FN = fieldnames( SST ) %获取域名,以元胞数组的形式保存 FN = num den Variable lti,SST = struct( ss ) %将传递函数矩阵转换成构架数组 SST = num: 2x2 cell den: 2x2 cell Variable: s lti: 1
33、x1 lti,ss = tf( num , den ); %利用控制工具箱函数产生传递函数矩阵,26, class( FN ) ans = cell,%3. 获取构架数组域中的内容 ff = SST.den %获取 SST 的 den 域中的所有内容,为 22 的元胞数组 ff = 1x3 double 1x3 double 1x4 double 1x2 double, ff 2,1 %获取 ff 中第 2 行第1列中内容,相当于 SST.den2,1 ans = 1 2 2 1, poly2str( ff2,1,s ) %以易读形式显示多项式 ans = s3 + 2 s2 + 2 s +
34、1, %4. 赋值操作 SST.num 2,1 ans = 0 0 4 1,SST.num 2,1 = 1 3 1 ; %对 SST 的 num 域中第2行第1列的元胞内容进行修改, SST.num 2,1 ans = 1 3 1,27, %5. 构架数组的扩充 size( SST ) %SST为单构架数组 ans = 1 1, SST( 2,2 ) = struct( tf(1,1 1) ) %将 SST 扩充为 22 的构架数组 SST = 2x2 struct array with fields: num den Variable lti, size(SST) ans = 2 2, %6
35、. 构架数组的收缩 SST( 1,: ) = %将 SST 构架数组的第 1 行删除 SST = 1x2 struct array with fields: num den Variable lti, size(SST) ans = 1 2,28, %7. 构架数组内容的调取 Snum=SST(1,2).num %取出 SST构架数组第1行第2列的构架的 num 域 Snum = 1x2 double, Sden=SST(1,2).den %取出 SST构架数组第1行第2列的构架的 den 域 Sden = 1x2 double, printsys( Snum1, Sden1, s ) %利用
36、系统函数打印函数显示 SST 的第1行第2列 %的构架所代表的系统函数 num/den = 1 - s + 1,Snum=SST(1,2).num1; %取出 SST构架数组第1行第2列的构架的 num 域的内容 Sden=SST(1,2).den1; %取出 SST构架数组第1行第2列的构架的 den 域的内容 printsys( Snum, Sden, s ) num/den = 1 - s + 1,29,【例37】其它命令, clear dept(5).No = 5 %生成 15 的构架数组,只有No域 dept = 1x5 struct array with fields: No, d
37、ept(2).teacher=5 %任一个构架增加 teacher 域,整个构架数组都增加 teacher 域 dept = 1x5 struct array with fields: No teacher, dept(2).teacher.male=2; %增加一个构架的teacher域的子域,对其他构架没有影响 dept(2).teacher.female=3 dept = 1x5 struct array with fields: No teacher, dept(2).teacher ans = male: 2 female: 3,30, dept(2).teacher=rmfield
38、(dept(2).teacher,male) %删除子域对其他构架没影响 dept = 1x5 struct array with fields: No teacher, dept=rmfield(dept,teacher) %删除域对所有构架都有影响 dept = 1x5 struct array with fields: No,对构架数组增加或减少一个域会影响构架数组内所有的构架; 对某一个构架的域增加或减少一个子域不会影响构架数组内的其它构架。,3.4 数据类型归纳,31,【例38】构架数组和元胞数组之间的转换, for k = 1:5 dept(k).No = No.,int2str(k); dept(k).teacher = teacher,int2str(k); end %构造 15 构架数组, 有No.域和teacher域, dept 显示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科学饲养下母猪护理的多维度试题及答案
- 专业药剂学知识考察考试试题及答案
- 医院药师考试题及答案
- 知识与应用的结合公共卫生执业考试试题及答案
- 系统规划与管理师考试复习资料的收集与利用研究试题及答案
- 单位网络安全试题及答案
- 系统架构设计师职业生涯规划思考试题及答案
- 突破税务师考试的知识隔阂与瓶颈试题及答案
- 理论与实践相结合试题及答案
- 理论知识与实务操作的结合试题及答案
- 全国统一卷试题及答案
- 银行防抢防暴课件
- 水电工程验收单
- 《哈哈镜笑哈哈》名师课件2022
- 传统皮影戏在小学艺术教育的应用与创新实践
- 2025年国家会展中心上海有限责任公司招聘笔试参考题库含答案解析
- 《大数据时代对会计行业产生的影响探究》10000字【论文】
- 保险精算师述职报告
- 2022浪潮英政服务器CS5260H2用户手册
- 【MOOC】交通运输法规-中南大学 中国大学慕课MOOC答案
- 《真希望你也喜欢自己》房琪-读书分享
评论
0/150
提交评论