
5.7 数组的基本运算
本节主要介绍与数组有关的一系列函数,即数组求和、数组乘法及其他处理函数。
5.7.1 数组求和
数组求和一般分为两种:数组的累加及数组的求和,所使用的函数分别是cumsum()和sum()。
1.使用cumsum()函数求数组的累加和
cumsum()函数用于求解一个数组的累加和,如果数组是一个向量,得到的仍然是一个向量;如果数组是一个矩阵,就需要从行和列这两个方面进行考虑。其调用形式如下:

如果A是一个向量,那么返回的也是一个向量,该向量中第m行的元素是第1行到第m行的所有元素的累加和;如果A是一个矩阵,那么返回一个和原矩阵同行同列的矩阵,矩阵中第m行第n列的元素是A中第1行到第m行的所有第n列元素的累加和。
具体示例如下:

运行结果如下:

这种调用格式返回A中由标量dim所指定的维数的累加和。例如,cumsum(A,1)返回的是沿着第1维(各列)的累加和,cumsum(A,2)返回的是沿着第2维(各行)的累加和。具体可查看MATLAB的帮助文档。
2.使用sum()函数求数组的和
sum()函数的用法很简单,它同样有两种格式,分别针对向量和矩阵。如果针对的是一个向量,那么得到的是一个数;如果针对的是一个矩阵,那么得到的是一个向量。其调用格式如下:

其含义与前面的累加函数一样,具体示例如下:

运行结果如下:

5.7.2 数组乘法
数组乘法分为点乘和叉乘,这两种乘法都有相关的函数。其中,点乘是数组元素之间的乘法,其函数为dot()。dot()函数也有两种调用形式:

或者:

其中,a与b是需要相乘的数组。具体示例如下:


运行结果如下:

可以看出,如果是两个相同长度的向量做点乘,就是向量之间的元素相乘后再加起来。两个具有相同行和列的矩阵做点乘,有如下两种调用方法:如果选择dim=1,则是列之间的元素相乘再相加,但这个可以忽略;如果选择dim=2,则是行之间的元素进行相乘,再相加得到一个列向量。
叉乘就是空间解析几何中所说的笛卡儿积,MATLAB中也有一个用于求解的函数,这个函数就是cross(),其调用形式如下:

或者:

其中,A与B是进行叉乘的两个向量,并且A与B必须是三元向量,其数学表达式可以表示为C=A×B;对于第二种调用形式,这里的A与B是高维数组,并且size(A,dim)和size(B,dim)的维数一定是3,返回的向量叉积维与A和B的维数一样。
具体示例如下:

运行结果如下:

上述示例是对两个一维数组进行叉乘运算,对高维数组进行叉乘运算的示例如下:

运行结果如下:

上述两个示例详细说明了cross()函数的具体用法。
5.7.3 其他处理函数
1.prod()函数
prod()函数可以用于求数组元素的乘积,其调用形式如下:

或者:

其中,A是待求解的数组。前者是数组A中每列的元素相乘,得到的是一个行向量;后者是指定对数组行或列的元素进行相乘,当dim=1时与前者的功能一样,当dim=2时代表对数组A中每行的元素相乘,得到的是一个列向量。
具体示例如下:

运行结果如下:


2.cumprod()函数
cumprod()函数的调用形式与cumsum()函数的调用形式一样,只不过cumprod()函数用于进行累积运算。cumprod()函数的调用形式如下:

或者:

其中,A是待求解的数组。当dim=1时,表示求数组A中每列元素的累积,函数返回的是一个行向量;当dim=2时,表示求数组A中每行元素的累积,函数返回的是一个列向量。具体示例如下:

当dim=1时,如果计算数组累积连乘,那么每列中第n个元素是原矩阵每列中前n个元素之积;当dim=2时,如果计算数组累积连乘,那么每行中第n个元素是原矩阵每行中前n个元素之积。
3.triu()函数
triu()是MATLAB中用于提取上三角矩阵的函数,其调用形式如下:

或者:

其中,X是待求解的数组。第一种调用形式返回的是数组X的主对角线及其右上方的数,并且其余位置上的元素为0。第二种调用形式返回的结果取决于k的值,当k<0时,得到主对角线下面的第-k条对角线及其右上方的元素,剩下的元素都为0;当k>0时,则往上取对角线。具体示例如下:

运行结果如下:

MATLAB中提供了许多矩阵操作的函数,可以实现矩阵的三角矩阵的提取(triu()函数和tril()函数)、矩阵的翻转(flipud()函数和fliplr()函数)和旋转(rot90)等各种操作。这些函数的相关使用方法可查看MATLAB的帮助文档。