China-pub.com 下载 第4章 创建新矩阵 在2.2节中讨论了矩阵的定义和分配。但是也还有可能要建立新的矩阵,例如通过函数返 回一个新的矩阵或者使用已存在的矩阵。 4.1建立新矩阵 建立1矩阵使用ones命令,这种矩阵的元素全部都是1。相应的建立0矩阵使用zeros命令, 这种矩阵的元素全部都是0。单位矩阵的对角线元素全部是1,而其他元素全部是0。建立单位 矩阵使用eye命令。在矩阵乘方运算中,n阶的单位矩阵就相对应于在标量运算中的数字1。 命令集32 1矩阵、零矩阵和单位矩阵 ones(n) 建立一个n×n的1矩阵。 ones(m,n,···,p) 建立一个m×n×…×p的1矩阵。 ones(size(A)) 建立一个和矩阵A同样大小的1矩阵。 zeros(n) 建立一个n×n的0矩阵。 zeros(m,n,···,p) 建立一个mXn…Xp的0矩阵。 zeros(size(A)) 建立一个和矩阵A同样大小的0矩阵。 eye(n) 建立一个nXn的单位矩阵。注意ye命令只能用来建立二维矩阵。 eye(m,n) 建立一个mXn的单位矩阵。注意ye命令只能用来建立二维矩阵。 eye(size(A)) 建立一个和矩阵A同样大小的单位矩阵。 ■例4.1 命令组: OneMatrix ones(3,4,2) ZeroMatrix zeros(size(OneMatrix)) Identity =eye(2) Identity23 =eye(2,3) Identity32 eye(3,2) 运行上述命令后在屏幕上会得到以下结果: OneMatrix(:,:,1)= 1 1 1 1 1 1 1 1 OneMatrix(:,:,2)= 1 1 1 1 1 1 ZeroMatrix(:,:,1)=
下载 第4章 创建新矩阵 在2 . 2节中讨论了矩阵的定义和分配。但是也还有可能要建立新的矩阵,例如通过函数返 回一个新的矩阵或者使用已存在的矩阵。 4.1 建立新矩阵 建立1矩阵使用o n e s命令,这种矩阵的元素全部都是1。相应的建立0矩阵使用z e r o s命令, 这种矩阵的元素全部都是 0。单位矩阵的对角线元素全部是 1,而其他元素全部是0。建立单位 矩阵使用e y e命令。在矩阵乘方运算中,n阶的单位矩阵就相对应于在标量运算中的数字 1。 命令集3 2 1矩阵、零矩阵和单位矩阵 o n e s ( n ) 建立一个n×n的1矩阵。 o n e s ( m , n ,. . ., p ) 建立一个m×n×. . . ×p的1矩阵。 o n e s ( s i z e ( A ) ) 建立一个和矩阵A同样大小的1矩阵。 z e r o s ( n ) 建立一个n×n的0矩阵。 z e r o s ( m , n ,. . ., p ) 建立一个m×n . . . ×p的0矩阵。 z e r o s ( s i z e ( A ) ) 建立一个和矩阵A同样大小的0矩阵。 e y e ( n ) 建立一个n×n 的单位矩阵。注意e y e命令只能用来建立二维矩阵。 eye(m, n) 建立一个m×n 的单位矩阵。注意e y e命令只能用来建立二维矩阵。 e y e ( s i z e ( A ) ) 建立一个和矩阵A同样大小的单位矩阵。 ■ 例4 . 1 命令组: 运行上述命令后在屏幕上会得到以下结果:
China-pub.com 第4章创建新矩阵 51 下载 Q 0 0 0 0 0 0 0 ZeroMatrix(:,:,2)= 0 0 0 0 0 0 0 0 0 0 0 0 Identity 1 0 0 1 Identity23 1 0 0 O 1 0 Identity32 1 0 0 0 0 ■ 矩阵中的所有元素都是随机数,这样的矩阵称为随机矩阵。可以用xand命令来产生在0 ~I之间均匀分布的随机数。也可以用MATLAB中的candn命令来产生服从零均值、单位方差 正态分布的随机数。 命令集33 随机数和随机矩阵 rand 产生在0一1之间均匀分布的随机数:每调用一次给一个新的数值。 rand +irand 产生一个复数随机数。 rand(n) 产生一个n×n的矩阵,其元素为0~1之间均匀分布的随机数。 rand(m,n,···,p) 产生一个m×n×,×p的矩阵,其元素为0~1之间均匀分布的 随机数。 rand 产生零均值、单位方差的正态分布随机数。 randn(n) 产生一个X的矩阵,其元素为零均值、单位方差的正态分布随机数。 randn(m,n,.·,p)产生一个mXnX…Xp的矩阵,其元素为零均值、单位方差的 正态分布随机数。 MATLAB5使用一种新的随机数发生器,可以设置几个随机数的种子。它能够产生在闭 区间[25,1一2-5习上所有的浮点数。理论上它能够产生2492≌10449多个不重复的数。而 MATLAB4中的随机数发生器只能使用一个随机数的种子。 命令集34 随机数种子 rand(“state') 返回一个B5个元素的向量,其中包含随机状态发生器的当前状态。 rand(‘state',s) 设置随机种子发生器的状态为S
矩阵中的所有元素都是随机数,这样的矩阵称为随机矩阵。可以用 r a n d命令来产生在 0 ~1之间均匀分布的随机数。也可以用 M AT L A B中的r a n d n命令来产生服从零均值、单位方差 正态分布的随机数。 命令集3 3 随机数和随机矩阵 r a n d 产生在0~1之间均匀分布的随机数;每调用一次给一个新的数值。 rand + i*r a n d 产生一个复数随机数。 r a n d ( n ) 产生一个n×n的矩阵,其元素为0~1之间均匀分布的随机数。 r a n d ( m , n ,. . ., p ) 产生一个m×n×. . .×p的矩阵,其元素为 0~1之间均匀分布的 随机数。 r a n d 产生零均值、单位方差的正态分布随机数。 r a n d n ( n ) 产生一个n×n的矩阵,其元素为零均值、单位方差的正态分布随机数。 r a n d n ( m , n ,. . ., p ) 产生一个m×n×. . .×p的矩阵,其元素为零均值、单位方差的 正态分布随机数。 M ATLAB 5使用一种新的随机数发生器,可以设置几个随机数的种子。它能够产生在闭 区间 [ 2 -5 3, 1 -2 -5 3]上所有的浮点数。理论上它能够产生 2 1 4 9 2≌1 04 4 9多个不重复的数。而 M ATLAB 4中的随机数发生器只能使用一个随机数的种子。 命令集3 4 随机数种子 r a n d (‘s t a t e’) 返回一个有3 5个元素的向量,其中包含随机状态发生器的当前状态。 r a n d (‘s t a t e’, s ) 设置随机种子发生器的状态为 s。 第4章 创建新矩阵 5 1 下载 ■
52 MATLAB5手册 China-pub.coM 下载 rand(‘state',0) 设置随机种子发生器为它的原始状态。 rand('state',j) 设置随机种子发生器为它的第种状态,为整数。 rand(state', 使用c1ock命令(见命令集15),使得随机种子发生器在每个不 sum(100*clock)) 同时刻都设置为一种不同的状态。 rand('seed',arg) 使用MATLAB4中的随机种子发生器,见帮助可以得到更多 的信息。 randn('state') 返回一个有两个元素的向量,其中包含正态随机种子发生器 的状态。 randn(state',arg)根据arg设置正态随机种子发生器,见rand。 ■例4.2 ()例如,随机种子发生器可以给出以下的结果。这里只列出了这个状态向量(35个元素) 中的前五个元素的值。 astate rand('state');astate(1:5),Random rand(2,3) ans 0.6923 0.1646 0.5676 0.3609 0.8557 Random▣ 0.4565 0.8214 0.6154 0.0185 0.4447 0.7919 (b)为了避免总是从相同的随机种子开始而得到相同的随机数序列,可以使用MATLAB中 的clock函数。 rand('state',sum(100*clock));R rand('state');R(1:5) ans 0.8010 0.4701 0.5052 0.0707 0.4643 c1ock命令定义在2.5节中。 ■ 在MATLAB中还有利用已存在的矩阵建立新矩阵的命令。假设矩阵A是mXn的矩阵,x是 一个有n个元素的向量。用命令集35中的命令diag来生成一个新的矩阵。 命令集35 从已存在的矩阵中生成新的矩阵(一) diag(A) 生成一个由矩阵A主对角线元素组成的列向量。主对角线总是从矩 阵左上角开始。对于方阵来说它结束于矩阵的右下角
r a n d (‘s t a t e’, 0 ) 设置随机种子发生器为它的原始状态。 r a n d (‘s t a t e’, j) 设置随机种子发生器为它的第 j种状态,j为整数。 r a n d (‘s t a t e’, 使用c l o c k命令(见命令集15),使得随机种子发生器在每个不 s u m ( 1 0 0*c l o c k ) ) 同时刻都设置为一种不同的状态。 r a n d (‘s e e d’,a r g) 使用M ATLAB 4中的随机种子发生器,见帮助可以得到更多 的信息。 r a n d n (‘s t a t e’) 返回一个有两个元素的向量,其中包含正态随机种子发生器 的状态。 r a n d n (‘s t a t e’, a r g ) 根据a r g设置正态随机种子发生器,见 r a n d。 ■ 例4 . 2 (a) 例如,随机种子发生器可以给出以下的结果。这里只列出了这个状态向量 ( 3 5个元素) 中的前五个元素的值。 ( b )为了避免总是从相同的随机种子开始而得到相同的随机数序列,可以使用 M AT L A B中 的c l o c k函数。 c l o c k命令定义在2 . 5节中。 在M AT L A B中还有利用已存在的矩阵建立新矩阵的命令。假设矩阵 A是m×n的矩阵,x是 一个有n个元素的向量。用命令集3 5中的命令d i a g来生成一个新的矩阵。 命令集3 5 从已存在的矩阵中生成新的矩阵 (一) d i a g ( A ) 生成一个由矩阵 A主对角线元素组成的列向量。主对角线总是从矩 阵左上角开始。对于方阵来说它结束于矩阵的右下角。 5 2 M ATLAB 5 手册 下载 ■
China-bub.coM 第4章创建新矩阵 53 下载 diag(x) 生成一个n维的方阵,它的主对角线元素值取自向量x,其余元素的 值都为0。 diag(A,k) 生成一个由矩阵A第k条对角线的元素组成的列向量。k=0为主对角 线:k0为上第k对角线。 diag(x,k) 生成一个(n+abs(k)X(n+abs(k)维的矩阵,该矩阵的第k条对角线元 素取自向量x,其余元素都为零。关于参数k可参考上个命令。 ■例4.3 假设: 1 3 4 5 6 7 8 A 9 1011 12 x=(-5-10-15) 13 1415 16 (a)命令diag element=diag(A)给出: diag_element 1 6 11 16 (b)Diag_matrix=diag(diag(A))返▣: Diag_matrix 1 0 0 0 0 6 0 0 0 0 11 0 0 0 0 16 (c)命令Dmatrixx=diag(x)或者Dmatrixx=diag(x')给出: Dmatrixx -5 0 0 0-10 0 0 0-15 (d如果输入superDiagElement=diag(A,2),那么输出: superDiagElement 3 8 (e)NewMatrix=diag(diag(A,2))返▣: NewMatrix 30 08 注意,该矩阵的大小由命令diag(A,2生成的向量决定。 (f0 SuperDiagonalMatrix=diag(diag(A,2返回2列矩阵:
d i a g ( x ) 生成一个n维的方阵,它的主对角线元素值取自向量 x,其余元素的 值都为0。 d i a g ( A , k ) 生成一个由矩阵 A第k条对角线的元素组成的列向量。 k= 0为主对角 线;k 0为上第k对角线。 d i a g ( x , k ) 生成一个(n+ a b s (k) )×(n+ a b s (k) )维的矩阵,该矩阵的第 k条对角线元 素取自向量x,其余元素都为零。关于参数 k可参考上个命令。 ■ 例4 . 3 假设: (a) 命令d i a g _ e l e m e n t = d i a g ( A )给出: (b) D i a g _ m a t r i x = d i a g ( d i a g ( A ) )返回: (c) 命令D m a t r i x x = d i a g ( x )或者D m a t r i x x = d i a g ( x ’ ) 给出: (d) 如果输入s u p e r D i a g E l e m e n t = d i a g ( A , 2 ),那么输出: superDiagElement = 3 8 (e) N e w M a t r i x = d i a g ( d i a g ( A , 2 ) )返回: NewMatrix = 3 0 0 8 注意,该矩阵的大小由命令 diag(A, 2)生成的向量决定。 (f) SuperDiagonalMatrix =diag(diag(A,2),2) 返回下列矩阵: 第4章 创建新矩阵 5 3 下载
54 MATLAB5手册 China-pub.com 下载 SuperDiagonalMatrix 0 0 3 0 0 0 0 8 0 0 0 0 0 0 0 0 矩阵A的上第2对角线的长度为2,因此建立的矩阵大小为4×4。 ■ 在MATLAB中使用命令triu和tril来建立三角矩阵。 命令集36 从已存在的矩阵中生成新的矩阵(二) triu(A) 生成一个和A大小相同的上三角矩阵。该矩阵的主对角线及以上元 素取自A中相应元素,其余元素都为零。 triu(A,k) 生成一个和4大小相同的上三角矩阵。该矩阵的第涤对角线及以上元素取 自A中相应元素,其余元素都为零。命全riu(A,O)等同于命triu(A)。 tril(A) 生成一个和A大小相同的下三角矩阵。该矩阵的主对角线及以下元 素取自A中相应元素,其余元素都为零。 tril(A,k) 生成一个和A大小相同的下三角矩阵。该矩阵的第k条对角线及以下 元素取自A中相应元素,负数k表示主对角线下的对角线。其余元素 都为零。命令tri1(A,0)等同于命令tr11(A)。 对于每一个方阵A都有下列关系: A=triu(A)+tril(A)-diag(diag(A)) 严格的上三角矩阵A应该使用triu(A,1)来定义:而严格的下三角矩阵A则用tri1(A,一 1)来定义。因此,对于每一个方阵A都有下列关系: A=triu(A,1)tril(A71)diag(diag (A)) 当通过迭代的方法来求解线性方程系统(例如Gauss-.Seidel,.Jacobi或者Successive Over Relaxation(SOR)时,以这种方式来分解矩阵是很重要的。 ■例4.4 假设: 9 876 B= 130 -471 9 (a)UpperTriangular =triu: UpperTriangular 9 7 6 0 3 0 0 1 (b)LowerTriangular=tri1l,)返回: LowerTriangular 0 0 0 0 10 0 -4 7 0
矩阵A的上第2对角线的长度为2,因此建立的矩阵大小为4×4。 在M AT L A B中使用命令t r i u和t r i l来建立三角矩阵。 命令集3 6 从已存在的矩阵中生成新的矩阵 (二) t r i u ( A ) 生成一个和 A大小相同的上三角矩阵。该矩阵的主对角线及以上元 素取自A中相应元素,其余元素都为零。 t r i u ( A , k ) 生成一个和A大小相同的上三角矩阵。该矩阵的第k条对角线及以上元素取 自A中相应元素,其余元素都为零。命令t r i u ( A , 0 )等同于命令t r i u ( A )。 t r i l ( A ) 生成一个和 A大小相同的下三角矩阵。该矩阵的主对角线及以下元 素取自A中相应元素,其余元素都为零。 t r i l ( A , k ) 生成一个和A大小相同的下三角矩阵。该矩阵的第 k条对角线及以下 元素取自A中相应元素,负数k表示主对角线下的对角线。其余元素 都为零。命令t r i l ( A , 0 )等同于命令t r i l ( A )。 对于每一个方阵A都有下列关系: A=triu(A) + tril(A) - diag(diag(A)) 严格的上三角矩阵A应该使用t r i u ( A , 1 )来定义;而严格的下三角矩阵A则用t r i l ( A ,- 1 )来定义。因此,对于每一个方阵A都有下列关系: A=triu(A, 1) + tril(A, -1) + diag(diag(A)) 当通过迭代的方法来求解线性方程系统 (例如Gauss-Seidel, Jacobi 或者Successive Over R e l a x a t i o n ( S O R ) )时,以这种方式来分解矩阵是很重要的。 ■ 例4 . 4 假设: (a) UpperTriangular =triu(B) 返回: (b) LowerTriangular =tril(B, -1 )返回: 5 4 M ATLAB 5 手册 下载 ■
China-pub.com 第4章创建新矩阵 5 下载 还有一些命令可以用来变换矩阵结构。 命令集37 矩阵旋转和矩阵变维 fliplr(A) 通过二维矩阵A的行元素按照b,=a,交换位置生成一个新 矩阵。这里的‘lr'是‘lefi-right'的缩写。 flipud(A) 通过二维矩阵A的列元素按照b,a交换位置生成一个新 矩阵。这里的‘ud'是‘up-down'的缩写。 flipdim(A,dim) 生成一个在dim维矩阵A内的元素交换位置的多维矩阵。 命令flipdim(A,I)等同于命令flipud(A),命令flipdim(A,2) 等同于命令fliplr(A)。 rot90(A) 生成一个由矩阵A逆时针旋转90°而得的新阵。也就是将矩阵 A中的左上角的元素和右下角的元素交换位置,也可见3.5节。 rot90(A,k) 生成一个由矩阵A逆时针旋转kX90°而得到的新阵,也可 见13.5节。 reshape(A,m,n, 生成一个m×n×..义p维的矩阵,它的元素以线性索引的顺 ··…p) 序(见图2-2)从矩阵A中取来。如果矩阵A中没有m×n× ×p个元素,将返回一个错误信息。 repmat (A,[m n 创建一个和矩阵A有相同元素的mXn×…Xp块的多维矩阵。 ··p]) repmat (x,[m n 创建一个m×n×.Xp的多维矩阵,所有元素的值都为标量x。 …p]) 使用该命令要比用命令x★ones([mn··])来创建同 一个大矩阵的速度要快。 shiftdim(A,n) 矩阵的列移动步。n为正数,矩阵向左移:n为负数,向右移。 squeeze(A) 返回没有空维的矩阵A。 cat(dim,A,B) 将矩阵A和B组合成一个dim维的多维矩阵。 permute (A,order) 根据向量order来改变矩阵A中的维数顺序。 ipermute(A,order) 进行命令permutel的逆变换。命令ipermute(permute(A, order),order) 得到的结果就是矩阵A本身。 ■例4.5 (a)假设有如例4.I中的多维矩阵OneMatrix,使用命令B=reshape(OneMatri3 8)可以使它变维而成为二维矩阵,结果如下: B= 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (b)为了在矩阵B中增加一层零元素,可以先使用命令C=zeros(3,8)创建一个零阵。然 后通过下列命令来得到一个合并的矩阵:
还有一些命令可以用来变换矩阵结构。 命令集3 7 矩阵旋转和矩阵变维 f l i p l r ( A ) 通过二维矩阵A的行元素按照bi j= ai , n - j + 1交换位置生成一个新 矩阵。这里的‘l r’是‘l e f t - r i g h t’的缩写。 f l i p u d ( A ) 通过二维矩阵A的列元素按照bi j =am - i + 1 , j交换位置生成一个新 矩阵。这里的‘u d’是‘u p - d o w n’的缩写。 flipdim(A, dim) 生成一个在 d i m维矩阵 A内的元素交换位置的多维矩阵。 命令flipdim(A, 1)等同于命令f l i p u d ( A ),命令flipdim(A, 2) 等同于命令f l i p l r ( A )。 r o t 9 0 ( A ) 生成一个由矩阵A逆时针旋转9 0°而得的新阵。也就是将矩阵 A中的左上角的元素和右下角的元素交换位置,也可见1 3 . 5节。 rot90(A, k) 生成一个由矩阵A逆时针旋转k×9 0°而得到的新阵,也可 见1 3 . 5节。 r e s h a p e ( A , m , n , 生成一个m×n×. . .×p维的矩阵,它的元素以线性索引的顺 . . .p ) 序(见图2 - 2 )从矩阵A中取来。如果矩阵 A中没有m×n×. . . ×p个元素,将返回一个错误信息。 repmat(A,[m n 创建一个和矩阵A有相同元素的m×n×...×p块的多维矩阵。 . . .p ] ) repmat(x,[m n 创建一个m×n×. . .×p的多维矩阵,所有元素的值都为标量x。 . . .p ] ) 使用该命令要比用命令 x*ones([m n . . .] )来创建同 一个大矩阵的速度要快。 s h i f t d i m ( A , n ) 矩阵的列移动n步。n为正数,矩阵向左移;n为负数,向右移。 s q u e e z e ( A ) 返回没有空维的矩阵A。 c a t ( d i m , A , B ) 将矩阵A和B组合成一个d i m维的多维矩阵。 p e r m u t e ( A , o r d e r ) 根据向量o r d e r来改变矩阵A中的维数顺序。 i p e r m u t e ( A , o r d e r ) 进行命令p e r m u t e的逆变换。命令i p e r m u t e ( p e r m u t e ( A , order), order) 得到的结果就是矩阵A本身。 ■ 例4 . 5 (a) 假设有如例4 . 1中的多维矩阵O n e M a t r i x,使用命令B=reshape(OneMatrix, 3, 8 )可以使它变维而成为二维矩阵,结果如下: (b) 为了在矩阵B中增加一层零元素,可以先使用命令 C = z e r o s ( 3 , 8 )创建一个零阵。然 后通过下列命令来得到一个合并的矩阵: 第4章 创建新矩阵 5 5 下载 ■
56 ATLAB5手册 China-pub.CoM 下载 D=cat (3,B,C) D(:,:,1)= 1 1 1 11 1 1 1 11 1 1 1 1 1 1 1 D(:,:,2)= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 O 0 0 0 0 0 0 O 0 (©)为了快速对矩阵D进行变维以便它可以响应从命令cat(3,C,B)返回的结果,可以使用: flipdim(D,3) ans(:,:,1)= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ans(:,:,2)= 1 1 y 1 1 1 1 1 (d)使用命令permute和shiftdim对矩阵变维的结果如下: size(shiftdim(D,2)) ans 2 3 8 size(permute(D,[2 1 3])) ans÷ 83 2 在MATLAB中可以通过增加元素、行和列将一个矩阵或者向量进行扩展。由于MATLAB 可以自动地改变矩阵的大小,所以使用已存在的矩阵的一部分来创建一个新矩阵是很容易的, 这在许多应用中都很有用。 从已存在的矩阵中建立一个矩阵就和定义一个新矩阵一样。元素用空格或逗号分隔,行 用分号或回车分隔:见22节。在4.3节中给出了其相反过程,从大矩阵中定义子矩阵。 ■ ■例4.6 假设下列矩阵已经定义为: A=(G4)B=(38)x=(91o)y=(B) z=(1314) (a)有几种方式可以将向量x扩展成1×4。假设想要的新向量是: xnew=(91005)
(c) 为了快速对矩阵D进行变维以便它可以响应从命令c a t ( 3 , C , B )返回的结果,可以使用: (d) 使用命令p e r m u t e和s h i f t d i m对矩阵变维的结果如下: 在M AT L A B中可以通过增加元素、行和列将一个矩阵或者向量进行扩展。由于 M AT L A B 可以自动地改变矩阵的大小,所以使用已存在的矩阵的一部分来创建一个新矩阵是很容易的, 这在许多应用中都很有用。 从已存在的矩阵中建立一个矩阵就和定义一个新矩阵一样。元素用空格或逗号分隔,行 用分号或回车分隔;见2 . 2节。在4 . 3节中给出了其相反过程,从大矩阵中定义子矩阵。 ■ 例4 . 6 假设下列矩阵已经定义为: (a) 有几种方式可以将向量x扩展成1×4。假设想要的新向量是: x n e w=(9 10 0 5) 5 6 M ATLAB 5 手册 下载 ■
China-pub.com 第4章创建新矩阵 57 下载 下列的三种方法都可以给出想要的结果: (i)xnew =x;xnew(3)=0;xnew(4)=15; (i)xneW=[x015]; (iii)temp [o 15];xnew [x temp] (b)以下两种方法可以对矩阵A扩展一个新行,如向量z: (i)Anew1 [A;z] (ii)Anew1=[A;[1314]]; 它们在屏幕上显示的结果如下: Anew1 9 3 4 1314 有时还可以对矩阵添加多个新行: Anew2 [A;x;z;[O 0]] Anew2 1 2 3 4 9 10 13 14 0 0 对矩阵A扩展一个新列,如y,可以这样做: Anew3=[Ay]或者Anew3-[A[11:12]] 它们在屏幕上显示的结果如下: Anew3 2 11 3 412 扩展一个矩阵的操作是相似的。输入命令: ABvert=[A;B]ABhoriz=[A B] 就可以得到: ABvert 双 5 7 ABhoriz 1 2 6 3 4 1 8 对于ABvert来说,它的列数一定等于矩阵A和B的列数:而对于ABhoriz来说,它的行数 一定等于矩阵A和B的行数。 为了生成规则的矩阵块可以下列的方式使用命令repmat
下列的三种方法都可以给出想要的结果: (b) 以下两种方法可以对矩阵A扩展一个新行,如向量z: 它们在屏幕上显示的结果如下: 有时还可以对矩阵添加多个新行: 对矩阵A扩展一个新列,如y,可以这样做: Anew3=[A y] 或者 Anew3=[A [11; 12]] 它们在屏幕上显示的结果如下: 扩展一个矩阵的操作是相似的。输入命令: ABvert=[A; B] 和 ABhoriz=[A B] 就可以得到: 对于A B v e rt来说,它的列数一定等于矩阵 A和B的列数;而对于A B h o r i z来说,它的行数 一定等于矩阵A和B的行数。 为了生成规则的矩阵块可以下列的方式使用命令 r e p m a t。 第4章 创建新矩阵 5 7 下载 ■
58 MATLAB5手册 China-pub.com 下载 ■例4.7 (a)命令repmat([10;01],3将返回: ans 0 0 1 0 0 1 0 1 0 1 1 0 0 0 D 1 0 0 0 1 0 1 0 1 (b)在例3.2中使用命令repmat([10],1,到: ans 0 1 0 1 01010 (c)如果要创建一个所有元素都是同一个值的矩阵,可以使用命令repmat(42,[22]) 来创建,给出的结果如下: ans 42 42 42 42 ■ 4.2空矩阵 在MATLAB中对空矩阵的定义是A=[]。有时创建一个多维的矩阵,但是这个矩阵中可能 有几维是空的,比如0×1×0矩阵。也可参见命令集31中的命令isempty。 ■例4.8 要创建一个大小为1-2-0-0-2的矩阵,可以使用命令zeros(1,2,0,0,2),结果为: ans Empty array:1-by-2-by-0-by-0-by-2 空的行向量和列向量用命令zeros来定义: rowvect =zeros(1,0) rowvect Empty matrix:1-by-0 colvect zeros(0,1) colvect Empty matrix:0-by-1 现在这些向量的大小为: size(rowvect),size(colvect) ans 1 0 ans 0 1
■ 例4 . 7 (a) 命令repmat([1 0; 0 1],3,3) 将返回: (b) 在例3 . 2中使用命令repmat([1 0],1,5)得到: (c) 如果要创建一个所有元素都是同一个值的矩阵,可以使用命令 repmat(42,[2 2]) 来创建,给出的结果如下: 4.2 空矩阵 在M AT L A B中对空矩阵的定义是A = [ ]。有时创建一个多维的矩阵,但是这个矩阵中可能 有几维是空的,比如0×1×0矩阵。也可参见命令集3 1中的命令i s e m p t y。 ■ 例4 . 8 要创建一个大小为1 - 2 - 0 - 0 - 2的矩阵,可以使用命令z e r o s ( 1 , 2 , 0 , 0 , 2 ),结果为: 空的行向量和列向量用命令 z e r o s来定义: 现在这些向量的大小为: 5 8 M ATLAB 5 手册 下载 ■
China-pub.CoM 第4章创建新矩阵 59 下载 一个空矩阵可以这样来创建: A=[门 A= 0 通过命令whos来查看在内存中的驻留变量的详细信息: Name Size Bytes Class A 0x0 0 double array colvect 0x1 0 double array rowvect 1x0 0 double array Grand total is 0 elements using 0 bytes 一些函数对空矩阵操作返回一个常量,在编写程序时这常常是有用的。在命令集38中E是 一个空矩阵,为了清除矩阵中的空维可以使用命令squeeze。 命令集38 空矩阵函数 squeeze(A) 返回没有空维的矩阵A。 sum(E) 返回0。 prod(E) 返回1。 max (E) 返回E。 min(E) 返回E。 4.3向量和子矩阵的生成 在MATLAB中可以使用冒号‘:’来代表一系列数值。有时也使用它来定义一个子矩阵。 我们先给出用冒号来定义向量的方法。 命令集39 数字序列(一) i:k 创建从开始、步长为1、到k结束的数字序列,即i,什1,+2,,k。如果 >k,MATLAB则返回一个空矩阵,也就是I。数字i和k不必是整数,该 序列的最后一个数是小于或等于k。 i:j:k 创建从开始、步长为1、到k结束的数字序列,即1,j,什2),,k。对于 =0,则返回一个空矩阵。数字、和k不必是整数,该序列的最后一个数 是小于或等于k。 ■例4.9 (a)如果输入vect=2:7或者vect=2:7.7,MATLAB:返回相同结果: vect 2 3456.7
一个空矩阵可以这样来创建: 通过命令w h o s来查看在内存中的驻留变量的详细信息: 一些函数对空矩阵操作返回一个常量,在编写程序时这常常是有用的。在命令集 3 8中E是 一个空矩阵,为了清除矩阵中的空维可以使用命令 s q u e e z e。 命令集3 8 空矩阵函数 s q u e e z e ( A ) 返回没有空维的矩阵A。 s u m ( E ) 返回0。 p r o d ( E ) 返回1。 m a x ( E ) 返回E。 m i n ( E ) 返回E。 4.3 向量和子矩阵的生成 在M AT L A B中可以使用冒号‘ :’来代表一系列数值。有时也使用它来定义一个子矩阵。 我们先给出用冒号来定义向量的方法。 命令集3 9 数字序列(一) i : k 创建从i开始、步长为1、到k结束的数字序列,即 i ,i+1, i+2, . . ., k。如果 i>k,M AT L A B则返回一个空矩阵,也就是 [ ]。数字i和k不必是整数,该 序列的最后一个数是小于或等于 k。 i : j : k 创建从i开始、步长为1、到k结束的数字序列,即 i, i+j, i+ 2j, . . ., k。对于 j= 0,则返回一个空矩阵。数字 i、j和k不必是整数,该序列的最后一个数 是小于或等于k。 ■例 4 . 9 (a) 如果输入v e c t = 2 : 7或者v e c t = 2 : 7 . 7,M AT L A B返回相同结果: 第4章 创建新矩阵 5 9 下载 ■