资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
Matlab 使用单元数组(cell array)和结构数组 (struct array)要在 MALTAB 中实现比较复杂的编程,就不能不用单元数组(cell array)和结构数组(structarray)。而且在 Matlab 中实现 struct 比 C 中更为方便。一. 单元数组单元数组中的每一个元素称为单元(cell). 单元可以包含任何类型的 matlab 数据, 这些数据类型包括数值数组, 字符, 符号对象, 甚至其他的单元数组和结构体. 不同的单元可以包含不同的数据. 1.1 单元数组创建与显示:1、直接赋值法:按单元索引法 和按内容索引法。( 其实也就是将花括号放在等式的右边或是左边的区别)。注意:“按单元索引法”和“按内容索引法”是完全等效的,可以互换使用。通过下面实例,我们看到:花括号用于访问单元的值,而括号()用于标识单元(即:不用于访问单元的值) 。具体理解和()区别可以在下面代码最后分别输入 A2,2和A(2,2)。就会发现 “按内容索引法”能显示完整的单元内容,而“ 按单元索引法() ”有时无法显示完整的单元内容。 A(1,1)=1 2 3; 4 5 6;7 8 9; % 按单元索引法 A(1,2)=2+3i; A(2,1)=A character; A(2,2)=12:-2:0; A %要想详细显示 A 中的内容,可用指令: celldisp(A)A =3x3 double 2.0000 + 3.0000iA character 1x7 double B1,1=1 2 3;4 5 6;7 8 9; % 按内容索引法。 B1,2=2+3i; B2,1=A character; B2,2=12:-2:0;BB =3x3 double 2.0000 + 3.0000iA character 1x7 double2、利用 cell 函数法:即首先用 cell 函数生成一个空的单元数组,然后再向其中添加所需的数据。下面的代码生成一个 2X3 的空单元数组: C=cell(2,3)C = 利用 cell 生成空单元数组后,可以采用“按单元索引法”和“按内容索引法”对其进行赋值。在赋值时,用户一定要注意和()的用法。 C(1,1)=This does workC =This does work C2,3=This workC =This does work This work(1)利用 cell 指令创建单元数组C=cell(2); %预设 空单元数组 )2(C(:,1)=char(Another,text string);10:-1:1 %对第一列单元赋值 C = 2x11 char 1x10 double (2)单元数组的“列”扩充和“行”扩充AC=A C %空格(或逗号)利用来分隔列 A_C=A;C %分号利用来分隔“行” AC = 2x10 char 3x3 double 2x11 char 1.0000+ 2.0000i 1x1 sym 1x10 double A_C = 2x10 char 3x3 double1.0000+ 2.0000i 1x1 sym 2x11 char 1x10 double 【例】cellplot 能用图形形象化地表示单元数组的内容。 (A_C 取自上例)cellplot(A_C,legend) r 单元数组的收缩A_C(3,:)= %删除第 3 行,使 A_C 成为 的单元数组 )23(A_C = 2x10 char 3x3 double1.0000+ 2.0000i 1x1 sym 1x10 double 把 A_C 重组成 单元数组 R_A_C)32(R_A_C=reshape(A_C,2,3) R_A_C = 2x10 char 1x10 double 1x1 sym1.0000+ 2.0000i 3x3 double 1.2 单元数组内容的调取取一个单元f1=R_A_C(1,3) %使用园括号寻访得到的是单元,而不仅是内容。 class(f1) f1 = 1x1 symans =cell 取一个单元的内容f2=R_A_C1,3 %用花括号寻访取得内容 class(f2) f2 =sin(-3*t)*exp(-t)ans =sym 取单元内的子数组f3=R_A_C1,1(:,1 2 5 6) %注意三种括号的不同用途%取第 1 行第 1 列单元内容中的第 1、2、5、6 列。f3 =这是 单元创建 同时调取多个单元内容f4,f5,f6=deal(R_A_C1,3,4)%取三个单元内容,赋值给三个变量 f4 =这是 单元数组创建算例 1f5 =10 9 8 7 6 5 4 3 2 1f6 =1 4 72 5 83 6 9 二. 结构数组2.1. 结构数组的创建Matlab 提供了两种定义结构的方式:直接引用和使用 struct 函数。1. 使用直接引用方式定义结构与建立数值型数组一样,建立新 struct 对象不需要事先申明,可以直接引用,而且可以动态扩充。比如建立一个复数变量 x:x.real = 0; % 创建字段(field)名为 real,并为该字段赋值为 0x.imag = 0 % 为 x 创建一个新的字段 imag,并为该字段赋值为 0x =real: 0imag: 0然后可以将其动态扩充为数组:x(2).real = 0; % 将 x 扩充为 12 的结构数组x(2).imag = 0;在任何需要的时候,也可以为数组动态扩充字段,如增加字段 scale:x(1).scale = 0;这样,所有 x 都增加了一个 scale 字段,而 x(1)之外的其他变量的 scale 字段为空:x(1) % 查看结构数组的第一个元素的各个字段的内容ans =real: 0imag: 0scale: 0x(2) % 查看结构数组的第二个元素的各个字段的内容,注意没有赋值的字段为空ans =real: 0imag: 0scale: 应该注意的是,x 的 real、imag、scale 字段不一定是单个数据元素,它们可以是任意数据类型,可以是向量、数组、矩阵甚至是其他结构变量或单元数组,而且不同字段之间其数据类型不需要相同。例如:clear x; x.real = 1 2 3 4 5; x.imag = ones(10,10);数组中不同元素的同一字段的数据类型也不要求一样:x(2).real = abc;x(2).imag = rand(5,1);甚至还可以通过引用数组字段来定义结构数据类型的某字段:x(3).real = x(1); x(3).imag = 3; x(3)ans =real: 1x1 structimag: 3下面看一个实际的例子来熟悉直接引用方式定义与显示结构。【例】 温室数据(包括温室名、容量、温度、湿度等)的创建与显示。(1) 直接对字段赋值法产生结构变量green_house.name = 一号温室; % 创建温室名字段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 % 显示结构变量结构green_house =name: 一号温室volume: 2000 立方米parameter: 1x1 structgreen_house.parameter % 用字段作用符号. 显示指定字段(parameter)中内容ans =temperature: 2x4 doublehumidity: 2x4 doublegreen_house.parameter.temperature % 显示 temperature 字段中的内容ans =31.2000 30.4000 31.6000 28.700029.7000 31.1000 30.9000 29.6000【例】在上例的基础上,创建结构数组用以保存一个温室群的数据。green_house(2,3).name = 六号温室 ; %产生 23 结构数组green_house % 显示结构数组的结构green_house =2x3 struct array with fields:namevolumeparametergreen_house(2,3) % 显示结构数组元素的结构ans =name: 六号温室volume: parameter: 2. 使用 struct 函数创建结构使用 struct 函数也可以创建结构,该函数产生或把其他形式的数据转换为结构数组。struct 的使用格式为:s = sturct(field1,values1,field2,values2,);该函数将生成一个具有指定字段名和相应数据的结构数组,其包含的数据values1、valuese2 等必须为具有相同维数的数据。对于 struct 的赋值用到了单元数组。数组 values1、values2 等可以是单元数组、数值数组或者单个数值。每个 values 的数据被赋值给相应的 field 字段。当 value 为单元数组的时候,生成的结构数组的维数与单元数组的维数相同。而在数据中不包含单元数组的时候,得到的结构数组的维数是 11 的。例如:s = struct(type,big,little,color,blue,red,x,3,4)s =1x2 struct array with fields:typecolorx得到维数为 12 的结构数组 s,包含了 type、color 和 x 共 3 个字段。这是因为在struct 函数中big,little、blue,red和3,4都是 12 的单元数组,可以看到两个数据成分分别为:s(1,1)ans =type: bigcolor: bluex: 3s(1,2)ans =type: littlecolor: redx: 4下面给出利用 struct 构建
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号