数学建模社区-数学中国

标题: 结构数组的操作函数 2——例题(四) [打印本页]

作者: 森之张卫东    时间: 2015-8-10 21:09
标题: 结构数组的操作函数 2——例题(四)

【例1-4】数值运算操作和函数在结构域上的作用。

n_ex = 5;            % 结构数组的长度

for k = 1:n_ex,   % 创建1×5结构数组

ex(k).f = (k-1)*n_ex + [1:5];

end;

ex                          % 显示结构数组的结构

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(sqrt(ex(k).f)),

end

ex.f的平方根值

1.0000 1.4142 1.7321 2.0000 2.2361

2.4495 2.6458 2.8284 3.0000 3.1623

3.3166 3.4641 3.6056 3.7417 3.8730

4.0000 4.1231 4.2426 4.3589 4.4721

4.5826 4.6904 4.7958 4.8990 5.0000


【例1-5指令struct2cellcell2struct的使用。

1)创建“带2个域的结构数组”

for k=1:5,

ex(k).s=['No.' int2str(k)];

ex(k).f=(k-1)*5+[1:5];

end

2)显示结构数组的内容

fprintf( '%s\n' , 'ex.s域的内容' );
fprintf( '%s\n',  blanks(4)  );

for k=1:5;
fprintf( '%s\\',[ex(k).sblanks(1)] );
end

fprintf('%s\n',blanks(1)),fprintf('%s\n','ex.f域的内容 ')

for k=1:5;
disp(ex(k).f);
end
     %显示ex.f域内容

ex.s域的内容

No.1 \No.2 \No.3 \No.4 \No.5 \

ex.f域的内容

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

3)把ex结构数组转换为元胞数组

C_ex=struct2cell(ex);            % 2个域的(1×5)结构数组转换为(2×1×5)元胞数组

size(C_ex)

fprintf('%s\',[C_ex{1,1,1},blanks(3)])         % 显示C_ex1页第1行第1列内容

fprintf('%5g\',C_ex{2,1,1})                           % 显示C_ex2页第1行第1列内容

ans =

2 1 5

No.1 1 2 3 4 5

4)把元胞数组转换为结构数组之一

FS={'S_char';'F_num'};        % 用元胞数组预建域名字符串

EX1=cell2struct(C_ex,FS,1)      % 元胞数组向结构数组转换

EX1 =

1x5 struct array with fields:

S_char

F_numric

EX1(1)                   % 观察新结构EX1第一结构的情况

ans =

S_char: 'No.1'

F_numric: [1 2 3 4 5]


5)把元胞数组转换为结构数组之二

EX2=cell2struct(C_ex,'xx',2)

EX2 =

2x5 struct array with fields:

xx

6)把元胞数组转换为结构数组之三

YY=strvcat('y1','y2','y3','y4','y5');EX3=cell2struct(C_ex,YY,3)

EX3 =

2x1 struct array with fields:

y1

y2

y3

y4

y5

EX3(1)                   % 观察第一结构情况

ans =

y1: 'No.1'

y2: 'No.2'

y3: 'No.3'

y4: 'No.4'

y5: 'No.5'

EX3(2)                   % 观察第二结构情况

ans =

y1: [1 2 3 4 5]

y2: [6 7 8 9 10]

y3: [11 12 13 14 15]

y4: [16 17 18 19 20]

y5: [21 22 23 24 25]

【例1-6   带子域的结构数组转换为元胞数组。本例中的ex结构数组由例1-5生成,然后再运行以下程序。

ex(1,1).s                 % 原结构ex(1,1).s中的内容

ans =

No.1

% 增设子域,并把ex结构数组扩充为(3×5)。

ex(1,1).s.sub='SUB 1';         % ex(1,1).s中的字符串将因本指令而消失

ex(3,1).s.sub='SUB 3';

ex(3,1).s.num=1/3;

ex(1,1).s                 % 经新赋值后,ex(1,1).s中的内容

ans =

sub: 'SUB 1'

ex(3,1).s                 % 经新赋值后,ex(3,1).s中的内容

ans =

sub: 'SUB 3'

num: 0.3333

C_ex_sub=struct2cell(ex)       % 把结构转换为元胞数组

C_ex_sub(:,:,1) =

[1x1 struct] [] [1x1 struct]

[1x5 double] [] []

C_ex_sub(:,:,2) =

'No.2' [] []

[1x5 double] [] []

C_ex_sub(:,:,3) =

'No.3' [] []

[1x5 double] [] []

C_ex_sub(:,:,4) =

'No.4' [] []

[1x5 double] [] []

C_ex_sub(:,:,5) =

'No.5' [] []

[1x5 double] [] []

size(C_ex_sub)             % 观察新元胞数组的大小

ans =

2 3 5

C_ex_sub{1,1,1}             % 观察第一元胞中的内容

ans =

sub: 'SUB 1'

C_ex_sub{1,3,1}             % 观察(1,3,1)元胞中的内容

ans =

sub: 'SUB 3'

num: 0.3333








欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5