【例4.3.2-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 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 25class(ex(1).f) % 检查域中内容的类型ans =double% 对各结构域中数值数组相应位置的数据相加求和sum_f=zeros(1,5)for k=1:n_ex,sum_f=sum_f+ex(k).f;end,sum_fsum_f =55 60 65 70 75% 对结构数组域中各元素分别求平方根disp([blanks(20) 'ex.f的平方根值'])for k=1:n_ex,disp(sqrt(ex(k).f)),endex.f的平方根值1.0000 1.4142 1.7321 2.0000 2.23612.4495 2.6458 2.8284 3.0000 3.16233.3166 3.4641 3.6056 3.7417 3.87304.0000 4.1231 4.2426 4.3589 4.47214.5826 4.6904 4.7958 4.8990 5.0000【例4.3.2-5】 指令struct2cell和cell2struct的使用。(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\',blanks(4))for k=1:5;fprintf('%s\\',[ex(k).s blanks(1)]);endfprintf('%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 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 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_ex第1页第1行第1列内容fprintf('%5g\',C_ex{2,1,1}) % 显示C_ex第2页第1行第1列内容ans =2 1 5No.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_charF_numricEX1(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:y1y2y3y4y5EX3(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]【例4.3.2-6】 带子域的结构数组转换为元胞数组。本例中的ex结构数组由例4.2.2-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.3333C_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 5C_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