Matlab R2016a从入门到精通 (CAX工程应用丛书)
上QQ阅读APP看书,第一时间看更新

2.4 矩阵基础

矩阵的基本操作主要包括构造矩阵、改变矩阵维度与矩阵大小、矩阵索引、获取矩阵属性信息等。MATLAB提供了相应的命令或相应的库函数与各操作对应。

2.4.1 有关概念

有关矩阵的概念,可以参考有关的数学书籍,这里不再赘述。但向量其本质上是一维的矩阵,在使用MATLAB进行科学计算时,基本不区分矩阵与向量,因此需要注意。

数组是在程序设计中,把具有相同类型的若干变量按有序的形式组织起来的一种形式,这些按序排列的同类数据元素的集合称为数组。

矩阵和数组在MATLAB中的区别主要表现在两方面:

● 矩阵是数学上的概念,而数组是计算机程序设计领域的概念。

● 矩阵作为一种变换或者映射运算符的体现,其运算有着明确而严格的数学规则;而数组运算是MATLAB软件定义的规则。

两者的联系主要体现在,矩阵是以数组的形式存在的,一维数组相当于向量,二维数组相当于矩阵,可将矩阵视为数组的子集。

2.4.2 创建矩阵

矩阵可以通过两种方式创建:

● 对变量直接进行赋值;

● 使用MATLAB提供的特殊矩阵创建函数,如表2.17所示。

表2.17 特殊矩阵的创建函数

注:k=0为主对角线;k< 0为下第k对角线;k> 0为上第k对角线。

下面介绍简单矩阵和特殊矩阵的创建方法。

1.创建简单矩阵

采用矩阵构造符号——方括号“[]”,将矩阵元素置于方括号内,同行元素之间用空格或逗号来隔开;行与行之间用分号“; ”隔开。

例2-34,创建简单矩阵示例。

在命令行窗口输入命令:

    A = [1,2,3;4,6,8]          % 逗号和分号的使用构造矩阵
    B = [2 3 4;3 2 1]          % 空格和分号的使用构造矩阵
    V1 = [6,9,12,3]            % 构造行向量
    V2 = [1;8]                 % 构造列向量

程序运行过程中的输出为:

    A =  1      2      3
        4      6      8
    B =  2      3      4
        3      2      1
    V1 = 6      9     12      3
    V2 =      1
        8

2.创建特殊矩阵

使用表中命令可以创建特殊矩阵。

例2-35,创建特殊矩阵示例。

在命令行窗口输入:

    OnesMat= ones(2)
    ZerosMat= zeros(2)
    IdenMat = eye(2)
    IdenMat23 = eye(2, 3)
    IdenMat32 = eye(3, 2)

输出结果如下:

    OnesMat =   1      1
                1      1
    ZerosMat =  0      0
                0      0
    IdenMat =   1      0
            0     1
    IdenMat23 = 1      0      0
                0      1      0
    IdenMat32 = 1      0
                0      1
                0      0

3.创建空矩阵

可以使用[]代表空矩阵,通过直接赋值的方法来创建空矩阵。

2.4.3 改变矩阵结构

矩阵大小和结构可以改变,实现的方式主要有旋转矩阵、改变矩阵维度、删除矩阵元素等。MATLAB提供的此类函数如表2.18所示。

表2.18 矩阵结构改变函数

例2-36,矩阵的旋转与维度的改变。

在命令行窗口输入:

    A = [1,2,3;4,6,8]
    B= reshape(A, 2, 3)
    C= fliplr(A )
    D= rot90(A)
    E= repmat(A, [1 2])

输出结果如下:

    A =  1      2      3
         4      6      8
    B =  1      2      3
         4      6      8
    C =  3      2      1
         8      6      4
    D =  3      8
         2      6
         1      4
    E =  1      2      3      1      2      3
          4      6      8      4      6      8

2.4.4 矩阵下标

矩阵元素索引可分为双下标索引和单下标索引。

● 双下标索引通过两个下标对来对应元素在矩阵中的行列位置,例如A(2,3)表示矩阵A中第2行第3列的元素。

● 单下标索引通过一个下标对来对应元素在矩阵中的行列位置,其采用列元素优先的原则,对m行n列的矩阵按列排序进行重组,成为一位数组,再取新的一维数组中的元素位置作为元素在矩阵中的单下标。例如对于3×4的矩阵,A(7)表示矩阵A中第1行第3列的元素,而A(9)表示矩阵A中第3行第3列的元素。

下面介绍访问矩阵元素的具体方法。

1.矩阵下标引用

常用的矩阵索引表达式如表2.19所示。

表2.19 矩阵的索引表达式

例2-37,矩阵下标的引用示例。

在命令行窗口输入:

    M= magic(5) , SubM = M( 2:3, 3:4 ), AM = M ( [7:8 16:18] )

输出结果如下:

    M =  17     24      1      8     15
        23      5      7     14     16
        4      6     13     20     22
        10     12     19     21      3
        11     18     25      2      9
    SubM =   7     14
        13     20
    AM =5      6      8     14     20

2.引用转换

矩阵中某一元素的单下标索引值和双下标索引值之间,可以通过sub2ind函数进行转换。

例2-38,单双下标索引值转换示例。

在命令行窗口输入:

    ind = sub2ind([3 4], 1,3), [I J]= ind2sub([3 4], 7)

输出结果如下:

    ind =     7
    I =  1
    J =  3

3.访问多个矩阵元素

例2-39,访问多个矩阵元素示例。

在命令行窗口输入:

    A=magic(3)
    A1= A(1:2:9)
    A2= A(1:3,1:2)

输出结果如下:

    A = 8      1      6
        3      5      7
        4      9      2
    A1 =8      4      5      6      2
    A2 =8      1
             3      5
             4      9

2.4.5 矩阵信息

矩阵的信息主要包括矩阵结构、矩阵大小、矩阵维度、矩阵的数据类型及内存占用等。

1.矩阵结构

矩阵的结构是指矩阵子元素的排列方式。MATLAB提供了如表2.20所示结构判断函数,这类函数的返回值是逻辑类型的数据:返回值为“1”表示该矩阵是特定类型的矩阵;返回值为“0”表示该矩阵不是该特定类型的矩阵。

表2.20 矩阵结构判断函数

例2-40,矩阵结构判断函数的使用方法示例。

在命令行窗口输入:

    A=magic(3);
    p1=isempty(A)         % 判断矩阵A是否为空矩阵
    p2=isscalar(A)        % 判断矩阵A是否为标量
    p3=isvector(A)        % 判断矩阵A是否为向量
    p4=issparse(A)        % 判断矩阵A是否为稀疏矩阵

输出结果如下:

    p1 =      0
    p2 =      0
    p3 =      0
    p4 =      0

2.矩阵大小

矩阵的形状信息通常包括:

● 矩阵的维数;

● 矩阵各维长度;

● 矩阵元素个数。

MATLAB提供了4个函数,分别用于获取矩阵形状以上三方面的相关信息,如表2.21所示。

表2.21 矩阵形状信息查询函数

例2-41,矩阵形状信息查询函数的使用示例。

在命令行窗口输入:

    X=[magic(3) [1 1 1]']
    nd=ndims(X)
    [r, c]=size(X)
    l=length(X)
    n=numel(X)

输出结果如下:

    X =  8      1      6      1
        3      5      7      1
        4      9      2      1
    nd =2
    r =  3
    c =  4
    l =  4
    n =  12

3.矩阵维度

MATLAB将空矩阵、标量矩阵、一维矩阵和二维矩阵都作为普通二维数组对待,并提供ndims函数计算矩阵维度。

例2-42,矩阵维度示例。

在命令行窗口输入:

    A = []; B = 5; C = 1:3; D = zeros(2); E(:, :,2) = [1 2; 3 4];
    Nd= [ndims(A) ndims(B) ndims(C) ndims(D) ndims(E)]

输出结果如下:

    Nd =  2      2      2      2      3

4.矩阵数据类型

矩阵的元素可以使用各种各样的数据类型,对应不同数据类型的元素,可以是数值、字符串、单元数组、结构等。

MATLAB中提供了一系列关于数据类型的判断函数,如表2.22所示。这类函数的返回值是逻辑类型数据:返回值为“1”表示是某一特定的数据类型;返回值为“0”表示不是该特定的数据类型。

表2.22 矩阵数据类型的测试函数

例2-43,矩阵元素的数据类型的判断示例。

在命令行窗口输入:

    A =[magic(3) [1 1 1]'];
    p1=isnumeric(A)
    p2=isfloat(A)
    p3=islogical(A)

得到的结果为:

    p1 =  1
    p2 =  1
    p3 =  0

5.矩阵占用的内存

可以通过whos命令查看当前工作区中的指定变量的所有信息,包括变量名、矩阵大小、内存占用和数据类型等。

例2-44,查看矩阵占用的内存示例。

在命令行窗口输入:

    Matrix = rand(3);
    whos Matrix

输出结果如下:

    Matrix =
        0.2551     0.6991
        0.5060     0.8909

在命令行窗口输入:

    whos Matrix

输出结果如下:

    Name          Size               Bytes  Class      Attributes
    Matrix       3x3                   72  double