Matlab使用单元数组(cell array)和结构数组 (struct array)
要在MALTAB中实现比较复杂的编程,就不能不用单元数组(cell array)和结构数组(structarray)。而且在Matlab中实现struct比C中更为方便。
一. 单元数组
  单元数组中的每一个元素称为单元(cell). 单元可以包含任何类型的matlab数据, 这些数据类型包括数值数组, 字符, 符号对象, 甚至其他的单元数组和结构体. 不同的单元可以包含不同的数据.
1.1单元数组创建与显示:
1、直接赋值法:按单元索引法 和按内容索引法。(其实也就是将花括号放在等式的右边或是左边的区别)。注意:“按单元索引法”和“按内容索引法”是完全等效的,可以互换使用。通过下面实例,我们看到:花括号{}用于访问单元的值,而括号()用于标识单元(即:不用于访问单元的值)。具体理解{}和()区别可以在下面代码最后分别输入A{2,2}和A(2,2)。就会发现“按内容索引法{}”能显示完整的单元内容,而“按单元索引法()”有时无法显示完整的单元内容。
>> A(1,1)={[1 2 3; 4 5 6;7 8 9]};          % 按单元索引法
>> A(1,2)={2+3i};
>> A(2,1)={'A character'};
>> A(2,2)={12:-2:0};
>> A                                    %要想详细显示A中的内容,可用指令:celldisp(A)
A =
    [3x3 double]    [2.0000 + 3.0000i]
    'A character'          [1x7 double]
>> B{1,1}=[1 2 3;4 5 6;7 8 9];          % 按内容索引法。
>> B{1,2}=2+3i;
>> B{2,1}='A character';
>> B{2,2}=12:-2:0;
>>B
B =
    [3x3 double]    [2.0000 + 3.0000i]
    'A character'          [1x7 double]
2、利用cell函数法:即首先用cell函数生成一个空的单元数组,然后再向其中添加所需的数据。下面的代码生成一个2X3的空单元数组:
>> C=cell(2,3)
C =
    []    []    []
    []    []    []
利用cell生成空单元数组后,可以采用“按单元索引法”和“按内容索引法”对其进行赋值。在赋值时,用户一定要注意{}和()的用法。
>> C(1,1)={'This does work'}
C =
    'This does work'    []    []
                  []    []    []
>> C{2,3}='This work'
C =
    'This does work'    []            []
                  []    []    'This work'
1)利用cell指令创建单元数组
C=cell(2);                                                %预设空单元数组 
C(:,1)={char('Another','text string');10:-1:1}    %对第一列单元赋值
C =
    [2x11 char  ]    []
    [1x10 double]    []
2)单元数组的“列”扩充和“行”扩充
AC=[A C]                    %空格(或逗号)利用来分隔列
A_C=[A;C]                    %分号利用来分隔“行” 
AC =
          [2x10 char]    [3x3 double]    [2x11 char  ]    []
    [1.0000+ 2.0000i]    [1x1 sym  ]    [1x10 double]    []
A_C =
        [2x10 char  ]    [3x3 double]
    [1.0000+ 2.0000i]    [1x1 sym  ]
        [2x11 char  ]              []
        [1x10 double]              []
【例】cellplot能用图形形象化地表示单元数组的内容。(A_C取自上例)
cellplot(A_C,'legend')
单元数组的收缩
A_C(3,:)=[]                %删除第3行,使A_C成为的单元数组
A_C =
        [2x10 char  ]    [3x3 double]
    [1.0000+ 2.0000i]    [1x1 sym  ]
        [1x10 double]              []
A_C重组成单元数组R_A_C
R_A_C=reshape(A_C,2,3)
R_A_C =
          [2x10 char]    [1x10 double]    [1x1 sym]
[1.0000+ 2.0000i]    [3x3  double]          []
1.2 单元数组内容的调取
取一个单元
f1=R_A_C(1,3)                %使用园括号寻访得到的是单元,而不仅是内容。 
class(f1) 
f1 =
    [1x1 sym]
ans =
cell
取一个单元的内容
f2=R_A_C{1,3}                %用花括号寻访取得内容 
class(f2) 
f2 =
sin(-3*t)*exp(-t)
ans =matlab数组赋值
sym
取单元内的子数组
f3=R_A_C{1,1}(:,[1 2 5 6])        %注意三种括号的不同用途

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。