购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4 特殊矩阵

3.4.1 空矩阵

空矩阵是指没有任何元素的矩阵,看似没有任何意义,但在MATLAB语句中,定义一个空矩阵是有用的。在不知道矩阵规模,但可能会在后面多个地方用到的情况下,可以先定义一个空矩阵,养成良好的编程习惯。

MATLAB生成空矩阵的格式为

A=[]

其中,空矩阵大小任意。

同时,空矩阵还有如下实际应用:

(1)删除矩阵中所有的元素:

    >> A=[1,2,3]
    A =
         1     2  3
    >> A=[]
    A =
         []

(2)删除矩阵中的部分元素:

    >> A=[1,2,3]
    A =
         1     2   3
    >>  A(:,1)=[]
    A =
         2     3

3.4.2 全零矩阵

全零矩阵是指元素全是0的矩阵。

在MATLAB中,zeros函数用于生成全零矩阵,该函数的调用格式及说明如表3-14所示。

表3-14 zeros函数调用格式及说明

例3-31: 创建全零矩阵。

MATLAB程序如下:

    >> clear                 % 清除工作区的变量
    >> zeros(4)              % 创建4阶全0矩阵
    ans =
         0     0  0  0
         0     0     0     0
         0     0     0     0
         0     0     0     0
    >> zeros(4,3)             % 创建4行3列全0矩阵
    ans =
         0     0     0
         0     0     0
         0     0     0
         0     0     0
    >> A=[1 2 3;0 3 3;7 9 5]; % 创建3行3列矩阵A
    >> zeros(size(A))         % 创建与矩阵A维数相同的3行3列全0矩阵
    ans =
         0     0     0
         0     0     0
         0     0     0

3.4.3 随机矩阵

如果一个矩阵中的元素至少有一个是随机的,那么该矩阵称为随机矩阵。在MATLAB中,一般随机矩阵的所有元素均为随机生成的。

每一次运行随即矩阵生成函数生成的随机矩阵中元素的数值都是不同的,因此读者使用随机矩阵函数运算时,与书中结果不同,而且每次运行结果都不同,出现这些情况是正常的。

按照随机矩阵的分布规则,可将随机矩阵分为两种:均匀分布的随机数矩阵和正态分布的随机数矩阵。根据取值区间的不同,可将随机矩阵分为区间(0,1)和(0, max)。下面介绍生成几种不同随机矩阵的函数。

1.rand函数

在MATLAB中,rand函数用来生成在区间(0,1)均匀分布的随机数矩阵,该函数的调用格式及说明如表3-15所示。

表3-15 rand函数调用格式及说明

例3-32: 随机矩阵生成示例。

MATLAB程序如下:

    >> clear              % 清除工作区的变量
    >> r=rand(5)          % 在区间[0,1]生成5阶均匀分布的随机矩阵
    ans =
  
        0.0975    0.1576   0.1419    0.6557    0.7577
        0.2785    0.9706   0.4218    0.0357    0.7431
        0.5469    0.9572   0.9157    0.8491    0.3922
        0.9575    0.4854   0.7922    0.9340    0.6555
        0.9649    0.8003   0.9595    0.6787    0.1712

例3-33: 创建由随机数组成的三维矩阵。

MATLAB程序如下:

    >> clear              % 清除工作区的变量
    >> X = rand([3,3,3])  % 创建一个由随机数组成的 3×3×3三维矩阵X
    X(:,:,1) =
  
        0.9502    0.3816   0.1869
        0.0344    0.7655   0.4898
        0.4387    0.7952   0.4456
  
  
    X(:,:,2) =
  
        0.6463    0.2760   0.1626
        0.7094    0.6797   0.1190
        0.7547    0.6551   0.4984
  
  
    X(:,:,3) =
  
        0.9597    0.2238   0.5060
        0.3404    0.7513   0.6991
        0.5853    0.2551   0.8909

2.randn函数

在MATLAB中,randn函数用来创建正态分布的随机矩阵,该函数的调用格式及说明如表3-16所示。

表3-16 randn函数调用格式及说明

例3-34: 生成随机复数矩阵。

MATLAB程序如下:

    >> clear                 % 清除工作区的变量
    >> X = randn + 1i*randn  % 生成一个具有正态分布的实部和虚部的随机复数矩阵
    X =
      -1.4916 - 0.7423i

3.randi函数

在MATLAB中,randi函数用来生成均匀分布的伪随机整数矩阵,该函数的调用格式及说明如表3-17所示。

表3-17 randi函数调用格式及说明

例3-35: 生成随机整数矩阵。

MATLAB程序如下:

    >> clear                    % 清除工作区的变量
    >> r = randi(20,1,5)        % 生成元素值在 1 ~ 20 均匀分布的1×5随机整数向量
    r =
         4     3    10    20     7
    >> r = randi([10 100],4,5)  % 生成元素值在 10 ~ 100 均匀分布的4行5列随机整数矩阵
    r =
        69    35    73    49    27
        25    14    38    44    54
        74    18    96    79    50
        12    84    13    82    68

4.rng函数

在MATLAB中,rng函数设置随机数生成器,控制随机数生成,它的调用格式及说明如表3-18所示。

表3-18 rng函数调用格式及说明

例3-36: 重置随机数生成器。

MATLAB程序如下:

    >> clear            % 清除工作区的变量
    >> s = rng;         % 保存随机数生成器的当前状态
    >> r = randn(2,5)   % 创建随机矩阵r
    r =
  
       -1.0616   -0.6156   -0.1924   -0.7648   -1.4224
        2.3505    0.7481    0.8886   -1.4023    0.4882
    >> rng(s);          % 将随机数生成器的状态恢复为s
    >> r1 = randn(2,5)  % 创建一个由随机数组成的新 1×5 向量。随机值与之前相同
    r =
  
       -1.0616   -0.6156   -0.1924   -0.7648   -1.4224
        2.3505    0.7481    0.8886   -1.4023    0.4882

随机矩阵每次的运行结果是随机的,若不设置随机生成器,上例中前后两次随机矩阵生成的值将不同。

5.randperm函数

在MATLAB中,randperm函数生成区间为[1, n ]的没有重复元素的随机整数向量,具体的调用格式及说明如表3-19所示。

表3-19 rng函数调用格式及说明

例3-37: 生成无重复元素的随机整数向量。

MATLAB程序如下:

    >> clear                % 清除工作区的变量
    >> r = randperm(8)      % 在区间[1, 8]生成包含8个不重复元素的随机整数向量
    r =
         1     6     4     2     8     5     3     7
    >> r = randperm(10,5)   % 在区间[1, 10]生成包含5个不重复元素的随机整数向量
    r =
        10     2     6     9     4

3.4.4 全1矩阵

全1矩阵是指元素全是1的矩阵。

在MATLAB中,ones函数用于生成元素全部为1的矩阵,该函数的调用格式及说明如表3-20所示。

表3-20 ones函数调用格式及说明

例3-38: 生成全1矩阵。

MATLAB程序如下:

    >> clear                   % 清除工作区的变量
    >> ones(5)                 % 创建5阶全1矩阵
    ans =
         1     1     1     1    1
         1     1     1     1    1
         1     1     1     1    1
         1     1     1     1    1
         1     1     1     1    1
    >> ones(2,3)               % 创建2行3列全1矩阵
    ans =
         1     1     1
         1     1     1
    >> A=[1 2 3;0 3 3;7 9 5];  % 创建3行3列矩阵A
    >> ones(size(A))           % 创建与矩阵A维数相同的3行3列全1矩阵
    ans =
         1     1     1
         1     1     1
         1     1     1

3.4.5 单位矩阵

在线性代数中,从左上角到右下角的对角线(称为主对角线)上的元素均为1,除此以外的元素均为0的矩阵,称为单位矩阵。

在MATLAB中,使用eye函数创建单位矩阵,该函数的调用格式及说明如表3-21所示。

表3-21 eye函数调用格式及说明

例3-39: 创建单位复矩阵。

MATLAB程序如下:

    >> clear                 % 清除工作区的变量
    >> p = [1+2i 1-3i];      % 定义一个复数向量p
    p =
       1.0000 + 2.0000i   1.0000 - 3.0000i
    >> I = eye(2,'like',p)   % 创建一个与 p 类似的2阶单位复矩阵I
    I =
       1.0000 + 0.0000i   0.0000 + 0.0000i
       0.0000 + 0.0000i   1.0000 + 0.0000i

3.4.6 伴随矩阵

n 阶行列式 A 中,把元素 a ij 所在的第 i 行和第 j 列划去后,留下来的 n −1阶行列式叫作元素 a ij 的余子式,记作 M ij 。同时,令 A ij =(−1) i + j M ij ,称 A ij 为元素 a ij 的代数余子式。

对于 n 阶方阵

将其元素按原位置排列所构成的行列式称为该矩阵的行列式,记作 。那么,由矩阵 A 的行列式 中各个元素的代数余子式 A ij 构成的矩阵

称为矩阵 A 的伴随矩阵(或行列式 的伴随矩阵)。

在MATLAB中,compan函数用来生成伴随矩阵,该函数的调用格式及说明如表3-22所示。

表3-22 compan函数调用格式及说明

例3-40: 伴随矩阵示例。

MATLAB程序如下:

    >> clear            % 清除工作区的变量
    >> a=[3 6 9]        % 创建行向量
    a =
         3     6     9
    >> A = compan(a)    % 生成伴随矩阵
    A =
        -2    -3
         1     0

注意

由个数组成的数表

称为 n 阶行列式。在线性代数中, n 阶行列式 A 代表一个由 A 内所有元素共同决定的一个所,其值等于行列式内所有取自不同行不同列的 n 个元素乘积的代数和,即

其中, p 1 , p 2 ,… p n 是1,2,…, n 的一个排列, 表示对所有的 n 阶全排列 p 1 , p 2 ,… p n 求和, τ ( p 1 , p 2 ,… p n )是排列 p 1 , p 2 ,… p n 的逆序数。

3.4.7 测试矩阵

在MATLAB中,利用gallery函数生成测试矩阵,该函数的调用格式及说明如表3-23所示。

表3-23 gallery函数的调用格式及说明

例3-41: 生成柯西矩阵。

在MATLAB命令行窗口中输入以下命令:

    >> clear                    % 清除工作区的变量
    >> x=1:10;                  % 创建一个数值介于1~10,长度为10的向量x
    >> y=1:10;                  % 创建一个数值介于1~10,长度为10的向量y
    >> C=gallery('cauchy',x,y)  % 生成一个10×10的柯西矩阵
    C =
  
      列 1 至 5
  
      0.5000    0.3333  0.2500  0.2000  0.1667
      0.3333    0.2500  0.2000  0.1667  0.1429
      0.2500    0.2000  0.1667  0.1429  0.1250
      0.2000    0.1667  0.1429  0.1250  0.1111
      0.1667    0.1429  0.1250  0.1111  0.1000
      0.1429    0.1250  0.1111  0.1000  0.0909
      0.1250    0.1111  0.1000  0.0909  0.0833
      0.1111    0.1000  0.0909  0.0833  0.0769
      0.1000    0.0909  0.0833  0.0769  0.0714
      0.0909    0.0833  0.0769  0.0714  0.0667
  
    列 6 至 10
  
      0.1429    0.1250  0.1111  0.1000  0.0909
      0.1250    0.1111  0.1000  0.0909  0.0833
      0.1111    0.1000  0.0909  0.0833  0.0769
      0.1000    0.0909  0.0833  0.0769  0.0714
      0.0909    0.0833  0.0769  0.0714  0.0667
      0.0833    0.0769  0.0714  0.0667  0.0625
      0.0769    0.0714  0.0667  0.0625  0.0588
      0.0714    0.0667  0.0625  0.0588  0.0556
      0.0667    0.0625  0.0588  0.0556  0.0526
      0.0625    0.0588  0.0556  0.0526  0.0500

例3-42: 生成对称数组。

在MATLAB命令行窗口中输入以下命令:

    >> clear                   % 清除工作区的变量
    >> c=linspace(0,10,6)      % 创建包含6个值介于0~10的元素的向量c
    c =
         0     2     4     6    8    10
    >> A=gallery('fiedler',c)  % 接受 6元素向量 c, 生成一个6×6对称矩阵A
    A =
         0     2     4     6    8    10
         2     0     2     4    6     8
         4     2     0     2    4     6
         6     4     2     0    2     4
         8     6     4     2    0     2
        10     8     6     4    2     0

3.4.8 魔方矩阵

魔方矩阵是指有相同的行数和列数,并且每行、每列、每条对角线上的元素和都相等的矩阵。魔方矩阵中的每个元素不能相同。同时,魔方矩阵是随机矩阵中的一种。

在MATLAB中,magic函数用来生成魔方矩阵,该函数的调用格式及说明如表3-24所示。

表3-24 magic函数调用格式及说明

例3-43: 创建魔方矩阵。

在MATLAB命令行窗口中输入以下命令:

    >> clear              % 清除工作区的变量
    >> magic(4)           % 创建一个4阶魔方矩阵
  
    ans =
        16     2   3  13
         5    11  10   8
         9     7   6  12
         4    14  15   1

例3-44: 练习全1矩阵到魔方矩阵的转换运算。

在MATLAB命令行窗口中输入以下命令:

    >> clear                       % 清除工作区的变量
    >> A=ones(2)                   % 创建一个2阶全1矩阵A
  
    A =
         1     1
         1     1
    >> A(1,2)=3;A(2,1)=4;A(2,2)=2  % 为矩阵A中的元素重新赋值
  
    A =
         1     3
         4     2
    >> B=magic(2)                  % 创建一个2阶魔方矩阵B
  
    B =
         1     3
         4     2

3.4.9 托普利兹矩阵

托普利兹(Toeplitz)矩阵是指除第一行和第一列外,其他每个元素都与左上角的元素相同的矩阵。该矩阵沿对角线的所有元素都具有相同的值,形式为

在MATLAB中,生成托普利兹矩阵的函数是toeplitz,该函数的调用格式及说明如表3-25所示。

表3-25 toeplitz函数调用格式及说明

例3-45: 生成托普利兹矩阵。

在MATLAB命令行窗口中输入以下命令:

    >> clear                 % 清除工作区的变量
    >> A=toeplitz(2:10,2:5)  % 生成一个以2:10为第一列,2:5为第一行的托普利兹矩阵A
    A =
         2     3     4     5
         3     2     3     4
         4     3     2     3
         5     4     3     2
         6     5     4     3
         7     6     5     4
         8     7     6     5
         9     8     7     6
        10     9     8     7

例3-46: 用向量生成一个对称的托普利兹矩阵。

在MATLAB命令行窗口中输入以下命令:

    >> clear            % 清除工作区的变量
    >> T=toeplitz(1:5)  % 生成一个以1:5为第一行的对称的托普利兹矩阵T
    T =
         1     2     3     4     5
         2     1     2     3     4
         3     2     1     2     3
         4     3     2     1     2
         5     4     3     2     1

3.4.10 范德蒙矩阵

Vandermonde矩阵(范德蒙矩阵)是一个各列呈几何级数关系的矩阵,形如

在MATLAB中,Vander函数用来生成Vandermonde矩阵,该函数的调用格式及说明如表3-26所示。

表3-26 Vander函数调用格式及说明

对于输入向量 v =( v 1 , v 2 ,…, v N ),MATLAB得到的Vandermonde矩阵为

该矩阵用公式 A ( i , j )= v ( i ) ( N j ) 进行描述,以使其列是向量 v 的幂。

例3-47: 生成范德蒙矩阵。

在MATLAB命令行窗口中输入以下命令:

    >> clear              % 清除工作区的变量
  
    >> vander([1 2 3 4])  % 生成列是指定向量的幂的Vandermonde矩阵
  
    ans =
         1     1     1    1
         8     4     2    1
        27     9     3    1
        64    16     4    1

3.4.11 希尔伯特矩阵

希尔伯特(Hil bert)矩阵是一种数学变换矩阵,其中元素 i j 分别为矩阵的行标和列标,例如:

    [1,1/2,1/3,…,1/n]
    [1/2,1/3,1/4,…,1/(n+1)]
    [1/3,1/4,1/5,…,1/(n+2)]
    …
    [1/n,1/(n+1),1/(n+2),…,1/(2n-1)]

若希尔伯特矩阵中的任何一个元素发生一点儿变动,整个矩阵的行列式的值和逆矩阵都会发生巨大的变化。

在MATLAB中,hilb函数用来生成希尔伯特矩阵,inhilb函数用来生成逆希尔伯特矩阵,其调用格式及说明分别如表3-27和表3-28所示。

表3-27 hilb函数调用格式及说明

表3-28 invhilb函数调用格式及说明

例3-48: 数值希尔伯矩阵运算。

在MATLAB命令行窗口中输入以下命令:

    >> clear               % 清除工作区的变量
    >> A=hilb(4)           % 创建希尔伯特矩阵A
    A =
        1.0000    0.5000    0.3333    0.2500
        0.5000    0.3333    0.2500    0.2000
        0.3333    0.2500    0.2000    0.1667
        0.2500    0.2000    0.1667    0.1429
    >> B1=invhilb (4)      % 求逆运算
    B1 =
              16        -120         240        -140
            -120        1200       -2700        1680
             240       -2700        6480       -4200
            -140        1680       -4200        2800
    >> B2=inv(A)           % Hilbert矩阵求逆运算
    B2 =
       1.0e+03 *
        0.0160   -0.1200    0.2400   -0.1400
       -0.1200    1.2000   -2.7000    1.6800
        0.2400   -2.7000    6.4800   -4.2000
       -0.1400    1.6800   -4.2000    2.8000
    >> B3=A'               % 转置运算
    B3 =
        1.0000    0.5000    0.3333    0.2500
        0.5000    0.3333    0.2500    0.2000
        0.3333    0.2500    0.2000    0.1667
        0.2500    0.2000    0.1667    0.1429

3.4.12 阿达马矩阵

阿达马(Hadamard)矩阵是一个方阵,每个元素都是+1或-1,每行都是互相正交的,常用于纠错码,如Reed-Muller码。 n 阶的阿达马矩阵 H 满足关系

HH T = n I n

其中, I n n × n 的单位矩阵。阿达马矩阵的阶数必须是1、2或者4的倍数。

假设 M 是一个 n 阶的实矩阵,其中每个元素都是有界的, ,则存在阿达马不等式

当且仅当 M 是阿达马矩阵式上式时取等号。

在MATLAB中,函数Hadamard用于生成阿达马矩阵,调用格式及说明如表3-29所示。

表3-29 Hadamard函数调用格式及说明

例3-49: 创建4×4 Hadamard矩阵。

在MATLAB命令行窗口中输入以下命令:

    >> clear                % 清除工作区的变量
    >> H = hadamard(4)      % 创建4阶Hadamard 矩阵H
    H =
         1     1     1   1
         1    -1     1  -1
         1     1    -1  -1
         1    -1    -1   1

3.4.13 汉克尔矩阵

汉克尔(Hankel)矩阵是指每一条副对角线上的元素都相等的方阵,形如

希尔伯特矩阵是一种特殊的汉克尔矩阵。

在MATLAB中,Hankel函数用来生成Hankel矩阵,该函数的调用格式及说明如表3-30所示。

表3-30 Hankel函数调用格式及说明

例3-50: 生成Hankel矩阵。

在MATLAB命令行窗口中输入以下命令:

    >> clear             % 清除工作区的变量
    >> c = 1∶3;         % 创建向量c
    >> r = 3:6;          % 创建向量r
    >> h = hankel(c,r)   % 创建第一列是 c ,最后一行是 r 的Hankel矩阵h
  
    h =
         1     2     3     4
         2     3     4     5
         3     4     5     6

3.4.14 帕斯卡矩阵

帕斯卡(Pascal)矩阵是由杨辉三角形表组成的矩阵。杨辉三角形表是二次项( x + y ) n 展开后的系数随自然数 n 的增大而形成的一个三角形表。

杨辉三角形的排列性质如下:

    1      1
    2      1   1
    3      1   2   1
    4      1   3   3    1
    5      1   4   6    4   1
    6      1   5  10   10   5   1
    7      1   6  15   20  15   6   1
    8      1   8  28   56  70  56  28  8   1
    9      1  10  45  120 210 252 120 45  10

帕斯卡矩阵的第一行元素和第一列元素都为1,其余位置处的元素是该元素的左边元素加上一行同列元素的结果。即

a ij = a i,j -1 + a i -1 ,j

其中, a ij 表示第 i 行第 j 列的元素。

3阶帕斯卡矩阵如下:

    1  1  1
    1  2  3
    1  3  6

在杨辉三角形中,绘制如图3-1所示的菱形,可以发现菱形内的值构成4阶帕斯卡矩阵。

图3-1 由杨辉三角形构造帕斯卡矩阵

在MATLAB中,帕斯卡矩阵的生成函数为pascal,调用格式及说明如表3-31所示。

表3-31 pascal函数调用格式及说明

例3-51: 创建帕斯卡矩阵。

在MATLAB命令行窗口中输入以下命令:

    >> clear        % 清除工作区的变量
    >> A=pascal(5)  % 创建n阶帕斯卡矩阵
    A =
         1  1   1   1   1
         1  2   3   4   5
         1  3   6  10  15
         1  4  10  20  35
         1  5  15  35  70

3.4.15 Rosser矩阵

Rosser矩阵是一个著名的矩阵,它是仅包含整数元素的8×8矩阵,常用于计算特征值。

在MATLAB中,函数rosser用于生成Rosser矩阵,调用格式及说明如表3-32所示。

表3-32 rosser函数调用格式及说明

例3-52: 生成“单精度”类的Rosser矩阵。

在MATLAB命令行窗口中输入以下命令: NvL8Hcf7Yc7qNMjyVGEkvAh87WOc6Q3gc7Np1f6VEs63QNPTTWfG93Htq11vmCYk

    >> clear                  % 清除工作区的变量
    >> Y = rosser('single')   % 将 classname 指定为single,返回该类型的Rosser矩阵Y
    Y =
      8×8 single 矩阵
  
       611     196     -192     407      -8     -52     -49     29
       196     899      113    -192     -71     -43      -8     -44
      -192     113      899     196      61      49       8     52
       407    -192      196     611       8      44      59     -23
        -8     -71       61       8     411    -599     208     208
       -52     -43       49      44    -599     411     208     208
       -49      -8        8      59     208     208      99    -911
        29     -44       52     -23     208     208    -911     99
点击中间区域
呼出菜单
上一章
目录
下一章
×