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

下载本文档

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

文档简介

1、1第三章 字符串数组、元胞数组和构架数组2 本章涉及MATLAB中另三个重要的基本数据类型。这章内容对理解MATLAB自身的面向对象特征和复杂指令的正确使用十分重要。 33.1 字符串数组(1) 创建方式的比较 字符串与数值是两种不同的数据类型,故它们的创建方式也就不同: ()数值变量是通过指令窗口中的数字赋值创建的; ()字符变量是在指令窗中,先把待建的字符放在“单引号对”中,再按Enter键。 注:单引号必须在英文状态下输入4(2)基本规则:所有字符串都用单引号括起来;字符串中的每一个字符都是该字符串变量中的一个元素;字符串中的字符以ASC码形式存储,因而区分大小写。53.1.1 字符串入

2、门 String1=b; String2=This is an example! % 英文字母、空格、数字、标点、中文字符 String3=例子char array; % 都是占一个元素位,两个字节(数值标量需8个字节) 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

3、double arrayGrand total is 40 elements using 92 bytes61)创建串数组:“单引号对”必须在英文状态下输入。eg: a=This is an example. a = This is an example. 2)串数组的大小:size指令获得串数组的大小。串中的每一个字符,包括中英文字符、空格、标点都算一个元素。eg: size(a) ans = 1 19 3)串数组的元素标识:自左向右用数字1、2、3、4标识。eg: a14=a(1:4) ra=a(end:-1:1) a14 = This ra = .elpmaxe na si sihT 3

4、.1.2 字符串数组的属性和标识74) ASCII码显示:abs和double指令可以显示串数组对应的ASCII码数值数组。char指令则可以把ASCII码数值数组转换成串数组。eg: ascii_a=double(a) % 产生ASCII码 ascii_a = Columns 1 through 12 84 104 105 115 32 105 115 32 97 110 32 101 Columns 13 through 19 120 97 109 112 108 101 46 char(ascii_a) ans = This is an example. 5) ASCII码数组的操作:可

5、以对ASCII码数组进行数值数组的各种运算。eg: w=find(a=a&a C = char( 这是, 元胞数组 ); %两行的字符串数组R = reshape( 1:9,3,3 ); % 3*3 的数值数组S = sym( sin(-3*t)*exp(-t) ); %符号表达式A( 1,1 ) = C ; %对元胞数组 A 进行赋值 (外标识元胞元素赋值法)A 2,2 = R; % 注意 和 () 的区别 (编址元胞元素内涵的直接赋值法)A 2,1 = S; A %显示元胞数组 A 的元胞A = 2x4 char 1x1 sym 3x3 doublecelldisp( A ) %显

6、示元胞数组 A 的元胞中的内容A1,1 =这是 元胞数组 A2,1 = sin(-3*t)*exp(-t) A1,2 = A2,2 = 1 4 7 2 5 8 3 6 921class( 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) 显示元胞数组内容的指令是 celldisp。如果直接在指令窗口输入元胞数组名,则只能看到元胞内容的属性,不显示元胞的内容。单元

7、素的元胞除外,可以显示元胞的内容。223.2.2 元胞数组的扩充、收缩和重组 元胞数组的扩充、收缩和重组的方法大致与数值数组情况相同。(1)元胞数组的扩充C=cell(2); % 预设(22)空元胞数组C(:,1)=char(Another,text string);10:-1:1 C = 2x11 char 1x10 double CC=C CC_C=C;C CC = 2x11 char 2x11 char 1x10 double 1x10 double C_C = 2x11 char 1x10 double 2x11 char 1x10 double 23 例:例:cellplot能用图形

8、形象化地表示元胞数组的内容。(C_C取自上例) cellplot(C_C,legend) 图 元胞数组C_C的形象化结构图1.522.533.544.555.524(2)元胞数组的收缩 C_C(3,:)= %删除第三行,使C_C成为(32)的元胞数组 C_C = 2x11 char 1x10 double 1x10 double (3)元胞数组的重组例:把C_C重组成(23)的元胞数组R=reshape(C_C,2,3)R = 2x11 char 1x10 double 1x10 double 253.2.3 元胞数组内容的调取 前面已经讲过,花括号用于内容编制和寻访,本节将更详细地阐述调取元

9、胞数组内容的方法。【例3.2-6】元胞数组内容的调取示例。 (1) 选一个元胞f1=R(1,3)class(f1) f1 = ans = cell(2)选一个元胞的内容f2=R1,3class(f2) f2 = ans = double(3)选元胞内的子数组f3=R1,1(:,1 2 5 6 7) f3 =Anherte st(4)同时调取多个元胞内容f4,f5,f6=deal(R1,3,4) f4 =Another text stringf5 = 10 9 8 7 6 5 4 3 2 1f6 = 注:deal可把输入宗量逐个分配给输出宗量使用26 3.3 架构数组特点:1) 基本组成部分是构

10、架(Structure),数组中的每个构架是平等的,以下标区分各个构架。2) 构架必须划分成“域”后才能使用。3) 构架不能直接存放数据,数据必须存放在构架下面的“域”中。4) 构架的域可以存放任意类型、任意大小的数组(数值数组、字符串数组、符号对象、元胞等)。5) 不同构架的同名域中可以存放不同类型的内容。6) 构架数组可以是任意维的,可以利用下标寻址。273.3.1 构架数组的直接创建法及显示 构架数组的结构形式与一般数组(如数值数组)不同【例1】本例通过温室数据(包括温室名、容积、温度、湿度等)演示:单构架的创建和显示。(1)直接对域赋值法产生)直接对域赋值法产生“单构架单构架”,即(,

11、即(11)构架数组)构架数组green_=一号房一号房; % 构架的域由(构架名)构架的域由(构架名).(域名)标识(域名)标识green_house.volume=2000立方米立方米;green_house.parameter.temperature=31.2 30.4 31.6 28.7 29.7 31.1 30.9 29.6;green_house.parameter.humidity=62.1 59.5 57.7 61.5 62.0 61.9 59.2 57.5;(2)显示)显示“单构架单构架”结构和内容结构和内容 green_house % 显示单构架结构显示单

12、构架结构green_house = name: 一号房 volume: 2000立方米 parameter: 1x1 struct green_house.parameter % 显示显示parameter域中内容域中内容ans = temperature: 2x4 double humidity: 2x4 double green_house.parameter.temperature %显示显示temperature域中的内容域中的内容 ans = 31.2000 30.4000 31.6000 28.7000 29.7000 31.1000 30.9000 29.6000 28【例2】本

13、例演示构架数组的创建和显示,并利用构架数组保存一个温室群的数据。本例的运行以例1为先导。(1)直接对域赋值法“构架数组”green_house(2,3).name=六号房六号房;(2)显示构架数组的结构和构架元素的内容green_house %显示构架数组的结构:构架行列数;构架的域 green_house = 2x3 struct array with fields: name volume parameter green_house(2,3) %显示元素构架的结构:域;是否有子域 ans = name: 六号房 volume: parameter: 293.3.2 利用构架函数创建构架数组

14、 专门的构架函数:struct【例3】利用构造函数struct,建立温室群的数据库。(1)struct预建空构架数组方法之一a=cell(2,3);green_house_1=struct(name,a,volume,a,parameter,a(1,2) green_house_1 = 2x3 struct array with fields: name volume parameter (2)struct预建空构架数组方法之二green_house_2=struct(name,a,volume,parameter,) green_house_2 = 2x3 struct array with

15、 fields: name volumeparameter 30(3) struct预建空构架数组方法之三green_hopuse_3(2,3)=struct(name,volume,parameter,) green_hopuse_3 = 2x3 struct array with fields: name volume parameter (4) struct创建构架数组方法之四a1=六号房六号房;a2=3200立方米立方米;green_house_4(2,3)=struct(name,a1,volume,a2,parameter,);T6=31.2,30.4,31.6,28.7;29.7

16、,31.1,30.9,29.6;green_house_4(2,3).parameter.temperature=T6;green_house_4 ans = 2x3 struct array with fields: name volume parameter 313.3.3 数值运算操作和函数对构架数组的应用 如果构架数组的域中内容是数值类型数据,那么第二章中介绍的所有操作和函数也都适用。例:数值运算操作和函数在构架域上的作用。n_ex=5;% 构架数组的长度构架数组的长度for k=1:n_ex,ex(k).f=(k-1)*n_ex+1:5;end ex % 创建(创建(15)构架数组)

17、构架数组ex = % 显示构架数组的结构显示构架数组的结构1x5 struct array with fields: f %显示构架数组的域中内容显示构架数组的域中内容disp(blanks(10) 构架域中内容构架域中内容)for k=1:n_ex,disp(ex(k).f),end 构架域中内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 class(ex(1).f) ans =double %对各构架域中数值数组相应位置的数据相加求和对各构架域中数值数组相应位置的数据相加求和sum_f=zeros(1,5);for k=1:n_ex,sum_f=sum_f+ex(k).f;end,sum_f sum_f = 55 60 65 70 75 %对构架数组域中各元素分别求平方根对构架数组域中各元素分别求平方根disp(blanks(20) ex.f的平方根值的平方根值)for k=1:n_ex,disp(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论