0

有两个矩阵,A和B: 在此处输入图像描述

它们的乘积是 C=AB: 在此处输入图像描述

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

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

非常感谢你的帮助!现在另一个问题,如果给出 在此处输入图像描述

仍然可以使用循环吗?

4

1 回答 1

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.

对于添加新问题的编辑,%*%操作员将给出矩阵乘法。例如

> 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列。

于 2013-06-10T23:05:56.123 回答