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的矩阵与数组运算,有利于弄清这些运算各自适用的场合,便于今后在实际应用中做出正确选择。