字符串数组、元胞数组和构架数组PPT课件_第1页
字符串数组、元胞数组和构架数组PPT课件_第2页
字符串数组、元胞数组和构架数组PPT课件_第3页
字符串数组、元胞数组和构架数组PPT课件_第4页
字符串数组、元胞数组和构架数组PPT课件_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.,1,字符串数组(CharacterStringArray),字符串数组的属性和标识,复杂字符串数组的创建,串转换函数和串操作函数,元胞数组(CellArray),元胞数组的创建,元胞数组的内容显示,元胞数组的内容获取,元胞数组的扩充、收缩和重组,构架数组(StructureArray),构架数组的创建,构架数组数据的获取和设置,构架数组域的获取,数据类型归纳,三、字符串元胞构架数组,.,2,3.1字符串数组(CharacterStringArray),【例31】字符串入门,String1=b;String2=Thisisanexample!;%英文字母、空格、数字、标点、中文字符String3=例子chararray;%都是占一个元素位,两个字节s1=class(String1)s1=char,s2=size(String2)s2=119,whosNameSizeBytesClassString11x12chararrayString21x1938chararrayString31x1428chararrays11x48chararrays21x216doublearrayGrandtotalis40elementsusing92bytes,在MATLAB中,字符串是作为字符数组来引入的;一个字符串由多个字符组成,用单引号()来界定;字符串是按行向量进行存储的,每一字符(包括空格)是以其ASCII码的形式存放.。,.,3,3.1.1字符串数组的属性和标识,1.创建串数组,必须将待建字符放在“单引号对”中,当串中本身包含单引号时,每个单引号符用“连续的两个单引号”表示。,2.串数组的大小,size指令可获得串数组的大小。串中的每一个字符,包括中英文字符、空格、标点都算一个元素。,3.串数组的元素标识,按从左至右的顺序依次用1、2、3、4等标识元素在串中的位置。,4.串数组的ASCII码,指令abs和double可以显示串数组对应的ASCII码数值数组,指令char则可把ASCII码数值数组转换成串数组。,5.字符串ASCII码数组的操作,可以对ASCII码数组进行数值数组的各种运算。但其结果就变成一般数值向量的运算,而不再是字符串的运算。,注意:必须在英文状态下输入“单引号对”。将多个字符串变量直接用“,”连接,可构成一个较长的新字符串变量。,.,4,【例32】串数组基本操作,string=thisisanexample!%输入字符串stringstring=thisisanexample!,s_1=string(end:-1:1)%倒序排列string得到s_1s_1=!elpmaxenasisiht,s_2=string(end:-2:1)%倒序排列string且每隔一个字符取一个元素得到s_2s_2=!lmxasit,w=string=a%定义新串STRING,其内容与string相同STRING(w)=char(string(w)-32)%将小写字符转换成大写字符(ASCII码相差32)STRING=THISISANEXAMPLE!,Str=Exm03_2.m,string(5:end)%构造新的字符串StrStr=Exm03_2.misanexample!,.,5,3.1.2复杂字符串数组的创建,1.多行串数组的直接创建,必须保证各行等长,可以利用增减“空格”来实现。,s=Hello,6个字符Nicetomeetyou!17个字符?Errorusing=vertcatAllrowsinthebracketedexpressionmusthavethesamenumberofcolumns.,s=Hello,*ones(1,11)补充11个空格Nicetomeetyou!s=Hello,Nicetomeetyou!,size(s)ans=217,2.利用串操作函数创建多行串数组,利用专门的str2mat、strvcat和char函数可以构造出字符串数组,而不必考虑每行的字符数是否相等,总是按最长的设置,不足的末尾用空格补齐。,s=char(Hello,Nicetomeetyou!);s=str2mat(Hello,Nicetomeetyou!);s=strvcat(Hello,Nicetomeetyou!);,s=Hello,Nicetomeetyou!,.,6,s1=str2mat(Hello,Nicetomeetyou!);s2=strvcat(Hello,Nicetomeetyou!);s1,s2,s_s=size(s),s_s1=size(s1),s_s2=size(s2)s_s=217s_s1=317s_s2=217,s1=s2=Hello,Hello,Nicetomeetyou!Nicetomeetyou!,区别:str2mat认为空串代表空行;strvcat省略空串。,3.利用串转换函数产生数码字符串,常用的数组/字符串转换函数有int2str,num2str,2str:把整数数组转换成字符串数组,非整数将被四舍五入后再转换;num2str:把非整数数组转换成字符串数组,常用于图形中数据点的标识;mat2str:把数值数组转换成字符串数组。,a=0.95760.82.151;4.057.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%生成最大值点的横坐标字符串%生成最大值点的纵坐标字符串%三行字符来标识最大值点%图名称字符串%新建一个图形窗%画一条黑色的水平线%保持图形不被清除%蓝色实线画曲线y(t)%大小为20的红色圆点标记最大值点%在最大值点附近显示注释字符%显示图名%显示横坐标名%显示纵坐标名%取消图形保持,【例33】作出函数y=e-2tsin(3t)的图形,并标注最大值点,cleart=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);Title=y=exp(-2*t).*sin(3*t);Figureplot(t,zeros(size(t),k)holdonplot(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)holdoff,.,8,.,9,3.1.3串转换函数和串操作函数,1.字符串转换函数(详见P76表3.1-1),2.字符串操作函数(详见P77表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=IlikeMATLAB%重复单引号来输入含有单引号的字符串str2=IlikeMATLAB,length(str2)%字符串str2的长度ans=15,x1=double(str1)%查看字符串str1的ASCII码x1=72101108108111,x2=str1+1%字符串的数值运算x2=73102109109112,char(x1)%将ASCII码转换成字符串形式ans=Hello,char(x2)ans=Ifmmp,.,11,char(str1,str2)形成两行字符ans=HelloIlikeMATLAB,strcat(str1,!,str2,.)形成一长串ans=Hello!IlikeMATLAB.,strcmp(str1,str2)比较两串是否相同ans=0,findstr(str2,like)寻找子串like的起始字符在主串中的下标ans=3,isletter(str2)%以逻辑1指示串中英文字母的位置ans=Columns1through12101111001111Columns13through15110,class(str1),class(x1),判断变量类型ans=charans=double,.,12,执行字符串如果需要直接“执行”某一字符串,可以使用eval命令,效果就如同直接在MATLAB命令窗口内输入此命令。,str3=a=2*5str3=a=2*5,eval(str3)%执行字符串a=10,显示字符串字符串可以直接使用disp命令显示出来,即使后面加分号(;)也显示。,disp(请输入2*2的矩阵a)请输入2*2的矩阵a,disp(char(str1,str2);HelloIlikeMATLAB,str1=Hello,str2=IlikeMATLABstr1=Hellostr2=IlikeMATLAB,.,13,3.2元胞数组(CellArray),特点:元胞数组的基本组成单元是元胞(cell),元胞在数组中以下标来进行区分;元胞可以是任何类型、任意大小的数组(如:数值数组、字符串数组、符号对象等);一个元胞数组中各个元胞可以是不同类型的内容;元胞数组的维数不受限制,可以采用单下标或全下标寻址;元胞和元胞里的内容是两个不同范畴的东西,分别通过“元胞外标识(CellIndexing)”和”元胞内编址(ContentAddressing)”来寻访。“外标识的元胞元素”用圆括号对(),而“编址元胞元素内涵”用花括号对,如A(2,3)表示元胞数组A第2行第3列的元胞,A2,3则表示元胞数组A第2行第3列的元胞中的内容。,3.2.1元胞数组的创建,1.直接使用花括号创建,clearA=ThisisthefirstCell.,12;34;eye(3),Tom,JaneA=1x23char2x2double3x3double1x2cell,创建的元胞数组中的元胞A(1,1)是字符串,A(1,2)是数组,A(2,1)是数组,而A(2,2)为一个元胞数组。,whosNameSizeBytesClassA2x2524cellarrayGrandtotalis49elementsusing524bytes,.,14,2.由各元胞创建外标识元胞元素赋值法,B(1,1)=ThisisthesecondCell.;B(1,2)=5+3*i;B(1,3)=12;34;56;B显示元胞数组B=1x24char5.0000+3.0000i3x2double,3.由各元胞内容创建编址元胞元素内涵的直接赋值法,C1,1=ThisisthethirdCell.;C2,1=magic(4)生成21的元胞数组C=ThisisthethirdCell.4x4double,3.2.2元胞数组的内容显示,在MATALB命令窗口中输入元胞数组的名称,并不直接显示出元胞数组的各元胞元素的内容值,而是显示各元胞元素的数据类型和结构,单元素的元胞除外。,1.使用celldisp命令显示元胞数组的内容,A1,1=ThisisthefirstCell.A2,1=100010001,A1,2=1234A2,21=TomA2,22=Jane,celldisp(A),celldisp(C),C1=ThisisthethirdCell.C2=16231351110897612414151,表示元胞数组的元胞元素内容,A2,21表示第2行第2列的元胞元素中存放的元胞数组的第1个元胞元素的内容,.,15,2.使用cellplot命令以图形显示元胞数组的内容,cellplot(A),3.2.3元胞数组的内容获取,1.取元胞数组的元素内容,x1=A1,2%用花括号寻访取A(1,2)元胞元素的内容x1=1234,.,16,【例34】元胞数组的基本应用,C=char(这是,元胞数组);%两行的字符串数组R=reshape(1:9,3,3);%33的数值数组S=sym(sin(-3*t)*exp(-t);%符号表达式A(1,1)=C;%对元胞数组A进行赋值A2,1=S;%注意和()的区别,当用圆括号来寻址时,所表示的是元胞,相应地等号右边也应该是一个元胞;当用花括号来寻址时,所表示的是元胞中的内容,可以是任意类型、大小的数组。,x2=A1,2(2,2)%取A(1,2)元胞元素的数组第二行第二列内容x2=4,2.取元胞数组的元素,x3=A(1,2)用圆括号寻访得到的是元胞x3=2x2double,3.使用deal函数取多个元胞元素的内容,x4,x5,x6=deal(A2,3,4)单下标寻址取A的三个元胞内容,x4=100010001,x5=1234,x6=TomJane,注意:x1是数组,x2是标量。,.,17,celldisp(A)%显示元胞数组A的元胞中的内容A1,1=这是元胞数组A2,1=sin(-3*t)*exp(-t)A1,2=A2,2=147258369,A2,2=R;A%显示元胞数组A的元胞A=2x4char1x1sym3x3double,A2,2=RA=2x4char1x1sym1x1cellcelldisp(A)A1,1=这是元胞数组A2,1=sin(-3*t)*exp(-t)A1,2=A2,21=147258369A2,21(1,3)7,考虑A2,2=R的情况:,class(A(2,1)%元胞的类型ans=cell,class(A2,1)%元胞的内容的类型ans=sym,.,18,A(2,1)%A的第2行第1列的元胞ans=1x1sym,A2,1%A的第2行第1列的元胞中的内容ans=sin(-3*t)*exp(-t),saveexm03_04.mat保存内存变量,3.2.4元胞数组的扩充、收缩和重组,【例35】元胞数组的扩充、收缩和重组,clearloadexm03_04%载入数据文件B=cell(2);%创建空的22元胞数组B1,1=Anothercellarray;%对元胞数组进行赋值B(:,2)=num2str(R);1+2i%对第二列元胞赋值,注意前后大小一致B=Anothercellarray3x7char1.0000+2.0000i,.,19,A_B=A;B%将A,B作为两行排列得到4*2的元胞数组A_B=2x4char1x1sym3x3doubleAnothercellarray3x7char1.0000+2.0000i,cellplot(A_B,legend)%元胞数组的形象结构图,%元胞数组的收缩A_B(3,:)=%删除元胞数组的第3行A_B=2x4char1x1sym3x3double1.0000+2.0000i,RA_B=reshape(A_B,2,3)%重新排列元胞数组的内容,得到23的元胞数组RA_B=2x4char3x3double1x1sym1.0000+2.0000i,元胞数组内容的获取A_B(2,2)%取出A_B中的一个元胞ans=3x3double,.,20,A_B2,2%取出该元胞的所有内容ans=147258369,A_B2,2(2,:)%取出该元胞中第2行的所有元素ans=258,a1,a2=deal(A_B1,2)%一次取出多个元胞,并逐个分配a1=这是元胞数组a2=sin(-3*t)*exp(-t),a3=A_B2,2(:,1,3)%取出第2行第2列元胞内容中的第1,3列a3=172839,注意:花括号、圆括号和中括号在寻址时的不同含义,.,21,3.3构架数组(StructureArray),特点:构架数组的基本组成是构架(Structure),以下标区分各个构架;构架必须划分成“域”后才能使用,每一个构架都包含多个域(Fields);构架不能直接存放数据,数据必须存放在构架下面的“域”中;构架的域可以存放任意类型、任意大小的数组(数值数组、字符串数组、符号对象、元胞等);不同构架的同名域中可以存放不同类型的内容;构架数组可以是任意维的,可以利用单下标或全下标寻址。,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是构架数组,ps(1)和ps(2)是构架,name、color和position是域。,.,22,psps为12的构架数组,有三个域ps=1x2structarraywithfields:namecolorposition,ps(1)显示构架ans=name:曲线1color:redposition:00300300,2.利用struct函数创建,ps(1)=struct(name,曲线1,color,red,position,0,0,300,300);ps(2)=struct(name,曲线2,color,blue,position,100,100,300,300)ps=1x2structarraywithfields:namecolorposition,3.3.2构架数组数据的获取和设置,1.直接获取,x1=ps(1)获取一个构架,x1=name:曲线1color:redposition:00300300,.,23,x2=ps(1).position获取构架ps(1)中一个域position的全部内容x2=00300300,x3=ps(1).position(1,3)获取构架ps(1)position域中第1行第3列的元素内容x3=300,2.用getfield获取构架数组的数据,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:曲线1color:greenposition:00300300,.,24,3.3.3构架数组域的获取,1.使用fieldnames获取构架数组的所有域,x6=fieldnames(ps)x6=namecolorposition,2.获取构架数组域的数据,使用“”合并相同域的数据并排成水平向量,all_x=all_x=曲线1曲线2,使用cat将其变成多维数组,cat(1,ps.position)%沿第一维排列ans=00300300100100300300,cat(2,ps.position)%沿第二维排列ans=00300300100100300300,.,25,【例36】已知2输入2输出的LTI系统的传递函数,利用表示该传递函数的构架数组来练习构架数组的基本操作。,%1.创建代表2输入2输出系统的传递函数的构架数组clearnum=3,2;41,1;%分子系数构成的元胞数组den=1,3,2,1,1,1;1221,10;%分母系数构成的元胞数组,%2.获取构架数组的域名FN=fieldnames(SST)%获取域名,以元胞数组的形式保存FN=numdenVariablelti,SST=struct(ss)%将传递函数矩阵转换成构架数组SST=num:2x2cellden:2x2cellVariable:slti:1x1lti,ss=tf(num,den);%利用控制工具箱函数产生传递函数矩阵,.,26,class(FN)ans=cell,%3.获取构架数组域中的内容ff=SST.den%获取SST的den域中的所有内容,为22的元胞数组ff=1x3double1x3double1x4double1x2double,ff2,1%获取ff中第2行第1列中内容,相当于SST.den2,1ans=1221,poly2str(ff2,1,s)%以易读形式显示多项式ans=s3+2s2+2s+1,%4.赋值操作SST.num2,1ans=0041,SST.num2,1=131;%对SST的num域中第2行第1列的元胞内容进行修改,SST.num2,1ans=131,.,27,%5.构架数组的扩充size(SST)%SST为单构架数组ans=11,SST(2,2)=struct(tf(1,11)%将SST扩充为22的构架数组SST=2x2structarraywithfields:numdenVariablelti,size(SST)ans=22,%6.构架数组的收缩SST(1,:)=%将SST构架数组的第1行删除SST=1x2structarraywithfields:numdenVariablelti,size(SST)ans=12,.,28,%7.构架数组内容的调取Snum=SST(1,2).num%取出SST构架数组第1行第2列的构架的num域Snum=1x2double,Sden=SST(1,2).den%取出SST构架数组第1行第2列的构架的den域Sden=1x2double,printsys(Snum1,Sden1,s)%利用系统函数打印函数显示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】其它命令,cleardept(5).No=5%生成15的构架数组,只有No域dept=1x5structarraywithfields:No,dept(2).teacher=5%任一个构架增加teacher域,整个构架数组都增加teacher域dept=1x5structarraywithfields:Noteacher,dept(2).teacher.male=2;%增加一个构架的teacher域的子域,对其他构架没有影响dept(2).teacher.female=3dept=1x5structarraywithfields:Noteacher,dept(2).teacherans=male:2female:3,.,30,dept(2).teacher=rmfield(dept(2).teacher,male)%删除子域对其他构架没影响dept=1x5structarraywithfields:Noteacher,dept=rmfield(dept,teacher)%删除域对所有构架都有影响dept=1x5structarraywithfields:No,对构架数组增加或减少一个域会影响构架数组内所有的构架;对某一个构架的域增加或减少一个子域不会影响构架数组内的其它构架。,3.4数据类型归纳,.,31,【例38】构架数组和元胞数组之间的转换,fork=1:5dept(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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论