结构体在matlab中的应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
字段 。 当 valuesx 为元胞数组的时候,生成的结构数组的维数与元胞数组的维数相同。 而在数据中不包含元胞的时候,得到的结构数组的维数是 1 X 1 的 。 例如 :
s = struct('type', {'big' ,' üttle'} ,'color', {'blue' ,'时'},' x' , {3,4})
在任何需要的时候,也可以为数组动态扩充字段,如增加字段 scale :
x(l ).scale = 0;
这样,所有 x 都增加了一个 scale 字段,而 x(l) 之外的其他变量的 scale 字段为空:
x(l) %查看结构数组的第一个元素的各个字段的内容
ans =
real: 0
wenku.baidu.com
imag: 0 scale: 0 x(2) %查看结 构数组的第二个元素的各个字段的内容,注意没有赋值的字段为空
ans 一
real: 0
imag: 0
scale: 日 应该注意的是 , x 的 real 、 lmag、 sc此字段不一定是单个数据元素,它们可以是 任意数据类型,可以走向量 、 数组、矩阵甚至是其他结构变量或元胞数组,而 且 不同字段之间其数据类型不需要相同。例如:
= clear x; x.re划= [1 2345]; x .imag ones(10,10);
(2) 显示结构变莹的内容
green_house %显示结构变量结构
= green_ house
name: '一号温室' volume: '2000 立方米' parameter: [1 x1 struct] green_house.paramcter %用域作用符号.显示指定域 (parameter) 中内容 ans = temperature: [2x4 double] hun甘cli句 : [2x4 doub1e] green_house.parameter.temperature %显示 temperature 域中的内容 ans = 31.2000 30.400031.600028.7000 29.700031.100030.900029.6000
俨3 -一
l x2 struct array wi白白 elds:
type color
x 得到维数为 lX2 的结构数组 s ,包含了 type 、 color 和 x 共 3 个字段 。 这是因为 在 strllct 函数中 {'biι'üttle'} 、{旧lue' ,'red' } 和 {3,4} 都是 lX2 的元胞数组,可以看到 两个数据成分分别为 :
结构 (struct) 数组 要在 MALTAB 中实现比较复杂的编程,就不能不用 struct 类型。而且在 MAτLAB 中实现阳uct 比 C 中更为方便。 4.3.1 结构数组的创建 MAτLAB 提供了两种定义结构的方式:直接应用和使用 struct 函数 。 1.使用直接引用方式定义结构 与建立数值型数组一样,建立新 struct 对象不需要事先申明,可以直接引用,而 且可以动态扩充 。 比如建立一个复数变量 x:
ans =
name: ,、t? ~~ 1"全、, -;τ ""7 ìß汪 i主
vol ume: 日 parameter: 日
2 . 使用 struct 函数创建结构 使用 struct 函 数也可以创建结构 , 该函数产生或把其他形式的数据转换为结构数 主且 。 struct 的使用格式为:
s = srurct('fielcll ',valuesl ,'fielcl2',values2,…);
= green_house.parameter.temperature [31.230.4 31.6 28.7 %创建温室温度字段
29.731.1 30.929.6];
= green_house.parameter.huOl idity [62.1 59.557.761.5; % 创建温室温度字段
62.061.959.257.5];
该 函数将生成一个 具 有指定字段名和相应数据的结构数组,其包含的数据 values l 、 val uese2 等必须为具有相同维数的数据 , 数据的存放位置域其他结构位 直一一对应的 。 对于 struct 的赋值用到了元胞数组 。 数组 values1 、 valu es2 等可 以 是元胞数 组、标 量元胞单元或者羊个数值。每个 val ues 的数据被赋佳给相应的 field
= x.real 0; %创建字段名为 real ,并为该字段赋值为 0
x.imag = 0 % 为 x 创建一 个新的字段 lmag ,并为该字段赋值为 0 x= rea): 0 imag: 0
然后可以将旗动态扩充为数组: x(2). re剑 =0;% 将 x 扩元为 l X2 的结 构数纽
= x(2).imag 0;
【 例 4.3 .1 -2 】 在上例的基础上,创建结构数纽用以保存一个温室群的数据。
green_house(2,3) .name 立 '六号温室'; %产 生 2X3 结构数组
green_house % 显示结构数组的结构
green_house 二
2x3 struct array with fielcls: name volume parameter green_house(2,3) %显 示结构 数组元素的结构
数组中不同元素的同一字段的数据类型也不要求一样 :
= x(2).real '123';
x(2) .imag = rand(S,l );
甚至还可以通过引用数组字段来定义结构数据类型的某字段 :
x(3).re到= x(l); x(3) .imag = 3; x(3)
ans =
real: [lx1 s 位uct]
lma吝 3 下面看一个实际的例子来熟悉直接引用方式定义与显示结构 。
【 例 4.3.1 - 1 】 温室数据( 包括 温室 名、容量、 温度 、温度等)的创建与显示 。
(1) 直接对域赋值法产生结构变量
green_house.name = '一号 温室 '; % 创建温室名字段 green_house.volume = '2000 立方米';%创建温室容量字段