矩阵的一些特殊操作


1)矩阵的抽取,在矩阵处理中,经常要用到对矩阵部分元素的提取,如对角线,某一列或一行,或者上三角,下三角提取等等.
对角元素抽取

即矩阵的对角线,包括主对角线和非主对角线: diag(A),其语法如下.
    a = diag(A,k)
                       k = 0    主对角线,当k=0时,也不可以不加此参数;
                       k > 0 , 上方第k条对角线;
                       k < 0 , 下方第(-k)条对角线;
   
>> A=magic(3)

A =

     8     1     6
     3     5     7
     4     9     2

>> a=diag(A)

a =

     8
     5
     2
>> b=diag(A,1)

b =

     1
     7
>> c=diag(A,-1)

c =

     3
     9

diag命令不仅可以对已知矩阵进行对角线的抽取,也可以根据已知对角线来构造对应的矩阵.参数是一样的.
   X = diag(v,k)—— 向量 v 为矩阵 X 的第k条对角线
                        X其余元素为 0 
   X = diag(v,0)   当k=0时,可以省去不写,效果与diag(v) 一样.
>> X=diag(a)

X =

     8     0     0
     0     5     0
     0     0     2
>> Y=diag(a,1)

Y =

     0     8     0     0
     0     0     5     0
     0     0     0     2
     0     0     0     0
                                                          
上三角阵、下三角阵的抽取
X = tril (A)         提取 A 的主下三角部分, X其余元素为 0 
X = tril (A , k)     提取 A 的第k条对角线(含)以下部分,X其余元素置为0.
X = triu (A)         提取 A 的主上三角部分, X其余元素为 0 
X = triu (A , k)     提取 A 的第k条对角线(含)以上部分,X其余元素置为0.
记忆这个命令是按英文缩写来记的,tri是triple的前三字母,为三的,这类单词很多,常见的有三角形:triangle.
而l则为:low,u则为up.这样记就可以很快记住这个命令.
>> X=tril(A)

X =

     8     0     0
     3     5     0
     4     9     2
>> X=tril(A,-1)

X =

     0     0     0
     3     0     0
     4     9     0

2)矩阵的扩展
利用小矩阵进行组合,可以组成大的矩阵,在矩阵分块中应用较多,有些时候把一些分散的数据合成一个大矩阵便于分析和计算也要进行小矩阵的组合.可以利用对矩阵标识块的赋值命令来实现矩阵的合并.
    >> v = [ 1    2    6    20 ];
    >> a1= [ -v ( 2 : 4 ); eye ( 2 ), zeros ( 2, 1 ) ]
    a1= 
          -2   -6   -20
           1    0     0
           0    1     0
对上述结果的说明:
-v ( 2 : 4 )为提取v的第二到第四列,然后加负号;
eye ( 2 )生成2X2单位阵,此命令在前面的教程有所介绍.
zeros ( 2, 1 )为生成2X1的全0矩阵.
    >> a2= -v ( 2 : 4 ); a2 ( 2:3, 1:2 ) = eye ( 2 ) 
    a2 = 
          -2   -6   -20
           1    0     0
           0    1     0
a2 ( 2:3, 1:2 ) = eye ( 2 ) ,令a2的第二第三行和第一第二列为单位矩阵.
从上面的例子可以看出用MATLAB来进行矩阵合成是很方便的.当也要注意,并非可以任意的合并,而是要求行列数对应相等.

3)repmat函数的简单用法

B = repmat(A,M,N)或B = repmat(A,[M,N]) 

创建一个新的大矩阵B,B由M×N个A重复构成

B = repmat(A,N)

创建一个新的大矩阵B,B有N×N个A重复构成

4)reshape函数的简单用法

reshape(X,M,N)  or  reshape(X,[M,N])

返回一个大小为M×N的矩阵,矩阵中的元素将按列从X中抽取并按列放入新矩阵中,如


aa =

1 3 5 7
2 4 6 8

>> reshape(aa,4,2)

ans =

1 5
2 6
3 7
4 8

原文地址:https://www.cnblogs.com/Dontstop/p/4583844.html