我有链式格式的矩阵乘法问题。 我只有输入矩阵A,将保存矩阵B< - Matrix A. 需要以下面的方式相乘
A * B = C
B * C = D
C * D = E
D * E = F
这个乘法链直到18个月。 我尝试了以下代码:但无法选择我应该选择哪个循环。
矩阵A:
2 3
4 2
代码:
a = matrix( c(2, 3, 4, 2), nrow=2, ncol=2, byrow = TRUE)
a
b <- a
b
c = b %*% a
c
d <- c %*% b
d
e <- d %*% c
e
我手动进行这种乘法,直到我想以链循环方式进行18次。
预期产出:
一
[,1] [,2]
[1,] 2 3
[2,] 4 2
B'/ P>
[,1] [,2]
[1,] 2 3
[2,] 4 2
c = b%*%a
C
[,1] [,2]
[1,] 16 12
[2,] 16 16
d&lt; - c%*%b
d
[,1] [,2]
[1,] 80 72
[2,] 96 80
e&lt; - d%*%c
ë
[,1] [,2]
[1,] 2432 2112
[2,] 2816 2432
所以这应该重复18次。请帮忙。提前致谢。
答案 0 :(得分:1)
for循环将有助于
matA <- matrix(c(2,4,3,2), ncol=2,nrow=2)
output_var<- array(dim=c(2,2,18))
output_var[,,c(1:2)] <- matA
for (i in c(3:18))
{
output_var[,,i] <- output_var[,,(i-1)]%*% output_var[,,(i-2)]
}
output_var
答案 1 :(得分:1)
乘法从第12个循环开始导致Inf
,因为该值变得太大而无法存储在R中。
以下代码会将值存储在matmull列表中。它的前2个元素是原始值A和B.从第3个元素开始,它具有循环中的乘法结果
A <- matrix(c(2L, 4L, 3L, 2L), 2, 2)
matmull <- rep(list(A), 20)
for(i in 1:18){
matmull[[i+2]] <- matmull[[i]]%*%matmull[[i+1]]
}