b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

在matlab中使用结构-结构(struct)数组【转】

电脑杂谈  发布时间:2020-06-20 19:02:10  来源:网络整理

结构体_静蕾体结构_四元体设备结构原理图

如果要在MALTAB中实现更复杂的编程,则不能使用结构类型. 并且在Matlab中实现结构比在C中实现更方便.

4. 3.1创建结构数组

Matlab提供了两种定义结构的方法: 直接应用和使用struct函数.

1. 使用直接引用来定义结构

就像创建数字数组,创建新的struct对象一样,不需要事先声明,可以直接引用它,并且可以动态扩展它. 例如,创建一个复杂变量x:

x.real = 0;%创建一个名为real的字段,并将0分配给该字段

x.imag = 0%为x创建一个新的字段imag,并将0分配给该字段

x =

真实: 0

imag: 0

然后可以将其动态扩展为数组:

x(2).real = 0;%将x扩展为1×2结构数组

x(2).imag = 0;

在必要时,您还可以动态扩展数组的字段,例如增加字段比例:

x(1).scale = 0;

这样,所有x都添加了一个scale字段,而除x(1)以外的其他变量的scale字段为空:

x(1)%查看结构数组第一个元素的每个字段的内容

ans =

真实: 0

imag: 0

比例: 0

x(2)%查看结构数组第二个元素的每个字段的内容,请注意未分配的字段为空

ans =

真实: 0

imag: 0

规模: []

应注意,x的实数字段,图像字段和标度字段不一定是单个数据元素,它们可以是任何数据类型,并且可以是向量,数组,矩阵,甚至其他结构变量或单元格数组,以及不同的字段数据类型不必相同. 例如:

清除x; x.real = [1 2 3 4 5]; x.imag =个(10,10);

数组中不同元素的相同字段的数据类型不必相同:

x(2).real ='123';

x(2).imag = rand(5,1);

您甚至可以通过引用数组字段来定义结构数据类型的字段:

x(3).real = x(1); x(3).imag = 3; x(3)

ans =

真实: [1x1结构]

imag: 3

看一个实际的例子,以熟悉直接引用的定义和显示结构.

【示例4.3.1-1】温室数据的创建和显示(包括温室名称,容量,温度,湿度等).

(1)直接为域分配方法生成结构变量

green_house.name ='否. 1个温室';%创建一个温室名称字段

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. 湿度= [62.1 59.5 57.7 61.5; %创建温室湿度场

62.0 61.9 59.2 57.5];

(2)显示结构变量的内容

green_house%显示结构变量结构

green_house =

名称: '否. 1个温室”

体积: “ 2000立方米”

参数: [1x1结构]

green_house.parameter%使用字段功能符号. 在指定的字段(参数)中显示内容

ans =

温度: [2x4倍]

湿度: [2x4倍]

green_house.parameter.temperature%显示温度字段中的内容

ans =

31.2000 30.4000 31.6000 28.7000

29.7000 31.1000 30.9000 29.6000

[示例4.3.1-2]在上面的示例的基础上,创建一个结构数组以保存温室组的数据.

green_house(2,3).name ='第六温室';%产生2×3结构数组

green_house%显示了结构数组的结构

green_house =

具有字段的2x3结构数组:

名称

音量

参数

green_house(2,3)%显示结构数组元素的结构

ans =

名称: “第六温室”

音量: []

参数: []

2. 使用struct函数创建结构

您还可以使用struct函数创建结构. 此函数将其他形式的数据生成或转换为结构数组.

struct的格式为:

s = sturct('field1',values1,'field2',values2,...);

此函数将生成具有指定字段名称和相应数据的结构数组. 其中包含的数据value1,value2等必须是维数相同的数据,并且数据存储位置字段与其他结构位置一一对应. 单元格数组用于分配struct. 数组values1,values2等可以是单元格数组,标量单元格单位或单个值. 每个值的数据都分配给相应的字段字段.

当valuesx是单元格数组时,生成的结构数组的尺寸与单元格数组的尺寸相同. 当单元不包括在数据中时,所得结构数组的尺寸为1×1. 例如:

s = struct('type',{'big','little'},'color',{'blue','red'},'x',{3,4})

s =

具有字段的1x2结构数组:

类型

颜色

x

结构体_静蕾体结构_四元体设备结构原理图

获取尺寸为1×2的结构数组s,其中包含3个类型,颜色和x字段. 这是因为{'big','little'},{'blue','red'}和{3,4}在struct函数中都是1×2单元格数组,您可以看到这两个数据分量是对于:

s(1,1)

ans =

类型: “大”

颜色: “蓝色”

x: 3

s(1,2)

ans =

类型: “小”

颜色: “红色”

x: 4

相应地,如果struct函数以以下形式编写:

s = struct('type',{'big';'little'},'color',{'blue';'red'},'x',{3; 4})

s =

具有字段的2x1结构数组:

类型

颜色

x

您将获得2×1结构数组.

以下是使用struct构造结构数组的具体示例.

【例4.3.1-3】使用函数struct建立温室群.

(1)结构预构建空结构数组的方法之一

a = cell(2,3);%创建2×3单元格数组

green_house_1 = struct('name',a结构体,'volume',a,'parameter',a(1,2))

green_house_1 =

具有字段的2x3结构数组:

名称

音量

参数

(2)结构预构建空结构数组的第二种方法

green_house_2 = struct('name',a,'volume',[],'parameter',[])

green_house_2 =

具有字段的2x3结构数组:

名称

音量

参数

(3)结构预建空结构数组的第三种方法

green_hopuse_3(2,3)= struct('name',[],'volume',[],'parameter',[])

green_hopuse_3 =

具有字段的2x3结构数组:

名称

音量

参数

(4)结构的第四种创建结构数组的方法

a1 = {'Room 6'}; a2 = {'3200立方米'};

green_house_4​​(2,3)= struct('name',a1,'volume',a2,'parameter',[]);

T6 = [31.2,30.4,31.6,28.7; 29.7,31.1,30.9,29.6]; green_house_4​​(2,3).parameter.temperature = T6;

green_house_4​​

ans =

具有字段的2x3结构数组:

名称

音量

参数

4. 3.2结构数组的操作

MATLAB中没有很多函数专用于结构数组的操作. 您可以通过帮助数据类型获取数据类型列表. 您可以看到结构数据类型的相关功能,主要显示在表4.3.1中.

表4.3.1结构数组的运算功能

功能名称功能说明功能名称功能说明

deal将输入处理为输出字段名,以获取结构的字段名

getfield获取结构rmfield中指定字段的值,删除结构的字段(不是字段内容)

setfield设置在结构数组struct中指定的字段的值,创建一个结构数组

将struct2cell结构数组转换为单元格数组isfield以确定该字段是否存在

isstruct确定变量是否为结构类型

以下是一些具体示例,以说明如何对结构数组进行操作.

[示例4.3.2-1]该示例的目的: 首先,演示函数fieldnames,getfield,setfield的用法;其次,让读者感受到结构数组对应用程序工具包的影响;第三,演示将“对象”的结构函数转换为结构化应用程序的示例在此示例中,为了获得钻取结构,借助Toolboxcontrol工具箱中的tf函数,输入LTI线性时不变2首先生成由传递函数描述的2输出系统.

(1)产生2输入2输出系统的传递函数矩阵“对象”

Stf = tf({3,2; [4 1],1},{[1 3 2],[1 1 1]; [1 2 2 1],[1 0]})

将功能从输入1传输到输出...

3

#1: -------------

s ^ 2 + 3 s + 2

4 s + 1

#2: ---------------------

s ^ 3 + 2 s ^ 2 + 2 s + 1

将功能从输入2传输到输出...

2

#1: -----------

s ^ 2 + s + 1

1

#2: -

s

(2)此示例说明了上述LTI对象Stf已转换为结构

SSTF = struct(Stf)%将对象转换为结构并显示结构的组成

SSTF =

num: {2x2单元格}

结构体_静蕾体结构_四元体设备结构原理图

den: {2x2单元格}

变量: 's

lti: [1x1 lti]

(3)获取结构数组SSTF的域名

FN = fieldnames(SSTF)%获得域名的单元格FN

class(FN)%检查FN的类别

FN =

'num'

'den'

“变量”

'lti'

ans =

单元格

(4)获取SSTF.den(2,1)域的内容

FC = getfield(SSTF,'den',{2,1})%等同于FC = SSFT.den(2,1)

FC {1}%大致等于celldisp(FC)

poly2str(FC {1},'s'),%为了以习惯形式显示多项式

FC =

[1x4双]

ans =

1 2 2 1

ans =

s ^ 3 + 2 s ^ 2 + 2 s + 1

(5)重置SSTF.num(2,1)字段的内容

SSTF.num {2,1}%显示了原始情况

SSTF = setfield(SSTF,'num',{2,1},{[1 3 1]});%注意使用“花括号”

SSTF.num {2,1}%显示重置后的情况

ans =

0 0 4 1

ans =

1 3 1

[示例4.3.2-2]此示例演示结构数组SSTF的扩展和收缩. (此示例基于示例4.3.2-1的操作. )

(1)原始结构是“单一结构”

大小(SSTF)

ans =

1 1

(2)扩展表示结构

SSTF(2,2)= struct(tf(1,[11]))%将1 /(s + 1)放入第2行第2列的结构中

大小(SSTF)

SSTF =

具有字段的2x2结构数组:

num

den

变量

lti

ans =

2 2

(3)结构数组收缩的演示: 删除结构数组的第一行

SSTF(1,

{a: 0: 7: 1: 5: 7: 8: d: c: a: 2: c: 0: 5: 2: 2: 7: 3: c: 4} = []%缩小至成为结构

S22n = SSTF(1,2).num,S22d = SSTF(1,2).den%提取第二个结构的num字段和den字段的内容

printsys(S22n {1},S22d {1})%显示为惯用表达式

SSTF =

具有字段的1x2结构数组:

num

den

变量

lti

S22n =

[1x2 double]

S22d =

[1x2 double]

num / den =

1

-----

s + 1

【示例4.3.2-3】向结构数组添加和删除字段.

(1)创建一个结构数组


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-252426-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 豆鹏灿
      豆鹏灿

      12海里也允许正常航行

    • 陈双燕
      陈双燕

      以乱放屁罪判处3年有期徒刑

    热点图片
    拼命载入中...