资源描述:
《matlab程序语言设计第6章》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第六章数据阵列类型与结构6.1多维阵列6.2结构阵列6.3单元阵列6.4复杂矩阵结构6.5多维阵列、结构阵列和单元阵列函数习题6.1多维阵列6.1.1多维阵列多维阵列是二维矩阵的推广。矩阵有二维:行和列,利用两个下标可访问矩阵元素,第一个下标表示行号,第二个下标表示列号。多维阵列应使用三个以上的下标来访问,以三维阵列为例,它有三个下标,第一个表示行号,第二个表示列号,第三个表示页号。图6.1表示一个4×4×3的多维阵列结构。例如,访问阵列A的第二页第三行第四列的元素,则可以采用A(3,4,2)。图6
2、.14×4×3的多维阵列结构6.1.2建立多维阵列建立多维阵列与建立矩阵的方法类似。但MATLAB还为建立多维阵列提供了专门的函数。建立多维阵列可采用四种方法:●利用下标建立多维阵列。●利用MATLAB函数产生多维阵列。●利用cat函数建立多维阵列。●用户自己编写M文件产生多维阵列。1.利用下标建立多维阵列建立多维阵列可从产生二维矩阵出发,扩展其维数,从而得到多维阵列。例如,先产生一个矩阵>>A=[572;012;342];这时A只是一个3×3的矩阵,实际上也可看作是3×3×1的阵列,因此再输入>>
3、A(:,:,2)=[273;428;203]A(:,:,1)=572012342A(:,:,2)=273428203这说明我们已经产生了一个3×3×2的多维矩阵A。如果要扩展维的所有元素均相同,则可用标量来输入。例如:>>A(:,:,3)=6;>>A(:,:,3)ans=666666666进一步扩展维数可得到4维阵列:>>A(:,:,1,2)=eye(3);>>A(:,:,2,2)=5*eye(3);>>A(:,:,3,2)=10*eye(3);>>size(A)ans=3332这说明得到的矩阵A为
4、3×3×3×2维。2.利用MATLAB函数产生多维阵列利用MATLAB的函数(如rand、randn、ones、zeros等)都可直接产生多维阵列,在函数调用时可指定每一维的尺寸。例如,为产生100×3×2维的正态分布随机数R,可输入>>R=randn(100,3,2);为产生各元素相同的多维阵列,可采用ones函数,也可采用repmat函数,如输入>>A=5*ones(3,4,2);>>B=repmat(5,[342]);这两个多维阵列是相同的,即A=B。3.利用cat函数建立多维阵列利用cat函
5、数建立多维阵列是方便的,任何两个维数适当的阵列可按指定维进行连接,从而可以产生更高维阵列。例如输入>>A=[28;05];B=[18;24];当它们沿着第三维以上的维进行连接时,可得到多维阵列,如输入:>>C=cat(3,A,B);>>D=cat(4,A,B);>>size(C)ans=222>>size(D)ans=2212这说明得到的C为2×2×2维,而D为2×2×1×2维。当某一维的尺寸为1时,则称这一维为单点维,比如D中第三维为单点维。cat函数还可以嵌套调用。例如继续输入:>>E=cat(
6、3,C,cat(3,[1112;1314],[56;78]));这时产生的E为2×2×4维。4.用户自定义M文件产生多维阵列对于任意指定的多维阵列,用户都可以编写专门的M文件来产生,这样可避免在设计中过多地在程序中输入数据。在实际记录每天、每月、每年测量的有关数据时,也可以编写M文件将它们组合成多维阵列,从而提供给设计者使用。6.1.3多维阵列信息利用MATLAB函数和命令可以获得多维阵列的信息,ndims函数可获得多维阵列的维数,size函数可得到阵列各维的尺寸,whos命令可得到阵列的存储和格式
7、。例如,继续上面产生的阵列,输入:>>whosNameSizeBytesClassA2×232doublearrayB2×232doublearrayC2×2×264doublearrayD4-D64doublearrayE2×2×4128doublearrayans1×432doublearrayGrandtotalis44elementsusing352bytes>>size(E)ans=224>>ndims(E)ans=36.1.4多维阵列的使用许多应用于二维矩阵的概念和技术也可以应用于多维阵
8、列,主要有●下标访问技术。●阵列重新排列。●阵列的序列变换。为说明这几种技术,先产生一多维随机整数阵列:d=fix(20*randn(10,5,3));这一阵列为10×5×3维,而且其元素取值为整数。1.下标访问技术访问多维阵列中的元素应采用各维的下标,例如,访问第2页(3,2)位置上的元素可采用d(3,2,2)。而且在下标中可以采用向量,表示多个元素,例如,取第3页(2,1)、(2,3)和(2,4)上的元素时,可输入d(2,[134],3)ans=132417冒号(