![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=1739333491-zQpGbICXFscMcFTzb5NC2f4cEEeVFOGm-0-aafd0c03981157966463c439524776d0)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P76_4012a.jpg?sign=1739333491-cQI8NUnXRULyqHFUwuwx1Xb4FoMB8F6D-0-45f84b78cda0f6766cfde660d0e57bc9)
【例2-65】 方法(2)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4026a.jpg?sign=1739333491-yw4mspYDI5JyOUHvrVkezpFBTSjkaAVJ-0-c540d0fc49b42e153df76b321e6bc00e)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4034a.jpg?sign=1739333491-wL0D3Nt3k21z7nNWPrQ1ufi3kLQX1QGs-0-8ffedbe987a27832a9624debf65134af)
【例2-66】 方法(3)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4043a.jpg?sign=1739333491-J3xG46lotfyUM2XUenMTTMzmd39Inz6n-0-e155854afbe6decc1c2c7a08df963601)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4051a.jpg?sign=1739333491-0mdnOttDpRdFwn4a2g7gcqaGz0zgsFgB-0-42a68eb2abb13b2ff8a4c109b86ba56c)
【例2-67】 方法(4)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P78_4073a.jpg?sign=1739333491-60bWX3DE2KluRo2fkI6VtM9AggpHXHQX-0-deb0d5c4bf37e36c7864bdaae60066f8)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P78_4081a.jpg?sign=1739333491-MStMpuK3IlUbexRBPVoRgmTjomQKNGC6-0-bf074a0c7bf58dbd31289a555c1e6465)
2.4.2 元胞数组的基本操作
元胞数组的基本操作包括对元胞和元胞数据的访问、修改和元胞数组的扩展、收缩或者重组。操作数值数组的函数也可以应用在元胞数组上。
在MATLAB中元胞数组的访问有以下几种方法:
(1)可以使用圆括号()直接访问元胞数组的元胞,获取的数据也是一个元胞数组;
(2)使用花括号{}直接访问元胞数组的元胞,获取的数据是字符串;
(3)将花括号{}和圆括号()结合起来使用访问元胞元素内部的成员。
元胞数组的扩充、收缩和重组均与数值数组大体相同。
【例2-68】 方法(1)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P79_4102a.jpg?sign=1739333491-eNmKVHznCoS9TKtWj5OrtB3SPHJc5C5G-0-6508701882ec80058b3333ff861b2c3b)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P79_4110a.jpg?sign=1739333491-mvWBYAe3vaApELOsyKeWJpbCQjc349gL-0-fbc01b3783344c87ea529feb57637940)
【例2-69】 方法(2)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4130a.jpg?sign=1739333491-33Tqlo5lDMP1MEshTa1fHfPeWZxYuIaY-0-2eab35dd376e8a419adfdbc9ed58b6bc)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4138a.jpg?sign=1739333491-wxcgwFB8Imer3WAKgBGyNuI3bZTMWYE1-0-f9b893ee6fd0732cc61e14228f2eb0b1)
【例2-70】 方法(3)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4147a.jpg?sign=1739333491-mJKbA6HnGnnEXaYr8RLzWi0VoQoyTe6b-0-e14a4e1d9910a3fe1811ce5b546fc4cf)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4155a.jpg?sign=1739333491-0tBAz8Z4ykNa9T6SjwYM1GdyJoLZgB9V-0-5ea886dfb26908a20deeebe5893ba2e1)
【例2-71】 元胞数组的扩充示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P81_4175a.jpg?sign=1739333491-8BfJn2hMu9ssnsyaji2lIzNBTdhLi0Dx-0-b91c5d104512fa9639f61b8492b42332)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P81_4183a.jpg?sign=1739333491-3KRLuz8PI3ceU689n9mpxEMWyRzBkFus-0-ca639a6ab081634c77b370f0be2f05ef)
2.4.3 元胞数组的操作函数
在MATLAB中,提供的元胞数组的操作函数如表2-15所示。
表2-15 元胞数组的操作函数
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T82_4347a.jpg?sign=1739333491-yAzRjZd70zqNWt6bS96EGJLJNufzsAhb-0-1ae15685860045f4b317525829316c0e)
cellfun函数主要功能是为元胞数组的每个元素(元胞)分别指定不同的函数,在cellfun函数中可用的函数如表2-16所示。
表2-16 cellfun函数中可用的函数
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T82_4349a.jpg?sign=1739333491-LwQGTQ0cbG2S1nLSJEtsy45wHM8TMiCP-0-d8f4da1db4feff578d23438f1797fad4)
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=1739333491-fxoXB5uhaHWPQn8K1fTNOFC3WRzE0vfZ-0-15745e5b76dea5c9af8cb6ba8fdf834d)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P82_4341a.jpg?sign=1739333491-QdSMuTGKILbokqwrVZOMKYoRkP92qIzr-0-cec5e0c36bdc1ed44fec9fbeea5482fe)
【例2-73】 利用celldisp函数显示所有元胞数组的内容。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4367a.jpg?sign=1739333491-QzjWvkFFs5ZOpErKK1dfbufZuYpqwKnJ-0-4713029c4c73e5c24a6abd6d60abd0b6)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4375a.jpg?sign=1739333491-ojDk4TT9CJdvx0J5G71IbJyCsDU4QGIX-0-6dfd39e1f48ecc14e0cee20c1fa41858)
【例2-74】 利用cellplot函数显示元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4384a.jpg?sign=1739333491-plv7bWVCwDsOErzaod9505FWZXplgDGd-0-007f36e82b8fc1d8878a908e96430a68)
如图2-2所示,运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4396a.jpg?sign=1739333491-X1hUFgga3XPnTuT8t0OjeU8ymvHEbZE7-0-7525bcaf76f4e5090ca04926e66c7687)
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4400a.jpg?sign=1739333491-jIHHpPQDWSuqyGIOAYrjwX5KOjOA5GTP-0-5ff4973756f4fadc11aa6455ae3e9a95)
图2-2 利用cellplot函数显示元胞数组
【例2-75】 利用cell2mat函数将元胞数组转变成为普通的矩阵。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4408a.jpg?sign=1739333491-VOJhB2DYpXw5b7XSm8GWZJCfULOxEH4f-0-7b36f070c8cc27a2acbc86fcc4774b78)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4416a.jpg?sign=1739333491-ZqRaIVVrExnzhMPSVL5fsUfCZnOjPufl-0-56a83d88fd1928b47fd74bdabf3b43bb)
【例2-76】 利用mat2cell函数将普通的矩阵转变为元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4425a.jpg?sign=1739333491-BAMtS0BX1LnYzoD9vcPWeQ9fJ5uQgBhI-0-70ff46460c07582f60e56b93777bfcdc)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4433a.jpg?sign=1739333491-IwlY8WVYFxACZj9YotRjgvtKiHMX5bwE-0-a9017a06d1142c629c785a79100feb1a)
【例2-77】 利用num2cell函数将数值数组转变为元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P85_4455a.jpg?sign=1739333491-HGxe1zkPiVHr78GcgAPbWq1RkbnQ1T7q-0-460eefa68af5e4fc2dbb115bd35412b9)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P85_4463a.jpg?sign=1739333491-01kgIKEt1wYvJqWxaEAD8D9srtK7uYUo-0-f097959a4961ecd540cd0231f458beb4)