1、第二章第二章 数组与矩阵数组与矩阵 2.1 2.1 数组的概念数组的概念 2.2 2.2 数组的运算数组的运算 2.3 2.3 矩阵与运算矩阵与运算 2.4 2.4 异质数组异质数组 2.5 2.5 结构数组结构数组 2.1.1 数组的概念数组的概念 MATLAB MATLAB是以数组是以数组(array)(array)及矩阵及矩阵(matrix)(matrix)方式在做运算,方式在做运算,而这二者在而这二者在MATLABMATLAB的基本运算性质不同。数组强调元素对元的基本运算性质不同。数组强调元素对元素的运算,而矩阵则采用线性代数的运算方式。课程中常用素的运算,而矩阵则采用线性代数的运算方
2、式。课程中常用到到“向量向量”、“矩阵矩阵”及及“数组数组”,为了避免造成混乱,特,为了避免造成混乱,特别说明如下:别说明如下:向量向量(Vector):(Vector):一维的矩阵一维的矩阵,分为列向量和行向量;分为列向量和行向量;矩阵矩阵(Matrices):(Matrices):二维的数组,一维向量为其特例;二维的数组,一维向量为其特例;数组数组(Arrays):(Arrays):为矩阵的延伸为矩阵的延伸,可含可含n n维。一般二维矩阵维。一般二维矩阵及一维向量均为其特例。及一维向量均为其特例。定义一变量为数组或是矩阵时,如果是要逐个地键入元定义一变量为数组或是矩阵时,如果是要逐个地键入
3、元素,须用中括号素,须用中括号 将元素置于其中。将元素置于其中。x=1 2 3 x=1 2 3%一维一维 1 1*3 3 数组数组 x=1 2 3;4 5 6 x=1 2 3;4 5 6%二维二维 2 2*3 3 矩阵,以矩阵,以“;”区隔各列的元区隔各列的元素素 x=1 2 3 x=1 2 3%二维二维 2 2*3 3 矩阵,各列元素分二行键入矩阵,各列元素分二行键入 4 5 64 5 6 假设要计算假设要计算 y=sin(x),y=sin(x),而而x=0,0.2,0.4,.,x=0,0.2,0.4,.,,即可用,即可用数组方式运算,例如数组方式运算,例如:x=0 0.2 x=0 0.2*
4、pi 0.4pi 0.4*pi 0.6pi 0.6*pi 0.8pi 0.8*pi pi pi pi%注意数组内也可注意数组内也可作运算作运算 x=x=0 0.6283 1.2566 1.8850 2.5133 3.1416 0 0.6283 1.2566 1.8850 2.5133 3.1416 y=sin(x)y=sin(x)y=y=0 0.5878 0.9511 0.9511 0.5878 0.0000 0 0.5878 0.9511 0.9511 0.5878 0.0000要找出数组的某个元素或数个元素,可参考以下的例子要找出数组的某个元素或数个元素,可参考以下的例子 x(3)x(3)
5、%第三个第三个x x的元素的元素 ans=ans=1.2566 1.2566 y(5)y(5)%第五个第五个y y的元素的元素 ans=ans=0.5878 0.5878 x(1:5)x(1:5)%列出第一到第五个列出第一到第五个x x的元素的元素 ans=ans=0 0.6283 1.2566 1.8850 2.5133 0 0.6283 1.2566 1.8850 2.5133 y(3:-1:1)y(3:-1:1)%列出第三到第一个列出第三到第一个y y的元素,的元素,3 3为起为起始值,始值,1 1为终止值,为终止值,-1-1为增量为增量 ans=ans=0.9511 0.5878 0
6、0.9511 0.5878 0 x(2:2:6)x(2:2:6)%列出第二到第六个列出第二到第六个x x的元素,的元素,2 2为起为起始值,始值,6 6为终止值,为终止值,2 2为增量为增量 ans=ans=0.6283 1.8850 3.1416 0.6283 1.8850 3.1416 y(4 2 5 1)y(4 2 5 1)%列出列出y y元素,排列元素依序为原来元素,排列元素依序为原来y y阵列的阵列的4,2,5,14,2,5,1个个 ans=ans=0.9511 0.5878 0.5878 0 0.9511 0.5878 0.5878 0前面提到数组产生的方式须个别键入其元素,这方法
7、只前面提到数组产生的方式须个别键入其元素,这方法只适用于数组元素很少时。如果要建立的数组的元素多达适用于数组元素很少时。如果要建立的数组的元素多达数百个,则须采用以下的数种方式数百个,则须采用以下的数种方式:x=(0:0.0.2:1)x=(0:0.0.2:1)%以以:区隔起始值区隔起始值=0=0、增量、增量值值=0.0.2=0.0.2、终止值、终止值=1=1 x=linspace(0,1,51)x=linspace(0,1,51)%利用利用linspacelinspace,起始值,起始值=0=0终止值终止值=1=1之间的元素数目之间的元素数目=51=51 x=(0:0.01:1)x=(0:0.
8、01:1)*pi pi%注意数组外也可作运算注意数组外也可作运算 a=1:5,b=1:2:9 a=1:5,b=1:2:9%这二种方式更直接这二种方式更直接 a=a=1 2 3 4 5 1 2 3 4 5 b=b=1 3 5 7 9 1 3 5 7 9 c=b a c=b a%可利用先前建立的数组可利用先前建立的数组 a a 及数组及数组 b b,组成新数组,组成新数组 c=c=1 3 5 7 9 1 2 3 4 5 1 3 5 7 9 1 2 3 4 5 d=b(1:2:5)1 0 1 d=b(1:2:5)1 0 1%由数组由数组b b 的三个元素再加的三个元素再加上三个元素组成上三个元素组成
9、 d=d=1 5 9 1 0 1 1 5 9 1 0 12.2 2.2 数组的运算数组的运算 除了加减符号外其余的数组运算符号均须多加除了加减符号外其余的数组运算符号均须多加.符号。符号。数组运算功能:数组运算功能:+加加 -减减 .*乘乘 ././左除左除 .次方次方 .转置转置 a=1:5;a-2 a=1:5;a-2%从数组从数组a a减减2 2 ans=ans=-1 0 1 2 3 -1 0 1 2 3 2 2*a-1 a-1%以以2 2乘数组乘数组a a再减再减1 1 ans=ans=1 3 5 7 9 1 3 5 7 9 b=1:2:9;a+b b=1:2:9;a+b%数组数组a a
10、加阵列加阵列b b ans=ans=2 5 8 11 14 2 5 8 11 14 a.a.*b b%数组数组a a及及b b中的元素与元素相乘中的元素与元素相乘 ans=ans=1 6 15 28 45 1 6 15 28 45 a./b a./b%数组数组a a及及b b中的元素与元素相除中的元素与元素相除 ans=ans=1.0000 0.66667 0.6000 0.5714 0.5556 1.0000 0.66667 0.6000 0.5714 0.5556 a.2 a.2%数组中的各个元素作二次方数组中的各个元素作二次方 ans=ans=1 4 9 16 25 1 4 9 16 2
11、5 2.a 2.a%以以2 2为底,以数组中的各个元素为次方为底,以数组中的各个元素为次方 ans=ans=2 4 8 16 32 2 4 8 16 32 b.a b.a%以阵列以阵列b b中的各个元素为底,以阵列中的各个元素为底,以阵列a a中的各中的各个元素为次方个元素为次方 ans=ans=1 9 125 2401 59049 1 9 125 2401 59049 b=a b=a%数组数组b b是数组是数组a a的转置结果的转置结果 b=b=1 1 2 2 3 3 4 4 5 5 MATLAB MATLAB 在许多运算是以数组方式进行,即是以数组在许多运算是以数组方式进行,即是以数组的元
12、素为对象。因此除了的元素为对象。因此除了+,-+,-这二个运算外,其余的运这二个运算外,其余的运算符号(乘、除、次方)皆须加上算符号(乘、除、次方)皆须加上.来强调数组之间的运来强调数组之间的运算。以下几个例子可以说明数组运算的特色。算。以下几个例子可以说明数组运算的特色。如果如果a,ba,b各代表二个不同的数组,各代表二个不同的数组,a a与与b b 之间的运算是之间的运算是元素对元素的方式,例如元素对元素的方式,例如:x=1.5;x=1.5;%x%x 是纯量是纯量 y=exp(x2);y=exp(x2);%exp(x2)%exp(x2)是纯量运算是纯量运算 y1=x/y y1=x/y%x/
13、y%x/y 是纯量运算是纯量运算 x=1:0.1:2;x=1:0.1:2;%x%x 是数组是数组 y=exp(x.2);y=exp(x.2);%exp(x.2)%exp(x.2)是数组运算是数组运算 y1=x./y y1=x./y%x./y%x./y 是数组运算是数组运算 这个例子的算式较长,一样也须注意纯量与数组运算的差别。这个例子的算式较长,一样也须注意纯量与数组运算的差别。x=2.0 x=2.0%x%x是一纯量是一纯量 nume=x3-2 nume=x3-2*x2+x-6.3;x2+x-6.3;deno=x2+0.05 deno=x2+0.05*x-3.14;x-3.14;f=nume/
14、deno f=nume/deno x=1:5;x=1:5;%注意注意x x是一数组是一数组 nume=x.3-2 nume=x.3-2*x.2+x-6.3;x.2+x-6.3;deno=x.2+0.05 deno=x.2+0.05*x-3.14;x-3.14;f=nume./deno f=nume./deno2.3.3 矩阵与运算矩阵与运算 在矩阵在矩阵A A中,位于第中,位于第i i行、第行、第j j列的元素可表示为列的元素可表示为A(i,j)A(i,j),其中,其中i i和和j j即是该元素的下标即是该元素的下标(Subscript)(Subscript)或索引或索引(Index)(Ind
15、ex)。在在MATLABMATLAB中,所有矩阵的内部表示法都是以列为主的中,所有矩阵的内部表示法都是以列为主的一维向量,所以一维向量,所以A(i,j)A(i,j)和和A(i+(j-1)A(i+(j-1)*m)m)是完全一样的是完全一样的,其其中中m m代表矩阵代表矩阵A A的行数。换句话说,可以使用一维或二维的行数。换句话说,可以使用一维或二维下标来存取矩阵,完全看程序设计者的需求。下标来存取矩阵,完全看程序设计者的需求。以上图为例,置于矩阵内部的右上角的小数字代表一维数以上图为例,置于矩阵内部的右上角的小数字代表一维数组下标,因此组下标,因此A(2,3)A(2,3)和和A(12)A(12)
16、所指的元素都是所指的元素都是9,9,可验证如可验证如下下:A=4 10 1 6 2;8 2 9 4 7;7 5 7 1 5;0 3 4 5 A=4 10 1 6 2;8 2 9 4 7;7 5 7 1 5;0 3 4 5 4;23 13 13 0 3;4;23 13 13 0 3;A(2,3)-A(12)A(2,3)-A(12)ans=ans=0 0 可使用矩阵下标来进行矩阵的索引(可使用矩阵下标来进行矩阵的索引(IndexingIndexing),例如例如:可可取出矩阵取出矩阵A A的第四、五行与二、三列所形成的部分矩阵如下:的第四、五行与二、三列所形成的部分矩阵如下:B=A(4:5,2:3
17、)B=A(4:5,2:3)B=B=3 3 4 4 1313 1313 也可使用一维下标的方式达到同样的目的:也可使用一维下标的方式达到同样的目的:B=A(9 14;10 15)B=A(9 14;10 15)B=B=3 3 4 4 1313 1313 若要取出一整行或整列,可用冒号若要取出一整行或整列,可用冒号(:)(:)来代表所有的来代表所有的行数或列数,例如:要取出矩阵行数或列数,例如:要取出矩阵A A的第五列,可输入如下:的第五列,可输入如下:B=A(:,5)B=A(:,5)B=B=2 2 7 7 5 5 4 4 3 3 也可用也可用“endend”这个保留字来代表某一维数的最大值,例这个
18、保留字来代表某一维数的最大值,例如:矩阵如:矩阵A A的第五列也可写成:的第五列也可写成:B=A(:,end)B=A(:,end)B=B=2 2 7 7 5 5 4 4 3 3 注意注意“endend”这个保留字的意义随位置而变。在上例中这个保留字的意义随位置而变。在上例中endend代表代表5 5,在,在A(21:end)A(21:end)中,中,endend代表代表2525,这是因为矩阵,这是因为矩阵A A的一维的一维下标中,最大值为下标中,最大值为2525。可直接删除矩阵的某一整行或列,例如:可直接删除矩阵的某一整行或列,例如:A(2,:)=A(2,:)=%删除第二行删除第二行 A=A=
19、4 4 1010 1 1 6 6 2 2 7 7 5 5 7 7 1 1 5 5 0 0 3 3 4 4 5 5 4 4 2323 1313 1313 0 0 3 3 也可一次删除矩阵内的第二、四、五列的元素,例如:也可一次删除矩阵内的第二、四、五列的元素,例如:A(:,2 4 5)=A(:,2 4 5)=%删除第二、四、五列删除第二、四、五列 A=A=4 4 1 1 7 7 7 7 0 0 4 4 2323 1313 也可依次把矩阵也可依次把矩阵A A和其倒数和其倒数“并排并排”起来,得到新矩起来,得到新矩阵阵B B,例如:,例如:B=A 1./AB=A 1./A%1./A%1./A是矩阵是
20、矩阵A A每个元素的倒每个元素的倒数数 Warning:Divide by zero.Warning:Divide by zero.B=B=4.0004.000 1.0001.000 0.25000.2500 1.00001.0000 7.0007.000 7.0007.000 0.14290.1429 0.14290.1429 0 0 4.0004.000 infinf 0.2500 0.2500 23.00023.000 13.00013.000 0.04350.0435 0.07690.0769 注意,上例中由于矩阵中含有注意,上例中由于矩阵中含有0 0元素,故其倒数元素,故其倒数1./
21、A1./A的运算,会产生一个的运算,会产生一个“除以零除以零”的警告信息,但不影响的警告信息,但不影响程序或命令的正常执行。程序或命令的正常执行。可用可用diagdiag命令取出矩阵的对角线各元素,例如:命令取出矩阵的对角线各元素,例如:d=diag(B)d=diag(B)d=d=4.00004.0000 7.00007.0000 infinf 0.07690.0769也可用也可用reshapereshape命令来改变这一个矩阵的维数,例如:命令来改变这一个矩阵的维数,例如:C=reshape(B,2,8)C=reshape(B,2,8)%将矩阵将矩阵B B排成排成2 2*8 8的新矩阵的新矩
22、阵C C C=C=Column 1 through 7 Column 1 through 7 4.00004.0000 0 0 1.00001.0000 4.00004.0000 0.2500.2500 0 infinf 1.00001.0000 7.00007.0000 23.000023.0000 7.00007.0000 13.000013.0000 0.14290.1429 0.0340.0345 5 0.14290.1429 Column 8 Column 8 0.2500 0.2500 0.07690.0769 矩阵的加减与一般标量矩阵的加减与一般标量(Scalar)(Scalar
23、)的加减类似,惟一的的加减类似,惟一的要求是:相加或相减的矩阵必须具有相同的维数。若维数要求是:相加或相减的矩阵必须具有相同的维数。若维数不一致,则不一致,则MATLABMATLAB会产生错误信息,例如会产生错误信息,例如:A=12 34 56 20A=12 34 56 20;B=1 3 2 4B=1 3 2 4;C=A+BC=A+B C=C=13 37 58 24 13 37 58 24 矩阵与标量可以直接进行加减,矩阵与标量可以直接进行加减,MATLABMATLAB会直接将加减会直接将加减应用到每一个元素,例如:应用到每一个元素,例如:A=1 2 3 2 1+5A=1 2 3 2 1+5
24、A=A=6 7 9 7 6 6 7 9 7 6 标量对矩阵的乘或除,可对照一般写法,例如:标量对矩阵的乘或除,可对照一般写法,例如:A=123 442 A=123 442;B=2 B=2*A A B=B=246 884 246 884 C=A/3 C=A/3 C=C=41.0000 147.3333 41.0000 147.3333 若要进行矩阵相乘,必须确认第一个矩阵的列数目若要进行矩阵相乘,必须确认第一个矩阵的列数目(Column Dimension)(Column Dimension)等等于第二个矩阵的行数目于第二个矩阵的行数目(Row Dimension)(Row Dimension)
25、,否则其乘法无定义,否则其乘法无定义,MATLABMATLAB就会产就会产生错误信息,例如:生错误信息,例如:A=1;2A=1;2;B=3 4 5B=3 4 5;C=AC=A*B B C=C=3 4 5 3 4 5 6 8 10 6 8 10 矩阵的指数运算,可由矩阵的指数运算,可由“”来完成,但矩阵必须是方矩阵,其指来完成,但矩阵必须是方矩阵,其指数运算才有意义,例如:数运算才有意义,例如:A=magic(3)A=magic(3);B=A2B=A2 B=B=91 67 67 91 67 67 67 91 67 67 91 67 67 67 9l 67 67 9l 若在若在“*”、“/”及及“
26、”之前加上一个句点,之前加上一个句点,MATLABMATLAB将会执行矩将会执行矩阵内阵内 元素对元素元素对元素(E1ement-byElement)(E1ement-byElement)的运算,例如:的运算,例如:A=12;45A=12;45;B=2;3B=2;3;A.A.*B B 注意注意“*”前面附加的句点前面附加的句点 ans=ans=24 24 135 135 A./B A./B 注意注意“/”前面附加的句点前面附加的句点 ans=ans=6 6 15 15 A.2A.2 注意注意“/”前面附加的句点前面附加的句点 ans=ans=144 144 2025 2025 如果只想得到任何
27、矩阵如果只想得到任何矩阵z z的转置的转置(Transpose)(Transpose),则可表,则可表示成矩阵示成矩阵zz,例如:,例如:z=1z=1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 w=z w=z w=w=1 1 4 4 7 7 2 2 5 5 8 8 3 3 6 6 9 9 提示提示:z:z是矩阵是矩阵z z的线性代数转置的线性代数转置,对于复数矩阵对于复数矩阵,则是则是其复数共轭转置;其复数共轭转置;z.z.是矩阵是矩阵z z的线性代数转置的线性代数转置,对于复数矩对于复数矩阵阵,不取共轭。不取共轭。另外,另外,MATALABMATALAB提供了十分丰富的
28、运算函数,如,矩提供了十分丰富的运算函数,如,矩阵的左右翻转(阵的左右翻转(fliprflipr)矩阵的上下翻转()矩阵的上下翻转(flipudflipud)矩阵)矩阵的的9090度旋转(度旋转(rot90rot90)等,这对数据处理十分有用。)等,这对数据处理十分有用。a=a=1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 b=fliplr(a)b=fliplr(a)b=b=3 3 2 2 1 1 6 6 5 5 4 4 9 9 8 8 7 7 c=flipud(a)c=flipud(a)c=c=7 7 8 8 9 9 4 4 5 5 6 6 1 1 2 2 3 3
29、d=rot90(a)d=rot90(a)d=d=3 3 6 6 9 9 2 2 5 5 8 8 1 1 4 4 7 7 可产生各种特殊矩阵的命令汇总表 命命 令令 说说 明明zero(m,n)产生维数为产生维数为m*n,构成元素全为,构成元素全为0的矩阵的矩阵ones(m,n)产生维数为产生维数为m*n,构成元素全为,构成元素全为1的矩阵的矩阵eye(n)产生维数为产生维数为m*n,对角线元素全为,对角线元素全为1,其余元素为,其余元素为0的单位矩阵的单位矩阵pascal(m,n)产生维数为产生维数为m*n的的Pascal矩阵矩阵vander(m,n)产生维数为产生维数为m*n的的Vander
30、monde矩阵矩阵hilb(n)产生维数为产生维数为n*n的的Hilber矩阵矩阵rand(m,n)产生产生0,1均匀分布的随机矩阵,其维数为均匀分布的随机矩阵,其维数为m*nrandn(m,n)产生产生=0,=1的正态分布的随机矩阵,其维数为的正态分布的随机矩阵,其维数为m*nmagic(n)产生维数为产生维数为n*n的魔方矩阵,其各个列、行及两对角线的元素和都相等的魔方矩阵,其各个列、行及两对角线的元素和都相等2.4 2.4 异质数组异质数组 异质数组中的每一个元素,可以看成是一个抽屉或单异质数组中的每一个元素,可以看成是一个抽屉或单元元(Cell)(Cell),可用来储存各种不同类型的,
31、可用来储存各种不同类型的MATLABMATLAB数据,例如:数据,例如:前几章已介绍过的字符串、矩阵、多维数组,或是结构数前几章已介绍过的字符串、矩阵、多维数组,或是结构数组等各种类型的数据。组等各种类型的数据。Cell ArraysCell Arrays照英文字面翻译应该是照英文字面翻译应该是“单元数组单元数组”,有的翻译成,有的翻译成“异质数组异质数组”,有的翻译成,有的翻译成“细胞数组细胞数组”。有三种方式可以用来建立异质数组,分别是有三种方式可以用来建立异质数组,分别是Cell Cell IndexingIndexing、Content IndexingContent Indexing
32、及大括号及大括号方法方法Cell IndexingCell Indexing法:法:A(1,1)=This is the first cell.;A(1,1)=This is the first cell.;A(1,2)=5+j A(1,2)=5+j*6,4+j6,4+j*55;A(2,1)=1 2 3;4 5 6A(2,1)=1 2 3;4 5 6;7 8 97 8 9;A(2,2)=TimA(2,2)=Tim;ChrisChris A=A=1x23 char lx2 double 1x23 char lx2 double 3x3 double 2x1 3x3 double 2x1 cell
33、 cell 在上例中,建立了在上例中,建立了个异质数组个异质数组A A,其维数为,其维数为2 2*2 2,由四个元素,由四个元素A(1,1)A(1,1)、A(1,2)A(1,2)、A(2,1)A(2,1)及及A(2,2)A(2,2)构成。其数据类型分别为:构成。其数据类型分别为:字符串字符串This is the first cellThis is the first cell、维数为、维数为1 1*2 2的数组的数组5+j5+j*6 6,4+j4+j*55、维数为、维数为3 3*3 3的数组的数组1 2 31 2 3;4 5 64 5 6;7 8 97 8 9及异质数组及异质数组Tim;Ch
34、risTim;Chris。请特别注意:在。请特别注意:在A(2,2)A(2,2)中,储存了中,储存了 一个由两个字一个由两个字符串符串TimTim及及ChrisChris组成的另一个异质数组。组成的另一个异质数组。异质数组异质数组A可表示如下:可表示如下:A(1,1)A(1,1)This is the first This is the first cell.cell.A(1,2)A(1,2)5+j5+j*6 4+j6 4+j*55a(2,1)a(2,1)1 2 31 2 34 5 64 5 67 8 97 8 9A(2,2)A(2,2)Tim,ChrisTim,ChrisContent In
35、dexingContent Indexing法:法:以下使用此法来建立一个与前面相同的异质数组以下使用此法来建立一个与前面相同的异质数组A A,A1,1=this is the first cellA1,1=this is the first cell;A1,2=5+jA1,2=5+j*6,4+j6,4+j*55;A2,1=1 2 3A2,1=1 2 3;4 5 64 5 6;7 8 97 8 9;A2,2=TimA2,2=Tim;ChrisChris A=A=1x23 char lx2 double 1x23 char lx2 double 3x3 double 2x1 3x3 double
36、 2x1 cell cell Content IndexingContent Indexing是一个比较好记的方法,只需将矩阵是一个比较好记的方法,只需将矩阵IndexingIndexing所用的小括号改成大括号即可。比较如下:所用的小括号改成大括号即可。比较如下:1 1A(2,3)=5A(2,3)=5代表矩阵代表矩阵A A第二行、第三列元素为第二行、第三列元素为5 5。2 2A2,3=12;34A2,3=12;34代表异质数组代表异质数组A A第二行、第三列元素为第二行、第三列元素为1212;3434。大括号大括号 法:法:B=James BondB=James Bond,1 21 2;3
37、43 4;5 65 6;pipi,magic(5)magic(5)B=B=James Bond James Bond 3x2 double 3x2 double 3 314161416 5x5 double 5x5 double C=rand(3)C=rand(3),ones(2)ones(2);zeros(5)zeros(5),randperm(4)randperm(4)C=C=3x3 double 2x2 double 3x3 double 2x2 double 5x5 double 1x4 double 5x5 double 1x4 double 可以合并两个异质数组来建立一新异质数组,
38、其方式与合并一可以合并两个异质数组来建立一新异质数组,其方式与合并一般数组相同,例如:般数组相同,例如:M=B C M=B C 将异质数组将异质数组B B及及C C左右并排左右并排 M=M=James Bond3x2 double 3x3 double 2x2 double James Bond3x2 double 3x3 double 2x2 double 3 31416 5x5 double 5x5 double)1x4 double1416 5x5 double 5x5 double)1x4 double 若在若在MATLABMATLAB命令窗口内直接调用异质数组的名称,命令窗口内直接调
39、用异质数组的名称,MATLABMATLAB并不直并不直接显示异质数组各元素的内容值,而是显示各元素的数据类型及维数,接显示异质数组各元素的内容值,而是显示各元素的数据类型及维数,以前一节中的异质数组为例:以前一节中的异质数组为例:A A A=A=1x23 char 1x2 double 1x23 char 1x2 double 3x3 double 2xl cell 3x3 double 2xl cell 上例返回结果可得知,调用异质数组上例返回结果可得知,调用异质数组A A的结果,并无法看出其各个的结果,并无法看出其各个构成元素的实际内容,仅可得知构成元素的实际内容,仅可得知A A是一个维数
40、为是一个维数为2 2*2 2的异质数组,共由的异质数组,共由四个元素构成,其中:四个元素构成,其中:元素元素A(1A(1,1)1)是一个维数为是一个维数为1 1*2323的字符串矩阵的字符串矩阵 元素元素A(1A(1,2)2)是一个维数为是一个维数为1 1*2 2的数值矩阵的数值矩阵 元素元素A(2A(2,1)1)是一个维数为是一个维数为3 3*3 3的数值矩阵的数值矩阵 元素元素A(2A(2,2)2)是一个维数为是一个维数为2 2*1 1的异质数组的异质数组 可以使用可以使用cellplotcellplot命令,将异质数组命令,将异质数组A A的内部数据类的内部数据类型以图形的方式显示,如图
41、示。型以图形的方式显示,如图示。cellplot(A)cellplot(A)将异质数组将异质数组A A的内部数据类型,的内部数据类型,以图形的方式显示以图形的方式显示 若要显示下述异质数组若要显示下述异质数组A A各个构成元素的实际内容,可使用各个构成元素的实际内容,可使用celldispcelldisp命令命令 :celldisp(A)celldisp(A)显示异质数组显示异质数组A A各个构成元素的实际内容各个构成元素的实际内容 A1,1=A1,1=this is the first cell this is the first cell A2,l=A2,l=1 2 3 1 2 3 4 5
42、 6 4 5 6 7 8 9 7 8 9 Al,2=Al,2=5.0000+6.0000i 4.0000+5.0000i 5.0000+6.0000i 4.0000+5.0000i A2,21=A2,21=Tim Tim A2,2)2=A2,2)2=Chris Chris 建立异质数组的方法建立异质数组的方法Content IndexingContent Indexing,也可以用来直接将异,也可以用来直接将异质数组质数组A A的各个构成元素内容的各个构成元素内容次全部显示出来,例如:次全部显示出来,例如:A:A:显示异质数组显示异质数组A A的全部构成元素的全部构成元素 ans=ans=th
43、is is the first cell.this is the first cell.ans=ans=1 2 2 1 2 2 4 5 6 4 5 6 7 8 9 7 8 9 ans=ans=5.0000+6 5.0000+60000i 40000i 40000+5.0000i0000+5.0000i ans=ans=Tim Tim Chris Chris 建立某一异质数组之后,若要取用其中的某个元素进行各种建立某一异质数组之后,若要取用其中的某个元素进行各种MATLABMATLAB的运算,也可以使用前述的运算,也可以使用前述Conten IndexingConten Indexing的方法,
44、每次只取用的方法,每次只取用一个元素。以下例子先建立一个异质数组一个元素。以下例子先建立一个异质数组B B,再取用其中第,再取用其中第1 1行、第行、第2 2列列的元素:的元素:B=James BondB=James Bond,1 21 2;3 43 4;5 65 6;pipi,magic(5)magic(5)B=B=James Bond 3x2 double James Bond 3x2 double 3 31416 5x5 double1416 5x5 double F=B1,2 F=B1,2 取用异质数组取用异质数组B B的第的第l l行、第行、第2 2列的元素列的元素 F=F=1 2
45、1 2 3 4 3 4 5 6 5 6 由上例中,产生一个新的矩阵由上例中,产生一个新的矩阵F F,此时若要进一步取得它的某一个,此时若要进一步取得它的某一个构成元素,可输入如下:构成元素,可输入如下:G=B1,2(3,1)G=B1,2(3,1)G=G=5 5 若要若要次同时取用多个元素,则必须使用次同时取用多个元素,则必须使用Cell IndexingCell Indexing的方法,的方法,例如:例如:H=B(2 H=B(2,:,:)H=H=3.14116 5x5 double 3.14116 5x5 double B(l,:)=B(l,:)=删除异质数组删除异质数组B B的第一行所有元素
46、的第一行所有元素 B=B=3.1416 5x5 double 3.1416 5x5 double 异质数组可以取代以逗点分开的变量行,例如:异质数组可以取代以逗点分开的变量行,例如:F=2 3 5,1 2 3F=2 3 5,1 2 3,TimmyTimmy,AnnieAnnie;F1:2F1:2 ans=ans=2 3 5 2 3 5 ans=ans=1 2 3 1 2 3 若要取用并改变异质数组的大小,可使用若要取用并改变异质数组的大小,可使用“:”运算或运算或“reshapereshape”命令,例如:命令,例如:B=James Bond,1 2B=James Bond,1 2;3 43
47、4;5 65 6;pipi,magic(5)magic(5)B=B=James Bond 3x2 double James Bond 3x2 double 3.1416 5x5 double 3.1416 5x5 doubleM=B(:)M=B(:)M=M=JameS Bond JameS Bond 3.1416 3.1416 3x2 double 3x2 double 5x5 double 5x5 double N=reshape(B N=reshape(B,1 1,4)4)N=N=James Bond 3 James Bond 31416 3x2 double 5x5 double1416
48、 3x2 double 5x5 double 若要事先预设若要事先预设(Pre-Allocate)(Pre-Allocate)空的异质数组,可用空的异质数组,可用cellcell命令,例如:命令,例如:E=cell(4E=cell(4,3)3)事先预设一个事先预设一个4x34x3空的异质数组空的异质数组 E=E=iscell iscell命令可用于测试某一变量是否为异质数组,例如:命令可用于测试某一变量是否为异质数组,例如:C=1C=1,2 2,33;This is a test.This is a test.;iscell(C)iscell(C)ans=ans=1 1 在上例中,在上例中,i
49、scelliscell命令的执行结果是返回值为命令的执行结果是返回值为1 1,代表变量,代表变量A A是是一个异质数组,若返回值为一个异质数组,若返回值为0 0,则代表不是异质数组。,则代表不是异质数组。num2cellnum2cell命令可将一数值数组转换成异质数组,其使用语法为:命令可将一数值数组转换成异质数组,其使用语法为:C=num2cell(A,dim)C=num2cell(A,dim)其中其中dimdim是代表是代表“不被切开不被切开”的维数,例如:的维数,例如:A=1 2 3A=1 2 3;4 5 64 5 6;建立一个数值数组建立一个数值数组A A C=num2cell(A)C
50、=num2cell(A)将数值数组将数值数组A A转成异质数组转成异质数组C C C=C=1 2 3 1 2 3 4 5 6 4 5 6 若要将数值数组若要将数值数组A A中的每一列,转成异质数组中的每一列,转成异质数组D D的元素,可输入如的元素,可输入如下:下:D=num2cell(A,1)D=num2cell(A,1)1 1代表代表“行不被切开行不被切开”D=D=2xl double 2xl double 2xl double 2xl double 2xl double 2xl double 要将数值数组要将数值数组A A的每一行,转成异质数组的每一行,转成异质数组E E的元素,可输入如