有两个矩阵,A和B:
他们的产品是C = AB:
现在我想编写一个带循环的函数,它返回产品C。当两个矩阵的维度不兼容时,它应该返回Error。并且该函数应包含两个矩阵A和B
我从来没有用矩阵编写函数,所以我很感谢你的帮助!
非常感谢你的帮助! 现在是另一个问题,如果给出
是否仍然可以使用循环?
答案 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
有列。