![MATLAB GUI程序设计](https://wfqqreader-1252317822.image.myqcloud.com/cover/836/26793836/b_26793836.jpg)
2.4 元胞数组
在MATLAB中,元胞数组是一种特殊数据类型,可以将元胞数组看作为一种无所不包的通用矩阵(广义矩阵),组成元胞数组的元素可以是任何一种数据类型的常数或常量。
数据类型可以是字符串、双精度数、稀疏矩阵、元胞数组、结构或其他MATLAB数据类型,每一个元胞数据可以是标量、向量、矩阵、N维数组,每一个元素可以具有不同的尺寸和内存空间,内容可以完全不同,元胞数组的元素叫作元胞,元胞数组的内存空间是动态分配的,元胞数组的维数不受限制,访问元胞数组的元素可以使用单下标方式或全下标方式。
2.4.1 元胞数组的创建
元胞数组的创建主要有以下几种方法:
(1)使用运算符花括号{},将不同类型和尺寸的数据组合在一起构成一个元胞数组;
(2)将数组的每一个元素用{}括起来,然后再用数组创建的符号[]将数组的元素括起来构成一个元胞数组;
(3)用{}创建一个元胞数组,MATLAB能够自动扩展数组的尺寸,没有明确赋值的元素作为空元胞数组存在;
(4)用函数cell创建元胞数组。该函数可以创建一维、二维或者多维元胞数组,但创建的数组都为空元胞。
【例2-64】 方法(1)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P76_4004a.jpg?sign=1739303457-cvtPN1K2LeSFdrdL2fHOntMn7Scih5Vs-0-c883eedf71bffc1683b83cb3e5d314a3)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P76_4012a.jpg?sign=1739303457-6Ul2TS5kdBpXLR9AZAcWOxjvyJiiIZRy-0-d2081b5bcf93c5c19e923ad0039eba77)
【例2-65】 方法(2)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4026a.jpg?sign=1739303457-ke77Q1SQT2JkBrUM04UWdcgDKSuOEEXC-0-245a9393003b740012a5fee2c278347f)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4034a.jpg?sign=1739303457-dCyQqgQ4RYNbDq7r7mJzQjSdLRzrmhoc-0-17a914d0b4f989171e64c1a87dcdf3de)
【例2-66】 方法(3)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4043a.jpg?sign=1739303457-OauA1ZWsdsTHa2eyzLRcYPsRHE8r8Id3-0-20db50c934adec4deba82ee3e01b1a45)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4051a.jpg?sign=1739303457-GWQJYW7EobFe8hJacP4Nubm0MIcC5kAM-0-d72c616bfda92db5b37a81883031d921)
【例2-67】 方法(4)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P78_4073a.jpg?sign=1739303457-FzRcfzwuzDkzMJSuK4BxvrvwdxGDIbLz-0-2133c3bfc50d08c3294b60fe6b7f9719)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P78_4081a.jpg?sign=1739303457-YuSRlq0MyIbxLtz4o1YXMbFQwwyzuyL9-0-e1c983e823e9eee46b947eb5d3914a38)
2.4.2 元胞数组的基本操作
元胞数组的基本操作包括对元胞和元胞数据的访问、修改和元胞数组的扩展、收缩或者重组。操作数值数组的函数也可以应用在元胞数组上。
在MATLAB中元胞数组的访问有以下几种方法:
(1)可以使用圆括号()直接访问元胞数组的元胞,获取的数据也是一个元胞数组;
(2)使用花括号{}直接访问元胞数组的元胞,获取的数据是字符串;
(3)将花括号{}和圆括号()结合起来使用访问元胞元素内部的成员。
元胞数组的扩充、收缩和重组均与数值数组大体相同。
【例2-68】 方法(1)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P79_4102a.jpg?sign=1739303457-3UamEhJEd3AiApAoeeVZHcO9Hj1ff6GT-0-9dd26b80d928a18ad9b169d88653a608)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P79_4110a.jpg?sign=1739303457-25syNytVRRoERa7IMGVGfiKMBhbDESyY-0-f3a24b1eccb4787b8596ba92046bee97)
【例2-69】 方法(2)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4130a.jpg?sign=1739303457-hNNk50nbaUlb4MuhJJP77660ElMcjZPd-0-9f6b6e9afe5221b3c32ea00550b31c3d)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4138a.jpg?sign=1739303457-2Zj90gKMjPbshjgLLJXmcDqIjtZOsCiy-0-aff89bd723db6c38ae9b6879c58ebb77)
【例2-70】 方法(3)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4147a.jpg?sign=1739303457-bSH2hntHgR1I6VyagL9HE6JUSGD4xq5E-0-222f42e51848ae6ae4c42a06dc8f29b4)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4155a.jpg?sign=1739303457-2YBKj8jqyuXC1zZNpMxTe7oCZIXWWXi1-0-7c4305412a4711beddd9a03548891751)
【例2-71】 元胞数组的扩充示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P81_4175a.jpg?sign=1739303457-FjkvV9ejYbWT55OZqoUB6SXqmevhykvC-0-0c76ff8b5135c9238075620197da748c)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P81_4183a.jpg?sign=1739303457-2jWqNsqhbqUhbgz86FQfdmXg98etHqFz-0-043f261c75a73f9c90bc4cb63ab8af8d)
2.4.3 元胞数组的操作函数
在MATLAB中,提供的元胞数组的操作函数如表2-15所示。
表2-15 元胞数组的操作函数
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T82_4347a.jpg?sign=1739303457-hMAoFRLrozJkn5hMFx3dttbaTlB3172L-0-6ab8f4ecdbdae1cb566174319d4546fd)
cellfun函数主要功能是为元胞数组的每个元素(元胞)分别指定不同的函数,在cellfun函数中可用的函数如表2-16所示。
表2-16 cellfun函数中可用的函数
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T82_4349a.jpg?sign=1739303457-U83P2Ak6hJMt4h7mDwyFnYgQyBGQCZej-0-7b4f5d2fb904d1c1501606dfc77a113f)
cellfun函数还有以下两种用法:
cellfun('size',C,K)用于获取元胞数组元素第K维的尺寸。
cellfun('isclass',C,classname)用于判断元胞数组的数据类型。
【例2-72】 cellfun函数用法示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P82_4333a.jpg?sign=1739303457-ke4aHBqvBJFYgFo6KzCmPalg6T2vW44a-0-60b4c238df5142d9439925611839c3ef)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P82_4341a.jpg?sign=1739303457-uC7veRq1yJh2tDq9Y5AyyyE3rDaYsFMC-0-7a4a56b5605398a29bd43259ab79b8cf)
【例2-73】 利用celldisp函数显示所有元胞数组的内容。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4367a.jpg?sign=1739303457-sU1Xl2JcgeW23YWuZrkYr17SXgAfIeC3-0-12f87f2944fd99533b856ade556ead07)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4375a.jpg?sign=1739303457-aBu1ury3sxh1W8ufDEoiwPqdvjf8JuHx-0-e08034acc41a2d066f2dc0637bedafd8)
【例2-74】 利用cellplot函数显示元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4384a.jpg?sign=1739303457-Zz7zaA3jxLRbFmydCVLcv2DozflwmAZO-0-9fdb57293a246e1c92fdff5a06a646ad)
如图2-2所示,运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4396a.jpg?sign=1739303457-cXql9gyky83yyDOiAWgBbuBYyq7V8jNG-0-8ed508afbc820875bbf3bf4a55e63428)
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4400a.jpg?sign=1739303457-6RLirXvk6oEXKTDYT2X5JlyOjHhpDvEy-0-322d4b57119903c74a3b00d9df998686)
图2-2 利用cellplot函数显示元胞数组
【例2-75】 利用cell2mat函数将元胞数组转变成为普通的矩阵。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4408a.jpg?sign=1739303457-EZ9Ib0PUvPhyqTDrR31vKex59TwDwy7S-0-cc63499fe9ebc7645136d070a2142a4a)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4416a.jpg?sign=1739303457-juIAytqRPnp6nvQP3hKluZT1r3lPTOjO-0-1da4c17a593cd21cca12da634c7d0bca)
【例2-76】 利用mat2cell函数将普通的矩阵转变为元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4425a.jpg?sign=1739303457-vKDHI8snayb1OQGvr3yrg2hUvnNk3WpH-0-addbe3c135b4c4aafe54c44f3bcbb1e1)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4433a.jpg?sign=1739303457-P1NCEhwOQ9txTzP8GNmpSDJ1WAJWVTKC-0-f21e8ee715cd6e7b3b68f963600f9147)
【例2-77】 利用num2cell函数将数值数组转变为元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P85_4455a.jpg?sign=1739303457-PzpkxtSpg5S0kV7Lexw8e7o8XcEfcrch-0-c02b0e77438996724bcd6d5e080c358f)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P85_4463a.jpg?sign=1739303457-24sD4aVXXOHEHRFt08egrr3B4qL7uSAg-0-38686121a8aa36e233ecf8fbc0d02b3d)