Matlab-字符串-元胞-构架数组.ppt

上传人:牧羊曲112 文档编号:6511667 上传时间:2023-11-08 格式:PPT 页数:29 大小:463KB
返回 下载 相关 举报
Matlab-字符串-元胞-构架数组.ppt_第1页
第1页 / 共29页
Matlab-字符串-元胞-构架数组.ppt_第2页
第2页 / 共29页
Matlab-字符串-元胞-构架数组.ppt_第3页
第3页 / 共29页
Matlab-字符串-元胞-构架数组.ppt_第4页
第4页 / 共29页
Matlab-字符串-元胞-构架数组.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《Matlab-字符串-元胞-构架数组.ppt》由会员分享,可在线阅读,更多相关《Matlab-字符串-元胞-构架数组.ppt(29页珍藏版)》请在三一办公上搜索。

1、1,三 字符串元胞构架数组,字符串数组 字符串数组的属性和标识复杂串数组的创建串转换函数和串操作函数元胞数组构架数组数据类型归纳,2,3.1 字符串数组(Character String Array),例3-1 字符串入门 String1=b;String2=This is an example!;%英文字母、空格、数字、标点、中文字符 String3=例子char array;%都是占一个元素位,两个字节 s1=class(String1)s1=char s2=size(String2)s2=1 19 whos Name Size Bytes Class String1 1x1 2 char

2、 array String2 1x19 38 char array String3 1x14 28 char array s1 1x4 8 char array s2 1x2 16 double arrayGrand total is 26 elements using 64 bytes,3,3.1.1 字符串数组的属性和标识,1)创建串数组:必须将待建字符放在“单引号对”中,“单引号对”必须在英文状态下输入。2)串数组的大小:size指令获得串数组的大小。串中的每一个字符,包括中英文字符、空格、标点都算一个元素。3)串数组的标识:自左向右用数字1、2、3、4标识。4)ASCII码显示:abs

3、和double指令可以显示串数组对应的ASCII码数值数组。char指令则可以把ASCII码数值数组转换成串数组。5)ASCII码数组的操作:可以对ASCII码数组进行数值数组的各种运算。注意:必须在英文状态下输入“单引号对”。当字符串中包含单引号时,用连续两个单引号表示。,4,例3-2 串数组基本操作,string=this is an example!%输入字符串stringstring=this is an example!s_1=string(end:-1:1)%倒序排列string得到s_1s_1=!elpmaxe na si siht w=string=a&string STRIN

4、G=string;%将小写字符转换成大写字符 STRING(w)=char(string(w)-32)%ASCII 码相差 32STRING=THIS IS AN EXAMPLE!Str=Exm03_2.m,string(5:end)%构造新的字符串Str=Exm03_1.m is an example!,5,3.1.2 复杂字符串数组的创建,1)直接输入多行串数组必须保证各行等长,可以利用增减“空格”实现。s=Hello,%6个元素,需要补充11个空格Nice to meet you!;%17个元素2)利用串操作函数创建常用的有:char,str2mat,strvcat。不需要考虑各行长度,

5、自动按最长行设置。s=char(Hello,Nice to meet you!);s=str2mat(Hello,Nice to meet you!);s=strvcat(Hello,Nice to meet you!);size(s)=2*17区别:str2mat认为空串 代表空行;strvcat省略空串s1=str2mat(Hello,Nice to meet you);size(s1)=3*17s2=strvcat(Hello,Nice to meet you!);size(s2)=2*17,*ones(1,11),6,3)利用串转换函数创建常用的有:int2str,num2str,ma

6、t2strint2str:整数数组转换成字符串,非整数四舍五入。num2str:非整数数组转换成字符串。mat2str:数值数组转换成字符串。区别:a=0.9576 0.8 2.151;4.0 5 7.8a1=int2str(a)%取整数a2=num2str(a,2)%2位有效数字a3=mat2str(a,2)%一行字符,a=0.9576 0.8000 2.15104.0000 5.0000 7.8000a1=1 1 24 5 8a2=0.96 0.8 2.2 4 5 7.8a3=0.96 0.8 2.2;4 5 7.8,7,例3-3 作出函数图形,并标注最大值点。,clear t=0:0.0

7、1: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)hold onplot(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);xla

8、bel(t)ylabel(y)hold off,%清除内存变量%时间 t 从 0 到 10 每隔 0.01 均匀采样%对应每一个 t 求 y 值%求最大值 y_max 及其下标 i_max%横坐标字符串%纵坐标字符串%三行字符来标识最大值点%图名称字符串%新建一个图形窗%画一条黑色的水平线%保持图形不被清除%蓝色实线画曲线 y(t)%大小为 20 的红圆点标记最大值点%在最大值点附近显示注释字符%显示图名、横坐标名、纵坐标名%取消图形保持,8,9,作业一,作出函数图形,并标注最大值点、最小值点发Email:截止日期:2003年11月22日,10,3.1.3 串转换函数和串操作函数,字符串转换函

9、数详见 P82 表 3.1.1,11,字符串操作函数详见 P83 表 3.1.2,12,3.2 元胞数组,特点:1)元胞数组的每一个基本组成部分成为一个元胞(cell),元胞在数组中以下标来进行区分。2)元胞可以是任何类型、任意大小的数组(例如:数值数组、字符串数组、符号对象等等)。3)一个元胞数组中各个元胞可以是不同类型的内容。4)元胞数组的维数不受限制,可以采用单下标或全下标寻址。注意:圆括号对“()”和花括号对“”的不同作用。A(2,3):表示元胞数组A第 2 行第 3 列的元胞。A 2,3:表示元胞数组A第 2 行第 3 列的元胞中的内容。,13,例3-4元胞数组的基本应用,C=cha

10、r(这是,元胞数组);%两行的字符串数组R=reshape(1:9,3,3);%3*3 的数值数组S=sym(sin(-3*t)*exp(-t);%符号表达式A(1,1)=C;%对元胞数组 A 进行赋值A 2,1=S;%注意 和()的区别A 2,2=R;A%显示元胞数组 A 的元胞A=2x4 char 1x1 sym 3x3 doublecelldisp(A)%显示元胞数组 A 的元胞中的内容A1,1=这是 元胞数组 A2,1=sin(-3*t)*exp(-t)A1,2=,当用圆括号来寻址时,所表示的是元胞,相应的等号右边也应该是一个元胞;当用花括号寻址时,表示的是元胞中的内容,相应的等号右边

11、是元胞中的内容,可以是任意类型、大小的数组。,A=2x4 char 1x1 sym 1x1 cellA(2,2)=1x1 cellA 2,2=3x3 doubleA 2,2 1=1 4 7 2 5 8 3 6 9A 2,2 1(1,3)=7,14,A2,2=1 4 7 2 5 8 3 6 9class(A(2,1)%元胞的类型ans=cellclass(A2,1)%元胞的内容的类型ans=symA(2,1)%A 的第2行第1列的元胞ans=1x1 symA 2,1%A 的第2行第1列的元胞中的内容ans=sin(-3*t)*exp(-t)save exm03_4.mat%保存内存变量显示元胞数

12、组内容的指令是 celldisp。如果直接在指令窗口输入元胞数组名,则只能看到元胞内容的属性,不显示元胞的内容。单元素的元胞除外,可以显示元胞的内容。,15,例3-5 元胞数组的扩充、收缩和重组,clear,load exm03_4%载入数据文件,得到元胞数组 AB=cell(2);%创建空的 2*2 元胞数组 BB 1,1=Another cell array;%对元胞数组进行赋值B(:,2)=num2str(R);1+2i%注意前后大小都是 2*1 B=Another cell array 3x7 char 1.0000+2.0000i%元胞数组的重组AB=A B%将 A,B 作为两列排列

13、得到 2*4 的元胞数组AB=2x4 char Another cell array 3x7 char 1x1 sym 3x3 double 1.0000+2.0000iA_B=A;B%将 A,B 作为两行排列得到 4*2 的元胞数组A_B=2x4 char 1x1 sym 3x3 double Another cell array 3x7 char 1.0000+2.0000i,16,cellplot(A_B,legend)%元胞数组的形象结构图,带图例%元胞数组的收缩A_B(3,:)=%删除元胞数组的第 3 行,得到 3*2 的元胞数组A_B=2x4 char 1x1 sym 3x3 do

14、uble 1.0000+2.0000iRA_B=reshape(A_B,2,3)%重新排列元胞数组的内容,得到 2*3 的元胞数组RA_B=2x4 char 3x3 double 1x1 sym 1.0000+2.0000i,17,%元胞数组内容的调取A_B(2,2)%取出 A_B 中的一个元胞ans=3x3 doubleA_B 2,2%取出该元胞的所有内容ans=1 4 7 2 5 8 3 6 9A_B 2,2(2,:)%取出该元胞中第 2 行的所有元素ans=2 5 8 a1,a2=deal(A_B 1,2)%一次取出多个元胞,并逐个分配a1=这是 元胞数组a2=sin(-3*t)*exp

15、(-t),18,3.3 构架数组,特点:1)基本组成部分是构架(Structure),以下标区分各个构架。2)构架必须划分成“域”后才能使用。3)构架不能直接存放数据,数据必须存放在构架下面的“域”中。4)构架的域可以存放任意类型、任意大小的数组(数值数组、字符串数组、符号对象、元胞等)。5)不同构架的同名域中可以存放不同类型的内容。6)构架数组可以是任意维的,可以利用单下标或全下标寻址。,19,例3-6 构架数组的基本操作,已知:2输入2输出的LTI线性时不变系统的系统传递函数,利用表示该传递函数的构架数组来练习构架数组的基本操作。,%1.创建代表 2 输入 2 输出系统的传递函数的构架数组

16、clearnum=3,2;4 1,1;%分子系数构成的元胞数组den=1,3,2,1,1,1;1 2 2 1,1 0;%分母系数构成的元胞数组ss=tf(num,den);%利用控制工具箱函数产生传递函数矩阵SST=struct(ss)%将传递函数矩阵转换成构架数组,20,SST=num:2x2 cell%元胞数组 den:2x2 cell%元胞数组 Variable:s%字符串 lti:1x1 lti%lti系统%2.获取构架数组的域名FN=fieldnames(SST)%获取域名,以元胞数组的形式保存FN=num den Variable lticlass(FN)ans=cell,21,%

17、3.获取构架数组域中的内容ff=SST.den%获取 SST 的 den 域中的所有内容,为 2*2 的元胞数组ff=1x3 double 1x3 double 1x4 double 1x2 doubleff 2,1%获取 ff 中第 2 行第1列中内容,相当于 SST.den2,1ans=1 2 2 1poly2str(ff2,1,s)%以易读形式显示多项式ans=s3+2 s2+2 s+1%4.赋值操作SST.num 2,1 ans=0 0 4 1SST.num 2,1=1 3 1;%对 SST 的 num 域中(2,1)的元胞内容进行修改SST.num 2,1 ans=1 3 1,22,

18、%5.构架数组的扩充size(SST)ans=1 1SST(2,2)=struct(tf(1,1 1)%将 SST 扩充为 2*2 的构架数组SST=2x2 struct array with fields:num den Variable ltisize(SST)ans=2 2,构架数组扩充、收缩示意图,23,%7.构架数组内容的调取Snum=SST(1,2).num%取出 SST 构架数组第1行第2列的构架的 num 域Snum=%Snum 为元胞数组 1x2 doubleSden=SST(1,2).den%取出 SST 构架数组第1行第2列的构架的 den 域Sden=%Sden 为元胞

19、数组 1x2 doubleprintsys(Snum1,Sden1,s)%利用系统函数打印函数显示 SST%的第1行第2列的构架所代表的系统函数num/den=1-s+1,Snum=SST(1,2).num 1%取出 SST构架数组(1,2)的构架的 num 域的内容Sden=SST(1,2).den 1%取出 SST构架数组(1,2)的构架的 den 域的内容printsys(Snum,Sden,s),24,例3-6 其他命令,cleardept(5).No=5;%生成 1*5 的构架数组,只有No域dept(2).teacher=5%任一个构架增加 teacher 域,%整个构架数组都增加

20、 teacher 域dept=1x5 struct array with fields:No teacherdept(2).teacher.male=2;%增加一个构架的 teacher 域的子域,dept(2).teacher.female=3;%对其他构架没有影响dept(2).teacherans=male:2 female:3dept(2).teacher=rmfield(dept(2).teacher.male);%删除子域对其他架构没有影响dept=rmfield(dept,teacher);%删除域对所有架构都有影响dept=1x5 struct array with field

21、s:No,对构架数组增加或减少一个域会影响构架数组内所有的构架。对某一个构架的域增加或减少一个子域不会影响构架数组内的其它构架。,25,3.4 数据类型归纳,四种基本数组类型:数值、字符、元胞、构架数组。,26,例3-8 构架数组和元胞数组之间的转换,for k=1:5 dept(k).No=No.,int2str(k);dept(k).teacher=teacher,int2str(k);end%构造 1*5 构架数组,有No.域和teacher域DS=struct2cell(dept);%将构架数组转换成元胞数组size(DS)ans=2 1 5Name=Class1;Class2;Cla

22、ss3;Class4;Class5;%给出域名字符串DF=cell2struct(DS,Name,3)%将元胞数组转换成构架数组DF=%按第 3 维转换成域进行转换2x1 struct array with fields:Class1 Class2 Class3 Class4 Class5,27,小结,1)字符串数组的创建和标识单引号对(英文状态下输入),复杂串数组的输入英文字母、空格、数字、标点、中文字符都占一个元素位2)元胞数组的创建和标识圆括号和花括号的区别元胞可以是任何类型、任意大小的数组3)构架数组的创建和标识构架必须划分成域域和子域的改变对整个构架数组的影响构架的域可以存放任何类型、任意大小的数组4)数据类型转换指令int2str,mat2str,num2str,str2num,char,double,cell2struct,struct2cell,28,A_B=2x4 char 1x1 sym 3x3 doubleAnother cell array 3x7 char 1.0000+2.0000i,29,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号