![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=1739581850-6cBwyxKFPBaj0dMrCJWAOZVhd23bV44V-0-98b8255dd18597acbf5d3ba6ad96dcfd)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P76_4012a.jpg?sign=1739581850-fJP2ZS5RlJ7nRbEqJVG0qahvrJwskJor-0-8c5643cef1cfd06640cd7c2e6d4c7179)
【例2-65】 方法(2)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4026a.jpg?sign=1739581850-5oCPh7BMLuOapk2LBafu3qqrv5nqM7Gw-0-3b2e2ebe59c70066c04d541ac25d9810)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4034a.jpg?sign=1739581850-xBRYHJViChQCRX6HSWkOVj01LuSCWbVX-0-07f887f7aa0b0e9749a4b8fb9874a03a)
【例2-66】 方法(3)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4043a.jpg?sign=1739581850-3In05pMIpp2OmcvvoMY3rF5flETldL2Z-0-ce5b7b17dc4af7eb0122a5ddd588bb73)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4051a.jpg?sign=1739581850-PFP4k4DAfse2y38zvg3c6w7XDqJ5cyfI-0-324104c630d8fdd0760438a29479cae2)
【例2-67】 方法(4)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P78_4073a.jpg?sign=1739581850-N3HILdlsQvdv7EAZZP6dug4Qt0h6LgPw-0-2ae2a01eddda73e2f6a0cd4e151db9fc)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P78_4081a.jpg?sign=1739581850-usLQwnfEfobIr9Ne3reU3aXjsIGW7NkZ-0-df368fed8b9f87eec398ad33ab8baf0b)
2.4.2 元胞数组的基本操作
元胞数组的基本操作包括对元胞和元胞数据的访问、修改和元胞数组的扩展、收缩或者重组。操作数值数组的函数也可以应用在元胞数组上。
在MATLAB中元胞数组的访问有以下几种方法:
(1)可以使用圆括号()直接访问元胞数组的元胞,获取的数据也是一个元胞数组;
(2)使用花括号{}直接访问元胞数组的元胞,获取的数据是字符串;
(3)将花括号{}和圆括号()结合起来使用访问元胞元素内部的成员。
元胞数组的扩充、收缩和重组均与数值数组大体相同。
【例2-68】 方法(1)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P79_4102a.jpg?sign=1739581850-xjMHQEEusfDO7NsY4GB3pD9QCBX0SFYm-0-e7f89ca63ea1f04506231690c35f55ad)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P79_4110a.jpg?sign=1739581850-mEMhknmMiBa3FeAmomN5F0Z5SQ8PphTJ-0-eef239977b3016ea8423f3f8a34da199)
【例2-69】 方法(2)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4130a.jpg?sign=1739581850-gO93VraVQ1xnha3w02NPa7erV8KPxj9r-0-0b8e9cb940028248455465359b95d47c)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4138a.jpg?sign=1739581850-Edm6dZbSQqR3YytwhKyHhnMzlJszHxy6-0-4643746d5a7dcb3ddc1fa6ea1b8b9f9b)
【例2-70】 方法(3)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4147a.jpg?sign=1739581850-ZGaQX4rU8rn9UaproibuD8acTxu4B7F7-0-7dbb316160ac00905bc6e87b2c841f12)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4155a.jpg?sign=1739581850-ENxGh6MTGPkmjgRVs9n1PLPp9JUgcShL-0-13ce65b3dee4ca23b15c27e46e913251)
【例2-71】 元胞数组的扩充示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P81_4175a.jpg?sign=1739581850-8HewKBnnIh39RxOFSYaI8V9T0vWmnynE-0-8e02df5ed5cf5c2bc738429769a1be21)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P81_4183a.jpg?sign=1739581850-TMSQDZZ1VUskcVbPfUKbrhL8XK22JvsT-0-f4386da80b652add09786936801281f2)
2.4.3 元胞数组的操作函数
在MATLAB中,提供的元胞数组的操作函数如表2-15所示。
表2-15 元胞数组的操作函数
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T82_4347a.jpg?sign=1739581850-LTLzU6snKuWfgYT4TfPldD4poZNwcqj4-0-3cbba75cbfc0ca201e48a152bd201974)
cellfun函数主要功能是为元胞数组的每个元素(元胞)分别指定不同的函数,在cellfun函数中可用的函数如表2-16所示。
表2-16 cellfun函数中可用的函数
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T82_4349a.jpg?sign=1739581850-wLry2CZwwCYyl6hcW5hjtN6YA7s5BoBv-0-5d329f0f9b491090a257817a29f35f8d)
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=1739581850-hzrdw7bBNZ3oWOJENHy4tO2NVxccLhIL-0-624c50d69b51bbfb3a5de5962148c8f0)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P82_4341a.jpg?sign=1739581850-YDUZBaOBc2bzV0jAHBCrca9WMPbWUrXN-0-b1ec105b1b6d6fec4ed2756c54a578fc)
【例2-73】 利用celldisp函数显示所有元胞数组的内容。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4367a.jpg?sign=1739581850-UQ3UjMygrLWpV9isx7RNGl3ta2tCtUX9-0-90ed701a8c66bbc2b6d62eb599942622)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4375a.jpg?sign=1739581850-ckEWPVYI5txoEJIo0e7PRx9gIqUJeNGj-0-1b843bee1b43805b852dbd15cf6d18b0)
【例2-74】 利用cellplot函数显示元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4384a.jpg?sign=1739581850-n5Po4Y3ARl7P2jKTV2n9OXB88WnBswuq-0-7e6088cc46bd6556eb5f939233e74adc)
如图2-2所示,运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4396a.jpg?sign=1739581850-mXtD56gHR5iSlmn8QXo629DDXziACFbM-0-3d4f341d7191155ab9dd36006f710131)
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4400a.jpg?sign=1739581850-YAtKE1lhyJuLS6eta5ddul85fhPUbOEx-0-9e388eb8f30e8d072816880ae2590fa5)
图2-2 利用cellplot函数显示元胞数组
【例2-75】 利用cell2mat函数将元胞数组转变成为普通的矩阵。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4408a.jpg?sign=1739581850-v7O0WhdXMeBrOkpBLGcN5ThrJtrMkqZx-0-8d961c1294f670dd1a17d19e85aebf5a)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4416a.jpg?sign=1739581850-AojoU15sXfBabiYJLdsHJ3w54zWHvxdA-0-4350dba56d1afe5644238e9d7c8ac3cd)
【例2-76】 利用mat2cell函数将普通的矩阵转变为元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4425a.jpg?sign=1739581850-140pxjTwgnQQbLACLt9Kbnj2feXTDXCU-0-568072b165820c9e15ca8142ccb38c35)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4433a.jpg?sign=1739581850-szNJI915D8Hp0bChBQc9hRPLcQhjlAlk-0-81b6f8379be4dc6d9087eb2bbbef9232)
【例2-77】 利用num2cell函数将数值数组转变为元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P85_4455a.jpg?sign=1739581850-vhz0ydu0lStIOVDOHDXzsg8PZEo8Nm2X-0-9a0c8354332c8d271273d4c4b3ff67ba)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P85_4463a.jpg?sign=1739581850-72qKeAzFmzUGhVRmIYAtxXVX85qmzf1v-0-53c65d684d49667a699bd7b342fe0ebe)