分享

精通Excel数组公式020:MMULT数组函数

 hercules028 2021-03-03

excelperfect

MMULT表示矩阵乘法(matrix multiplication)。学习过前面文章的朋友,可能已经意识到乘法矩阵在Excel公式中有很多应用。

如下图1所示,两个不同队的棒球棒、球、手套的订单情况。对每队来说,虽然成本相同,但订购数量不同。要求计算每队的总成本。

图片

1

1中展示了如何计算女队的总成本,使用公式:

=A4*B9+B4*B10+C4*B11

同样,计算男队总成本的公式:

=A4*C9+B4*C10+C4*C11

可以看出,上述公式都是行列相乘,然后相加。如果有更多的数据,那么这个公式将更长。其实,可以使用MMULT函数解决。

矩阵相乘的规则

1.第一个数组的行数与第二个数组的列数必须相等。

2.结果数组的大小是第一个数组的行数乘以第二个数组和列数。

下图2展示了使用MMULT函数计算女队和男队的总成本。

图片

2

为什么不使用SUMPRODUCT函数呢?因为用于计算的两个区域的维数不同。

示例:使用公式计算加权成绩

如下图3所示,使用MMULT函数计算加权成绩,两个数组有相同的项数但维数不同。

图片

3

示例:创建乘法表

下图4展示了一个简单的乘法表示例。

图片

4

示例:找到股票投资组合的预计收益

如下图5所示,想要下面单元格区域数据相乘:C3:D5*B3:B5*C1:D1,计算股票投资组合的预计收益。在前面的系列中,我们学习了通过乘以单元格区域来避开SUMPRODUCT函数对区域都要具有相同尺寸的要求。然而,如果单元格区域C3:D5中含有文本,那么乘法操作将产生错误。可以使用MMULT函数创建与单元格区域C3:D5中预计收益数组相同大小的数组,然后传递组SUMPRODUCT函数,利用其忽略文本的特性。

图片

5

关于MMULT函数的参数

1.数组可以是单元格区域、数组常量,或者引用。

2.下列情形MMULT函数返回错误值#VALUE!

1)任意单元格为空或包含文本

2)数组1中的列数不等于数组2中的行数

3MMULT函数返回的输出值超过5460个单元格

MINVERSE函数和MUNIT函数

MINVERSE函数和MUNIT函数有助于使用矩阵代数求解方程组。

MINVERSE函数计算方阵的逆,MUNIT函数(在Excel 2013中引入)计算单位矩阵。

如下图6所示,方阵与其逆的乘积为单位矩阵。

图片

6

下图7展示如何使用MINVERSE函数计算矩阵A的逆矩阵。

图片

7

下图8展示了使用MMULT函数将矩阵A与其逆矩阵相乘得到单位矩阵。

图片

8

Excel2013及以后的版本中,可以使用MUNIT函数得到单位矩阵,如下图9所示。

图片

9

示例:使用MMULT求解方程组

如下图10所示,求解三元线性方程组。

图片

10

解决方案如下图11所示。

图片

11

步骤如下:

1.将等式中的系数放置到单元格区域I3:K5中,这是一个3×3的数组。

2.将结果常量放置到单元格区域M3:M5中,这是一个3×1的数组。

3.选择单元格区域Q3:Q53×1),输入数组公式:

=MMULT(MINVERSE(I3:K5),M3:M5)

得到解。

可以将得到的解代入原方程进行验证。

示例:使用单个公式计算股票投资组合标准差

如下图12所示,使用了14个单元格才得到标准差。

图片

12

我们现在想将这14个公式合并成一个公式。将多个公式合并成一个公式通常的步骤是:

1.标出计算步骤(如示例中的16)。

2.从第1步计算开始,在单个单元格中构建模拟第1步计算的公式元素,验证结果是否与多步计算时的结果一致。

3.将第2步计算代入刚才的公式中,确保结果与多步计算时的结果一致。

4.继续代入公式,直到所有计算公式都放置到了一个公式中。

对于本示例,第1步是比较难的,但是可以使用MMULT函数。第1步是要模拟图12中单元格区域F3:F5的结果,在单元格D8中必须要得到数组{-0.06;0.05;0.14},可以使用公式:

=MMULT(C1:D1*C3:D5,{1;1})

注意到公式中的第一个参数值为:C1:D1*C3:D5,其计算过程如下图13所示。

图片

13

Excel中数组乘法的3种方法

Excel中,进行数组相乘操作有3种方法:使用乘法符号直接相乘、使用SUMPRODUCT函数、使用MMULT函数。

1.列标题数字直接乘以数字表会将列标题数字分别乘以数字表中相应列中的数字,得到与数字表相同大小的结果数组。

2.SUMPRODUCT函数接受相同大小的数组作为参数,将数组中的对应元素分别相乘,再计算乘积之和。

3.MMULT函数接受的数组参数必须满足第一个数组的列数等于第二个数组的行数,结果数组的行数为第一个数组的行数,列数为第二个数组的列数。

C1:D1*C3:D5得到一个32列的数组,与一个21列的数组相乘,得到31列的结果数组。

接下来按照合并公式的步骤,最后得到的计算偏差的公式为:

=SQRT(SUMPRODUCT((MMULT(C1:D1*C3:D5,{1;1})-D6)^2*B3:B5))

如果不想在公式中使用硬编码,可以将公式修改为数组公式:

=SQRT(SUMPRODUCT((MMULT(C1:D1*C3:D5,TRANSPOSE(COLUMN(C1:D1)^0))-D6)^2*B3:B5))

注:本文为电子书《精通Excel数组公式(学习笔记版)》中的一部分内容节选。你可以到知识星球App的完美Excel社群下载这本电子书的完整中文版。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多