我有链式格式的矩阵乘法问题。我只有一个输入矩阵A,将保存矩阵B< - 矩阵A.需要以下面的方式相乘
C = B * A
D = C * A
E = D * A
A是每个月所有乘法的参考矩阵。 这个乘法链一直持续到18个月。
矩阵A:
2 3
4 2
代码:
a = matrix( c(2, 3, 4, 2), nrow=2, ncol=2, byrow = TRUE)
b <- a
c <- b %*% a
d <- c %*% a
e <- d %*% a
f <- e %*% a
g <- f %*% a
每次A是参考矩阵,以便将来与结果相乘。这重复了18次。
我必须手动将上面的乘法运算18次,所以寻找一个循环。
预期产出:
c&lt; - b%*%a
C
[,1] [,2]
[1,] 16 12
[2,] 16 16
d&lt; - c%*%a
d
[,1] [,2]
[1,] 80 72
[2,] 96 80
e&lt; - d%*%a
ë
[,1] [,2]
[1,] 448 384
[2,] 512 448
f&lt; - e%*%a
˚F
[,1] [,2]
[1,] 2432 2112
[2,] 2816 2432
所以这应该重复18次。请帮忙。提前致谢。
在之前发布的问题中,逻辑是不同的。
答案 0 :(得分:3)
你可以这样做:
Mpow <- function(A, n) {
if (n==1) return(list(A))
L <- list(A)
P <- A
for (i in 2:n) {
P <- P %*% A
L[[i]] <- P
}
return(L)
}
a = matrix( c(2, 3, 4, 2), nrow=2, ncol=2, byrow = TRUE)
Mpow(a, 1)
Mpow(a, 2)
Mpow(a, 18)
您将获得矩阵的权力列表。问题中的矩阵f
是Mpow(a,5)
的最后一个元素
这是函数的简短变体:
Mpow <- function(A, n) {
L <- list(A)
if (n==1) return(L)
P <- A
for (i in 2:n) L[[i]] <- (P <- P %*% A)
return(L)
}
无需定义新功能即可:
n <- 5
Reduce('%*%', rep(list(a), n), accumulate=TRUE)