数据结构论坛

首页 » 分类 » 定义 » 小叮当Matlab基础三找一道典型例
TUhjnbcbe - 2023/9/8 21:01:00
福州白癜风医院 http://pf.39.net/bdfyy/bjzkbdfyy/140721/4429412.html

经过前面的熟悉、巩固,今天我们找一道Matlab中的典型例题,进行矩阵操作的强化训练。

例:建立单元矩阵B并回答下列问题。

y.a=1;

y.b=[1:3;4:6];

B{1,1}=1;

B{1,2}=Brenden;

B{2,1}=y;

B{2,2}={12,34,2;54,21,3;4,23,67};

(1)size(B)和ndims(B)的值分别是多少?

(2)B(2)和B(4)的值分别是多少?

(3)B(3)=[]和B{3}=[]执行后,B的值分别是多少?

解析:y.a=1;这种“变量+点+变量=值”的方式常为Matlab中“结构体”的直接赋值创建法。

在Matlab中,结构体数据类型,可以把不同数据类型的变量放到同一个变量名下,通过不同“域”的概念对结构体中的不同数据进行赋值操作。结构体中的数据存储在相应的“域”中。

因此“y.a=1;”、“y.b=[1:3;4:6];”在Matlab中表示创建一个名为y的结构体(struct),含有a、b两个属性,一个数值为1,一个为2*3的矩阵。

而“B{1,1}=1;”在Matlab中,通过“花括号赋值”的方法表示创建一个“元胞类型”(cell),第一个元素为1。元胞类型,在Matlab中可以包含任何类型的数据,如数值数组、字符、符号对象,甚至于其他的单元数组。实际上可以认为是一种以任意形式的数组为分量的多维数组。

因此“B{1,1}=1;”、“B{1,2}=Brenden;”、“B{2,1}=y;”、“B{2,2}={12,34,2;54,21,3;4,23,67};”表示,在Matlab中为一个2*2的元胞数组创建对应的“元胞元素”。

读懂题意后,我们便可来回答相应的问题:

答:(1)size(B)表示B的大小,ndims(B)表示B的维数。

可见B的大小为2*2的元胞数组(矩阵),B的维数为2。

(2)B(2)表示取B的第2个位置的子数组,B(4)表示取B的第4个位置的子数组,得到的结果仍然是元胞数组。

拓展:上步我们可以看到用“圆括号”取到的是对应位置的子数组,那么我们用”花括号“呢?由题中B的赋值过程,我们可知,B{2}的值就是结构体y,B{4}的值就是我们赋值的一个3*3的cell数组{12,34,2;54,21,3;4,23,67}。

总结:至此对“元胞数组”的取值我们可以总结为一句话“圆括号取数组,花括号取数值”。

(3)B(3)=[]表示删除B的第3个位置的数组,因此执行后,B变成了一个1*3的cell数组。

而B{3}=[]表示删除B的第3个位置的元素值,但数据结构仍在,因此执行后,B仍为2*2的cell数组,只是B的第3个位置的元素值为空。

1
查看完整版本: 小叮当Matlab基础三找一道典型例