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

3.1 矩阵的基本操作

矩阵是由 m × n 个数 a ij ( i =1,2,…, m ; j =1,2,…, n )排成的 m n 列数表,记作

称为 m × n 矩阵,也可以记作 a ij A m × n 。其中, i 表示行数, j 表示列数。若 m = n ,则称该矩阵为 n 阶矩阵( n 阶方阵)。

3.1.1 矩阵的创建

矩阵的生成主要有直接输入法、M文件生成法和文本文件生成法等。

1.直接输入

在键盘上直接按行方式输入矩阵是最方便、最常用的创建数值矩阵的方法,尤其适合较小的简单矩阵。在用此方法创建矩阵时,应当注意以下几点:

输入矩阵时要以“[ ]”为其标识符号,矩阵的所有元素必须都在方括号内。

矩阵同行元素之间由空格(个数不限)或逗号分隔,行与行之间用分号或回车键分隔。

矩阵大小不需要预先定义。

矩阵元素可以是运算表达式。

若“[ ]”中无元素,表示空矩阵。

如果不想显示中间结果,可以用“;”结束。

例3-1: 创建元素均是15的3×3矩阵。

MATLAB程序如下:

    >> clear                           % 清除工作区的变量
    >> a=[15 15 15;15 15 15;15 15 15]  % 直接输入矩阵a
    a =
        15    15    15
        15    15    15
        15    15    15

注意

在输入矩阵时,MATLAB允许方括号中嵌套方括号,例如下面的语句是合法的:

    >> [[1 2 3];[2 4 6];7 8 9]
    ans =
         1     2     3
         2     4     6
         7     8     9

结果是一个3阶方阵。

例3-2: 创建复数矩阵。

本实例演示创建包含复数的矩阵 A ,其中

MATLAB程序如下:

    >> clear                     % 清除工作区的变量
    >> A=[[1,1+i,2];[2,3+2i,1]]  % 创建包含复数的矩阵A
    A =
       1.0000 + 0.0000i   1.0000 + 1.0000i   2.0000 + 0.0000i
       2.0000 + 0.0000i   3.0000 + 2.0000i   1.0000 + 0.0000i

2.利用M文件创建

当矩阵的规模比较大时,直接输入法不仅显得笨拙,而且出差错也不易修改。为了解决这些问题,可以将要输入的矩阵按格式先写入一个文本文件中,并将此文件以“m”为扩展名保存,即保存为M文件。

M文件是一种可以在MATLAB环境下运行的文本文件,分为命令式文件和函数式文件两种。在MATLAB命令行窗中输入M文件的文件名,文本文件中的大型矩阵即可被输入内存中。

例3-3: 使用M文件创建大型矩阵。

本实例演示利用命令式M文件创建大型矩阵。

操作步骤如下:

(1)编制一个名为gmatrix的矩阵。

(2)在M文件编辑器中编制一个名为sample.m的M文件。

    % sample.m
    % 创建一个M文件,用以输入大规模矩阵
    gmatrix=[378 89 90  83 382 92 29;
    3829 32 9283 2938 378 839 29;
    388 389 200 923 920 92 7478;
    3829 892 66 89 90 56 8980;
    7827 67 890 6557 45  123 35]

(3)运行M文件。在MATLAB命令行窗口中输入文件名之后,按Enter键得到结果。

    >> clear          % 清除工作区的变量
    >> sample         % 运行M文件sample.m
    gmatrix =
    1至5列
    378          89          90          83   382
    3829          32        9283        2938   378
    388          389         200         923   920
    3829         892          66          89    90
    7827          67         890        6557    45
    6至7列
    92           29
    839          29
    92         7478
    56         8980
    123          35

在实际应用中,上例中的矩阵还不算“大型”矩阵,此处只是借例说明。

注意

M文件中的变量名与文件名不能相同,否则会造成变量名和函数名的混乱。运行M文件时,需要先将M文件sample.m复制到当前目录文件夹下,否则运行时无法调用。

    >>  sample

在当前文件夹或MATLAB路径中未找到'sample',但它位于:

    C:\Program Files\Polyspace\R2020a\bin\yuanwenjian

更改MATLAB当前文件夹或将其文件夹添加到MATLAB路径。

3.利用文本创建

MATLAB中的矩阵还可以由文本文件创建,即在文件夹(通常为work文件夹)中建立txt文件,在命令行窗口中直接调用此文件即可。

例3-4: 创建生活用品矩阵。

日用商品在3家商店中有不同的价格,其中,毛巾价格分别为3.5元、4元、5元;脸盆价格分别为10元、15元、20元。

操作步骤如下:

(1)在文本文档中建立一个文本文件,输入以下内容(将单位量的售价用矩阵表示,行表示商店,列表示商品):

    3.5   4  5
    10   15  20

(2)将文本文件以goods.txt命名并保存到当前目录文件夹下,然后在MATLAB命令行窗口中输入以下命令:

    >> clear             % 清除工作区的变量
    >> load goods.txt    % 将文本文件加载到工作区
    >> goods             % 输入文件名称创建矩阵
    goods =
        3.5000    4.0000    5.0000
       10.0000   15.0000   20.0000

结果创建出商品矩阵goods。

注意

运行M文件时,需要先将文本文件goods.txt复制到当前目录文件夹下,否则运行时无法调用。

3.1.2 矩阵的扩展

在MATLAB中,一个阵列如果具有两个以上的维度则被称为多维数组。多维数组是正常的两维矩阵的延伸。

一般情况下,MATLAB中需要先创建一个向量,然后扩展为二维矩阵;或先创建一个二维矩阵,然后对该二维矩阵进行扩展。

矩阵扩展的基本格式为

D=[A;B C]

其中, A 为原矩阵, B C 中包含要扩充的元素, D 为扩充后的矩阵。

例3-5: 矩阵扩展示例。

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

    >> A=[1 2 3;4 5 6];  % 定义2行3列的矩阵A
    >> B=eye(2);         % 定义2×2的单位矩阵B
    >> C=zeros(2,1);     % 定义2×1的全零矩阵C
    >> D=[A;B C]         % 使用矩阵B和C扩展矩阵A,得到矩阵D
    D =
         1     2     3
         4     5     6
         1     0     0
         0     1     0

对矩阵元素可直接赋值,具体格式如表3-1所示。

表3-1 对矩阵元素赋值

3.1.3 矩阵的转置

对于矩阵 A ,如果有矩阵 B 满足 b ij = a ji ,即 B 的第 i 行第 j 列元素是 A 的第 j 行第 i 列元素,简单来说就是,将矩阵 A 的行元素变成矩阵 B 的列元素,矩阵 A 的列元素变成矩阵 B 的行元素,则称矩阵 B 是矩阵 A 的转置矩阵,记作 B = A T ,即有

矩阵的转置满足下述运算规律:

( A T ) T = A

( A + B ) T = A T + B T

( λ A ) T = λ A T

( AB ) T = B T A T

矩阵的转置运算可以通过符号“'”或函数transpose实现,调用格式及说明如表3-2所示。

表3-2 矩阵转置运算格式及说明

例3-6: 求矩阵 的二次转置。

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

    >> clear                   % 清除工作区的变量
    >> A=[1 -1 2;0 1 6;2 3 4]  % 输入矩阵A
    A =
         1    -1     2
         0     1     6
         2     3     4
    >> A'                      % 转置矩阵A
    ans =
         1     0     2
        -1     1     3
         2     6     4
    >> A''                          % 二次转置矩阵
    ans =
         1    -1     2
         0     1     6
         2     3     4

例3-7: 验证转置矩阵的性质( λ A ) T = λ A T

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

    >> clear                         % 清除工作区的变量
    >>  A=[6 -6 12;0 6 36;12 18 24]  % 输入矩阵A
    A =
         6    -6    12
         0     6    36
        12    18    24
    >> C1=A'                         % 求矩阵A的转置矩阵
    C1 =
         6     0    12
        -6     6    18
        12    36    24
    >> C2=(6*A)'                     % 求6*A的转置矩阵
    C2 =
        36     0    72
       -36    36   108
        72   216   144
    >> C3=6*A'                       % 求6与A的转置矩阵的积
    C3 =
        36     0    72
       -36    36   108
        72   216   144

3.1.4 矩阵的求逆

对于 n 阶方阵 A ,如果有 n 阶方阵 B 满足 AB = BA = I ,则称方阵 A 为可逆的,称方阵 B A 的逆矩阵,记为 A −1

1.可逆矩阵的性质

一般地,可逆矩阵具有如下性质:

A 可逆,则 A −1 是唯一的。

A 可逆,则 A −1 也可逆,并且( A −1 ) −1 = A

n 阶方阵 A B 都可逆,则 AB 也可逆,且( AB ) −1 = B −1 A −1

A 可逆,则| A −1 |=| A | −1

满足| A |≠0的方阵 A 称为非奇异的,否则就称为奇异的。

求解矩阵的逆使用函数inv,调用格式为

Y=inv(X)

例3-8: 求解矩阵的逆。

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

    >> clear              % 清除工作区的变量
    >>  A=rand(3)         % 创建一个3×3的随机数矩阵A
    A =
        0.0540    0.9340   0.4694
        0.5308    0.1299   0.0119
        0.7792    0.5688   0.3371
    >> B = inv(A)         % 求矩阵A的逆矩阵
    B =
       -0.5946    0.7689   0.8008
        4.7250    4.5818  -3.9912
       -3.2235  -14.1952   7.8498

注意

逆矩阵必须使用方阵,即2×2、3×3,即 n × n 格式的矩阵,否则弹出警告信息。例如

    >> A=[1 -1;0 1;2 3];  % 创建3×2的矩阵A
    >> B=inv(A)           % 求矩阵A的逆矩阵
    错误使用 inv
    矩阵必须为方阵

2.矩阵的求逆条件数运算

求解矩阵的逆条件数值使用函数rcond,调用格式为

C=rcond(A)

例3-9: 求解矩阵的逆条件数。

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

    >> clear              % 清除工作区的变量
    >>  A=rand(3)         % 创建一个3×3的随机数矩阵A
    A =
        0.0540    0.9340   0.4694
        0.5308    0.1299   0.0119
        0.7792    0.5688   0.3371
    >> C = rcond(A)       % 求矩阵A的逆条件数
    C =
        0.0349

例3-10: 求矩阵 的逆矩阵与转置矩阵。

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

    >> clear                    % 清除工作区的变量
    >> A=[1 -1 2;0 1 6;2 3 4]   % 输入矩阵A
    A =
         1    -1     2
         0     1     6
         2     3     4
    >> B=inv(A)                 % 求矩阵A的逆矩阵
    B =
        0.4667   -0.3333    0.2667
       -0.4000         0    0.2000
        0.0667    0.1667   -0.0333
    >> C=A'                     % 求矩阵A的转置矩阵
    C =
         1     0     2
        -1     1     3
         2     6     4
    

例3-11: 验证逆矩阵性质( λ A ) −1 = λ −1 A −1

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

    >> clear                    % 清除工作区的变量
    >> A=[1,-1,2;0,1,6;2,3,4];  % 创建一个3×3的方阵A
    >> A1=6*A                   % 计算6与矩阵A的乘积
    A1 =
         6    -6    12
         0     6    36
        12    18    24
    >> B1=6*inv(A)              % 计算6与矩阵A的逆矩阵的乘积
    B1 =
        2.8000   -2.0000   1.6000
       -2.4000         0   1.2000
        0.4000    1.0000  -0.2000
    >> B2=inv(6)*inv(A)         % 计算6的倒数与A的逆矩阵的乘积
    B2 =
        0.0778   -0.0556   0.0444
       -0.0667        0   0.0333
        0.0111    0.0278   -0.0056
    >> B3=inv(A1)               % 计算6与矩阵A的乘积的逆矩阵
    B3 =
        0.0778   -0.0556   0.0444
       -0.0667         0   0.0333
        0.0111    0.0278  -0.0056

3.1.5 矩阵的旋转

在MATLAB中,rot90函数用于将数组旋转90°,该函数的调用格式及说明如表3-3所示。

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

例3-12: 旋转矩阵。

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

    >> clear                    % 清除工作区的变量
    >> A = [1 2 3;4 5 6;7 8 9]  % 创建一个3×3的方阵A
    A =
         1     2     3
         4     5     6
         7     8     9
    >> B=rot90(A)               % 将A逆时针方向旋转90°
    B =
         3     6     9
         2     5     8
         1     4     7
    >> C=rot90(A,2)             % 将A逆时针方向旋转180°
    C =
         9     8     7
         6     5     4
         3     2     1
    >> D=rot90(A,-1)    % 将A顺时针方向旋转90°
    D =
         7     4     1
         8     5     2
         9     6     3
  

3.1.6 矩阵的翻转

在MATLAB中,flip函数用于镜像翻转矩阵元素顺序,该函数的调用格式及说明如表3-4所示。

表3-4 flip函数调用格式及说明

翻转矩阵元素的操作分为两种,包括左右翻转与上下翻转。flip(A,1)翻转每一列中的元素,flip(A,2)翻转每一行中的元素。

例3-13: 矩阵的变向示例。

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

    >> clear                           % 清除工作区的变量
    >> C =[1 4 7 10;2 5 8 11;3 6 9 12] % 输入一个3×4的矩阵C
        C =
         1     4     7    10
         2     5     8    11
         3     6     9    12
    >> flip(C,1)                       % 翻转矩阵C中每一列的元素
    ans =
         3     6     9    12
         2     5     8    11
         1     4     7    10
    >> flip(C,2)                       % 翻转矩阵C中每一行的元素
    ans =
        10     7     4     1
        11     8     5     2
        12     9     6     3

MATLAB还提供了专门的左右翻转与上下翻转函数,下面分别进行介绍:

(1)左右翻转。使用fliplr函数将矩阵中的元素左右翻转,调用格式为

B=fliplr(A)

例3-14: 矩阵左右翻转示例。

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

    >> clear                      % 清除工作区的变量
    >> A=rand(3)                  % 创建一个3×3的随机数矩阵
    A =
        0.9157    0.6557  0.9340
        0.7922    0.0357  0.6787
        0.9595    0.8491  0.7577
    >> B = fliplr(A)              % 从左向右翻转矩阵中的元素
    B =
        0.9340    0.6557  0.9157
        0.6787    0.0357  0.7922
        0.7577    0.8491  0.9595

(2)上下翻转。使用flipud函数将矩阵中的元素上下翻转,调用格式为

B=flipud(A)

例3-15: 矩阵上下翻转示例。

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

    >> clear          % 清除工作区的变量
    >>  A=rand(3)     % 创建一个3×3的随机数矩阵
    A =
        0.7431    0.1712    0.2769
        0.3922    0.7060    0.0462
        0.6555    0.0318    0.0971
    >> B = flipud(A)  % 从上向下翻转矩阵中的元素
    B =
        0.6555    0.0318    0.0971
        0.3922    0.7060    0.0462
        0.7431    0.1712    0.2769

3.1.7 矩阵的变维

矩阵的变维可以用冒号法和函数法。

1.冒号法

用符号“:”设置矩阵维度的格式为

A(:)=B(:)

例3-16: 修改矩阵维度。

本实例演示矩阵的维度变换。

MATLAB程序如下:

    >> clear            % 清除工作区的变量
    >> A=1:12           % 创建一个行向量
    A =
         1     2     3     4     5     6     7     8     9    10  11  12
    >> C=zeros(3,4);    % 用冒号法必须先设定修改后矩阵的形状
    >> C(:)=A(:)        % 将矩阵维度变换为3行4列
    C =
         1     4     7    10
         2     5     8    11
         3     6     9    12

2.函数法

在MATLAB中,reshape函数用于重新设置矩阵的维度,该函数的调用格式及说明如表3-5所示。

表3-5 reshape函数调用格式及说明

在MATLAB中,permute函数用来置换矩阵维度,该函数的调用格式及说明如表3-6所示。

表3-6 permute函数调用格式及说明

例3-17: 将向量重构为矩阵。

MATLAB程序如下:

    >> clear               % 清除工作区的变量
    >> A = 1:6             % 创建一个行向量
    A =
         1     2     3     4     5     6
    >> B = reshape(A,[2,3])  % 将A变维成3×3的矩阵
    B =
         1     3     5
         2     4     6
    >> C=permute(B,[2 1])  % 交换矩阵B的行和列维度
    C =
         1     2
         3     4
         5     6

3.1.8 矩阵的信息

1.矩阵的求秩运算

矩阵的求秩运算可以通过函数rank实现,该函数的调用格式及说明如表3-7所示。

表3-7 rank函数调用格式及说明

例3-18: 求矩阵的秩。

MATLAB程序如下:

    >> clear                           % 清除工作区的变量
    >> A = [1 -5 2; -3  7 9; 4 -1 6]   % 创建矩阵A
         1    -5     2
        -3     7     9
         4    -1     6
    >> rank(A)                         % 矩阵求秩
    ans =
    3

2.矩阵的求迹运算

在线性代数中,一个 n × n 矩阵 A 的主对角线(从左上方至右下方的对角线)上各个元素的总和被称为矩阵 A 的迹(或迹数),一般记作tr(A),即

矩阵的求迹运算可以通过函数trace实现,该函数的调用格式及说明如表3-8所示。

表3-8 trace函数调用格式及说明

例3-19: 求矩阵的迹。

MATLAB程序如下:

    >> clear        % 清除工作区的变量
    >> A = magic(3) % 创建3阶魔方矩阵
    A =
       8     1     6
       3     5     7
       4     9     2
    >> trace(A)     % 求矩阵A的迹
       ans =
           15

3.方阵的行列式运算

一个 n × n 的方阵 A 的行列式记为det( A )或者 ,一个2×2方阵的行列式可表示为

在MATLAB中,det函数用来求解方阵的行列式,调用格式及说明如表3-9所示。

表3-9 det函数调用格式及说明

在MATLAB中,numel函数用于计算矩阵 A 中的元素个数,其调用格式及说明如表3-10所示。

表3-10 numel函数调用格式及说明

例3-20: 三维矩阵中元素的数目。

MATLAB程序如下: pFPNWUdX8R5/uaYHhYCi1WgT0EGE2GnSt7RHCYu3cE6yP2ENHvjctlHiZZ4n92Qy

    >> clear          % 清除工作区的变量
    >> A=magic(4)     % 创建4阶魔方矩阵A
    A =
        16     2     3    13
         5    11    10     8
         9     7     6    12
         4    14    15     1
    >> A(:,:,2) = A'  % 将魔方矩阵的转置矩阵赋值给三维矩阵的第二块
                      % 最终生成的是一个4×4×2的矩阵
    A(:,:,1) =
        16     2     3    13
         5    11    10     8
         9     7     6    12
         4    14    15     1
    A(:,:,2) =
        16     5     9     4
         2    11     7    14
         3    10     6    15
        13     8    12     1
    >> n = numel(A)   % 计算矩阵中有多少个元素
    n =
        32
    >> prod(size(A))  % 计算三个维度矩阵数目的乘积
    ans =
        32
点击中间区域
呼出菜单
上一章
目录
下一章
×