MATLAB基础及其应用教程
上QQ阅读APP看书,第一时间看更新

2.4.3 数组的代数运算

本节主要介绍数组的加减乘除、乘幂与开方、指数与对数等运算,通过实例来体会数组代数运算与矩阵代数运算的区别。

1.数组的加减、数乘与乘法

数组加减运算的运算符与矩阵相同,定义在表2-2中,而乘法运算的运算符在表2-3中已经定义。现举例说明应用。

【例2.38】 一维和二维数组的加减乘运算。

        >> A1=[6 5 4 3 2 1]; B1=[1 2 3 4 5 6];
        >> C1=A1+B1, C2=C1-B1, C3=A1.*B1
        C1 =
            7    7    7    7    7    7
        C2 =
            6    5    4    3    2    1
        C3 =
            6   10   12   12   10    6

        >> A2=reshape(A1,2,3), B2=reshape(B1,2,3)
        A2 =
            6    4    2
            5    3    1
        B2 =
            1    3    5
            2    4    6
        >> D1=A2+B2, D2=3.*A2, D3=A2.*B2            %体会对应元素相加减和相乘
        D1 =
            7    7    7
            7    7    7
        D2 =
            18   12    6
            15    9    3
        D3 =
            6   12   10
            10   12    6

【例2.39】 三维数组的乘法示例(续例2.38)。

        >> A3=cat(3, D2, D3), B3=repmat(D1, [1,1,2])
        A3(:, :,1) =
            18   12    6
            15    9    3
        A3(:, :,2) =
             6   12   10
            10   12    6
        B3(:, :,1) =
             7    7    7
             7    7    7
        B3(:, :,2) =
             7    7    7
             7    7    7
        >> A3.*B3                  %体会三维数组对应元素相乘的含义
        ans(:, :,1) =
           126   84   42
           105   63   21
        ans(:, :,2) =
            42   84   70
            70   84   42

2.数组的除法

为了与矩阵运算相对应,数组的除法运算也分左、右除来定义,其运算符及其定义列在表2-3中。

【例2.40】 用例2.38的数据做数组的左右除。

        >> D1./4
        ans =
            1.7500   1.7500   1.7500
            1.7500   1.7500   1.7500
        >> 4./D1
        ans =
            0.5714   0.5714   0.5714
            0.5714   0.5714   0.5714
        >> A3./B3                  %请与下面B3.\A3的结果相比较,体会数组左右除的含义
        ans(:, :,1) =
            2.5714   1.7143   0.8571
            2.1429   1.2857   0.4286
        ans(:, :,2) =
            0.8571   1.7143   1.4286
            1.4286   1.7143   0.8571
        >> B3.\A3
        ans(:, :,1) =
            2.5714   1.7143   0.8571
            2.1429   1.2857   0.4286
        ans(:, :,2) =
            0.8571   1.7143   1.4286
            1.4286   1.7143   0.8571

3.数组的乘幂与开方

在表2-3中,数组的幂运算符是.^,但数组的开方运算需借助开方函数sqrt才能完成,没有开方运算符。

【例2.41】 对2×3的二维数组A的乘幂与开方运算。

        >> A=[1 2 3;4 5 6]; A2p=A.^2, App=A.^1.5
        A2p =
            1    4    9
            16   25   36
        App =
            1.0000   2.8284   5.1962
            8.0000   11.1803   14.6969
        >> As=sqrt(A)
        As =
            1.0000   1.4142   1.7321
            2.0000   2.2361   2.4495
        >>  App1=sqrt(A.^3)                        %请与A.^1.5的结果相比较
        App1 =
            1.0000   2.8284   5.1962
            8.0000   11.1803   14.6969

4.数组的指数与对数

数组的指数与对数运算也没有专门的运算符,但可借助指数函数exp( )和对数函数log( )来实现。

【例2.42】 求数组A的指数和对数。

        >> A=[1 2 3;4 5 6]
        A =
            1    2    3
            4    5    6
        >> Ae=exp(A), Al=log(A)
        Ae =
            2.7183   7.3891   20.0855
          54.5982  148.4132  403.4288
        Al =
                0   0.6931   1.0986
            1.3863   1.6094   1.7918

5.数组或矩阵的单纯转置

单纯转置运算在表2-3中有其运算符.'。与矩阵的转置运算符 ’ 相比较,它不具备转置的同时完成共轭运算的功能,所以它是单纯转置的,对复矩阵也是如此。下面实例就说明了这一点。

【例2.43】 对复矩阵A做单纯转置运算。

        >> a=[1 2 3;4 5 6]; b=[2 3 4;5 6 7];
        >> A=a+i*b
        A =
          1.0000 + 2.0000i   2.0000 + 3.0000i   3.0000 + 4.0000i
          4.0000 + 5.0000i   5.0000 + 6.0000i   6.0000 + 7.0000i
        >> B=A.'
        B =
          1.0000 + 2.0000i   4.0000 + 5.0000i
          2.0000 + 3.0000i   5.0000 + 6.0000i
          3.0000 + 4.0000i   6.0000 + 7.0000i

分析数组代数运算的上述实例之后,再与矩阵运算相比较,一个深刻的印象便是两个数组之间的运算,不论它是加减、还是乘除,讲究的是元素一对一的运算。而数乘、数除和幂运算也是将一个单数(或幂)分配到数组的每个元素中(或上)。开方、指数和对数还是将执行相应运算的函数作用于每个数组元素上。

但是矩阵则不然,除了矩阵加减法要求元素的一一对应之外,矩阵的乘法、除法、乘幂、开方、指数和对数都是将矩阵视为一个整体参与运算。导致这种区别的原因在于矩阵运算采用的是线性代数法则,而线性代数中矩阵本身就不是一个单纯数的集合,矩阵已经失去了单纯数的性质而呈现自身的特点。但数组完全是将一些单纯的数汇集起来,让它们批量地参与运算。了解这些有利于准确理解MATLAB的矩阵与数组运算,有利于弄清这些运算各自适用的场合,便于今后在实际应用中做出正确选择。