如何为两个矩阵的乘积写一个函数

时间:2013-06-10 22:54:47

标签: r

有两个矩阵,A和B: enter image description here

他们的产品是C = AB: enter image description here

现在我想编写一个带循环的函数,它返回产品C。当两个矩阵的维度不兼容时,它应该返回Error。并且该函数应包含两个矩阵A和B

我从来没有用矩阵编写函数,所以我很感谢你的帮助!

非常感谢你的帮助! 现在是另一个问题,如果给出 enter image description here

是否仍然可以使用循环?

1 个答案:

答案 0 :(得分:3)

根据您标记Q:

的方式,这是一个R版本
multmat <- function(m1, m2) {
  if(!isTRUE(all.equal(dim(m1), dim(m2))))
    stop("Dimensions of matrices don't match.")
  m1 * m2
}

执行乘法的函数已经为你完成,它是*,但是如果你想要检查,那么你需要一个包装器作为上面的节目。在R中,希望通过循环执行此操作。

这给出了

m1 <- matrix(1:9, ncol = 3)
m2 <- matrix(1:9, ncol = 3)
multmat(m1, m2)

> multmat(m1, m2)
     [,1] [,2] [,3]
[1,]    1   16   49
[2,]    4   25   64
[3,]    9   36   81

m3 <- matrix(1:12, ncol = 3)
multmat(m1, m3)

> multmat(m1, m3)
Error in multmat(m1, m3) : Dimensions of matrices don't match.

关于添加新问题的编辑,%*%运算符将给出矩阵乘法。 E.g。

> m1 %*% m2
     [,1] [,2] [,3]
[1,]   30   66  102
[2,]   36   81  126
[3,]   42   96  150

当然,现在对尺寸匹配的限制与上面的*情况不同,如下所示

> m1 %*% m3
Error in m1 %*% m3 : non-conformable arguments
> m1 %*% t(m3) ## transpose of m3
     [,1] [,2] [,3] [,4]
[1,]   84   96  108  120
[2,]   99  114  129  144
[3,]  114  132  150  168

使用m3转置的操作有效,因为它现在有多行,m1有列。