![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=1739671613-xv3VUmAqwF1ypNi9fIvkrg4wTeVuRkto-0-83a508c52b8c605306f81dc5caa5b3b0)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P76_4012a.jpg?sign=1739671613-EN3xdSSx0Bge8LMieag5eJql0wAun2qZ-0-b3f49c6d58e8b7007b66cc454876a66a)
【例2-65】 方法(2)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4026a.jpg?sign=1739671613-2bkouW2YonQ1kAifJrFAUVHiNkMP0Cji-0-0cd5334de1e1e719391d2d146897518a)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4034a.jpg?sign=1739671613-RG0y6QFIhNUiZmaKs2wQpTsndRPRsUSE-0-6312c3091a3b1cac5e35cda90eddca84)
【例2-66】 方法(3)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4043a.jpg?sign=1739671613-qfdSJNy41Gb7ldwwa9c2uDiK2KsgFKUe-0-be5a9dbdc6d807492cbfb6f5c1f26bc0)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4051a.jpg?sign=1739671613-ks3WF7Wd0esDo51RAh41thqHlNVnUN9u-0-da772da1b018e4e9be02891a5c74c409)
【例2-67】 方法(4)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P78_4073a.jpg?sign=1739671613-2env3YDjSBcGEuNmTjMdCCGm33xy04wC-0-e852e0f87ec9351ebd87070a1d2d6f62)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P78_4081a.jpg?sign=1739671613-F1QX2p8OIKbXgLTQrxxgApPQhGM7eEkG-0-2cf438f463665773de3e7d0d636751e1)
2.4.2 元胞数组的基本操作
元胞数组的基本操作包括对元胞和元胞数据的访问、修改和元胞数组的扩展、收缩或者重组。操作数值数组的函数也可以应用在元胞数组上。
在MATLAB中元胞数组的访问有以下几种方法:
(1)可以使用圆括号()直接访问元胞数组的元胞,获取的数据也是一个元胞数组;
(2)使用花括号{}直接访问元胞数组的元胞,获取的数据是字符串;
(3)将花括号{}和圆括号()结合起来使用访问元胞元素内部的成员。
元胞数组的扩充、收缩和重组均与数值数组大体相同。
【例2-68】 方法(1)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P79_4102a.jpg?sign=1739671613-Z9JhP9SdUuzEVEJTQWamR2GsgYH6D3ft-0-1f13db2572a2db06e625f61a329b1497)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P79_4110a.jpg?sign=1739671613-jOB7UUK3g8ZG1Hzi5qKJI8Sel2XtwgU9-0-dd4a7f4dc0269e6651402b22360ccc98)
【例2-69】 方法(2)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4130a.jpg?sign=1739671613-eBVRQ5w2c59g7omCClRavQN04kRMXwhZ-0-10cbc80b43d5183ddd75d0edce5c799a)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4138a.jpg?sign=1739671613-ymDfdtlFsgdU90PmE8prvEdtJ42gD2Tu-0-c060a831b72c78230a17b434804c9e33)
【例2-70】 方法(3)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4147a.jpg?sign=1739671613-4OY1Y1krDD9HgAk9poIPhEIB2zAeliCg-0-e8aa7ad99068b187cbaa276f78f08729)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4155a.jpg?sign=1739671613-BafagnjB5cQvsTQle6tPIz2sV6mvSkxB-0-38c608b9d8854c3b3b9ad1e69e157eda)
【例2-71】 元胞数组的扩充示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P81_4175a.jpg?sign=1739671613-OC9g4sKbxMPV5xukdIHWUEeFfvPNB0kD-0-08943495b3a62325648a9b42c9836cc5)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P81_4183a.jpg?sign=1739671613-xug1Fjun29R9PQs7UFHVDFXwdr2iJh9p-0-dc42c5060fc3a06a87ebd6b89b868a53)
2.4.3 元胞数组的操作函数
在MATLAB中,提供的元胞数组的操作函数如表2-15所示。
表2-15 元胞数组的操作函数
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T82_4347a.jpg?sign=1739671613-6bg0J9lNyAS5Sy8MbTUSwXy7OM4H9QmC-0-b68e42f3837e293e1e9605cdb9deaa63)
cellfun函数主要功能是为元胞数组的每个元素(元胞)分别指定不同的函数,在cellfun函数中可用的函数如表2-16所示。
表2-16 cellfun函数中可用的函数
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T82_4349a.jpg?sign=1739671613-YMcU6HLOpTBDKavcYvhX3RvL24OsQtU3-0-8e358f70b9a1ac5f9fd125eb879723cb)
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=1739671613-YDxQNjnbu82Qqb75eCYOlBtFIuBJGArA-0-a4a57384f66328d4bf6e8eb95f3884a3)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P82_4341a.jpg?sign=1739671613-zO9Sf4XQxuha9XL0WmFhj9xqm0FvfECF-0-cd1bb82e6cb57dccad7e1a7e1875205b)
【例2-73】 利用celldisp函数显示所有元胞数组的内容。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4367a.jpg?sign=1739671613-NPneL4lOPBTYgIoIOPEYBhv33PQdkBln-0-384fda1260ad6ea7521836c3dd8c260d)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4375a.jpg?sign=1739671613-UIaJnM3ZsaKdjF6jJGmEgXRurLPJqBZl-0-449769f1f6066bbab7c6ddff2516479e)
【例2-74】 利用cellplot函数显示元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4384a.jpg?sign=1739671613-tSuGQA0uzikHzErOw639KN4CiO9rAQNf-0-f087b3db1a789987e1e3c0a0608d9510)
如图2-2所示,运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4396a.jpg?sign=1739671613-d1jExEAzNvmK7uF8ApuDmM1Cx9Ghn6Sj-0-ceba67867f6efaf49aa24ffc7fd5a06b)
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4400a.jpg?sign=1739671613-iwi5EUa3bmae5DjWfa4tEktRz4uIP9MG-0-54d65fc9228ff5191ce11e0f2de4657e)
图2-2 利用cellplot函数显示元胞数组
【例2-75】 利用cell2mat函数将元胞数组转变成为普通的矩阵。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4408a.jpg?sign=1739671613-lbT2OUQ4aaWLJP6CXtWKpFuYrQWGIhyP-0-6b126d21bdc884d4719928817cea6557)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4416a.jpg?sign=1739671613-2v2yJLxAbbAJPXrkdxPx8AU0eZeAaMTj-0-877f4ee3f27fdeb597be3d07966261e2)
【例2-76】 利用mat2cell函数将普通的矩阵转变为元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4425a.jpg?sign=1739671613-LqR6PNDWr4iuQf4Bt60CeBdbMyGfQGlt-0-f7d2e1302b8da0dbefd24ccc0ed98262)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4433a.jpg?sign=1739671613-DdBsJB5Ll6TBAvmVZArdFLxIHR3MzMuD-0-7ed791f5e7e89f2fc03e92069fd7880b)
【例2-77】 利用num2cell函数将数值数组转变为元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P85_4455a.jpg?sign=1739671613-1lo5F9mmFhH9Buf4rfJgyPSfl3Ze5AxI-0-741c610a7c400fc5532ed2f5f43e036a)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P85_4463a.jpg?sign=1739671613-2ihSAFToNtZmFjkT3PQjhYLO4Lly7JbT-0-ea346b8f5c4de23fd5027f4f59162360)