QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 832|回复: 0
打印 上一主题 下一主题

结构数组的操作函数 2——例题(四)

[复制链接]
字体大小: 正常 放大

413

主题

36

听众

1854

积分

升级  85.4%

  • TA的每日心情
    开心
    2019-9-18 21:55
  • 签到天数: 258 天

    [LV.8]以坛为家I

    社区QQ达人

    群组2015国赛冲刺

    群组2016美赛公益课程

    群组国赛讨论

    群组第三届数模基础实训

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2015-8-10 21:09 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    【例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



    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    数学中国版主团队!
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-5-22 01:10 , Processed in 0.531154 second(s), 51 queries .

    回顶部