![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=1738867653-IXqonEPVuOxS1bq0si5pbodtjMWyIgVE-0-cdda2a3378ceed8a52298eba18ce329c)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P76_4012a.jpg?sign=1738867653-QtERBih7oE2n1QZ9qWNL9Kf50pvQZD3z-0-0cf8b692fe4053e67e7f03d05aef2964)
【例2-65】 方法(2)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4026a.jpg?sign=1738867653-JrIoTauwZLbhTHhX9oLRyVqCpHklMmCm-0-fed2e18f2d1446ea99fc067401e81e94)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4034a.jpg?sign=1738867653-kWBHbB5RctBlCM1OXlfYMEfdeRCZBdq8-0-6a5bbe4e8a11ff2c279c40ac6ab257df)
【例2-66】 方法(3)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4043a.jpg?sign=1738867653-2JJKVO2jrDSdHxAoK66JSGXUTrLyrCWN-0-51f3b3ce7d38eb4f3116a86dec7e79d1)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P77_4051a.jpg?sign=1738867653-XKm68A37c7VkIAqXhFc6RiX5NWkRSI3n-0-ac60c5f079988e6c2c75738cd52bb10c)
【例2-67】 方法(4)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P78_4073a.jpg?sign=1738867653-BNLRB37VWkmPVTJ4swed26Q6yYOkA6xZ-0-2e97a5238b7a506b4710453b290c5eb0)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P78_4081a.jpg?sign=1738867653-QXjeAOOEZFaDQzxZ2wdSBF50vpLBGSU6-0-ea64731ec26729730d17a1c879a2fa74)
2.4.2 元胞数组的基本操作
元胞数组的基本操作包括对元胞和元胞数据的访问、修改和元胞数组的扩展、收缩或者重组。操作数值数组的函数也可以应用在元胞数组上。
在MATLAB中元胞数组的访问有以下几种方法:
(1)可以使用圆括号()直接访问元胞数组的元胞,获取的数据也是一个元胞数组;
(2)使用花括号{}直接访问元胞数组的元胞,获取的数据是字符串;
(3)将花括号{}和圆括号()结合起来使用访问元胞元素内部的成员。
元胞数组的扩充、收缩和重组均与数值数组大体相同。
【例2-68】 方法(1)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P79_4102a.jpg?sign=1738867653-fDjCByUsh8abC4ZDyPAehUW0c0TecbCc-0-e2462ecff6abd203768ab6880ee74f69)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P79_4110a.jpg?sign=1738867653-wGFG7jEdFdKLI2W3gUkQv0jqkRN1Uw2X-0-9edff721d214dd628cdd4bf12753c28b)
【例2-69】 方法(2)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4130a.jpg?sign=1738867653-EZe4uMWhy1mXv7GckWY4jxAT3sSpMK3Y-0-572ff62e29dd8aae9a31a6193181d35f)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4138a.jpg?sign=1738867653-WZHukYoHNVFUY6p5nF5586RSULZu9xGv-0-6ee87dd47369fe496b75b7ac27023d30)
【例2-70】 方法(3)示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4147a.jpg?sign=1738867653-ETCNZB7lkvdg4PEUc4syJhiDVjDzKGNm-0-cace2dd24a33ae1a3037e635b64372db)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P80_4155a.jpg?sign=1738867653-lhoX75n4eDpAjNBomYwjh8hRvxF0Y429-0-a1f79f4fcadd67129012cb88ec24ac54)
【例2-71】 元胞数组的扩充示例。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P81_4175a.jpg?sign=1738867653-7hWepA03QxJdjqjg35J0mnXS5DGhy9ta-0-879e8369cc25e1fe415f10cd737452bf)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P81_4183a.jpg?sign=1738867653-NgZPbuHEwFwxZwIn709UXM2XkLX40s6U-0-9f8cafed89b1b55159af6629ce6a0d88)
2.4.3 元胞数组的操作函数
在MATLAB中,提供的元胞数组的操作函数如表2-15所示。
表2-15 元胞数组的操作函数
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T82_4347a.jpg?sign=1738867653-kZC8rx5mJYKVqlydz23ZDq32X27ANwz0-0-e5394795e43e9bfd32f131c88b3d02eb)
cellfun函数主要功能是为元胞数组的每个元素(元胞)分别指定不同的函数,在cellfun函数中可用的函数如表2-16所示。
表2-16 cellfun函数中可用的函数
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-T82_4349a.jpg?sign=1738867653-WBqtqpgJmRNwufmJorjS8yUwI633tzYx-0-057085ac6455f64bf6ad422201dd3899)
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=1738867653-ePA9qxPlihLJYkIufaEN7txvjP7y3HWF-0-15df54f6a38711480f5f1a6668673fb7)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P82_4341a.jpg?sign=1738867653-muEnUUH0fLeP0QMEU98bFEIEWHkVKNKo-0-8409cc414eb98f4f2b5c36188bd3f49c)
【例2-73】 利用celldisp函数显示所有元胞数组的内容。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4367a.jpg?sign=1738867653-GNLfbDzP2c9v1xM65ZcQ0ZNh8R8mKF5S-0-c4b0931313567138980c82f0a79431eb)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4375a.jpg?sign=1738867653-N8MivFzl5iYcpMs3QQU7omzCjzqYknKm-0-00c9c8eb662fccf18bdd4beb84a75831)
【例2-74】 利用cellplot函数显示元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P83_4384a.jpg?sign=1738867653-lbs34T1YFmCT75Ap1dNscbD0NQV9uNWb-0-eda8257771b85711344ebf1b4da6df25)
如图2-2所示,运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4396a.jpg?sign=1738867653-xX9W0Ny2KURZrs8TdpSgsbQgefd9ekA7-0-c525cd51ec9a1540b5d1a837078b699e)
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4400a.jpg?sign=1738867653-T01ntBqNa73uPz6ozxgt8OoCYsIEom04-0-b3986ab50f620e194d9bcdc2b495647b)
图2-2 利用cellplot函数显示元胞数组
【例2-75】 利用cell2mat函数将元胞数组转变成为普通的矩阵。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4408a.jpg?sign=1738867653-BQtzH0vSEMU3WsYc9Iewy6nIxRddiXsM-0-82a3dd15a9e9f8fa0446f0a03c57ed32)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4416a.jpg?sign=1738867653-rIUa2478Xa1trDprdctRUsTPZ3XedxFp-0-79f0a41582219e73506022c8123bfab6)
【例2-76】 利用mat2cell函数将普通的矩阵转变为元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4425a.jpg?sign=1738867653-3th7X7fqw1H73OiNdapEo7wTdCtbh2SZ-0-f80742ed2100ab0cc6a8aa1bee453b20)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P84_4433a.jpg?sign=1738867653-5pykfRNTIzLynyP61HcYeGEYG4pPO8Km-0-afe19dcf7c0c168a36ae4a13c46c9d73)
【例2-77】 利用num2cell函数将数值数组转变为元胞数组。
程序命令如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P85_4455a.jpg?sign=1738867653-oiwfktKelxAmpc1D4zuZqkPJrh0319GJ-0-333b54d114dba4b50edf4606eb4caeb6)
运行结果如下:
![](https://epubservercos.yuewen.com/BF3987/15253389504122706/epubprivate/OEBPS/Images/Figure-P85_4463a.jpg?sign=1738867653-j4rlC1zs4naWoKuRtKF2fi9K9Jyi7dDy-0-2fbfc488f852ea9921a2048796d574ca)