【问题标题】:multiplying matrices with reference matrix n times将矩阵与参考矩阵相乘 n 次
【发布时间】:2018-06-03 21:35:22
【问题描述】:

x 是所有迭代的参考矩阵。共有2个矩阵。

matrix A
1   4   1   4
4   2   4   2
2   3   2   3
3   3   3   3

matrix B
1   4   1   4
4   2   4   2
2   3   2   3
3   3   3   3


matrix x
4   1   4   3
2   4   2   2
3   2   3   5
3   5   1   1

这里的矩阵 A 和 B 是相同的。我们需要以下形式的矩阵乘法:

C <- B %*% x
D <- C %*% x
E <- D %*% x 
F <- E %*% x 

x 是所有迭代的参考矩阵。 这种乘法进行了 15 次,因此在编写循环或函数时需要帮助。

【问题讨论】:

  • 所以你基本上需要一个recursive function
  • 是的 Sotos 应该乘以 15。
  • 试试nm1 &lt;- LETTERS[2:5]; for(i in 2:5) assign(LETTERS[i+1], get(LETTERS[i]) %*% x)
  • @pradnya 我只添加了 2:5 如果你想要它可以是for(i in 1:14) assign(LETTERS[1+1], get(LETTERS[i]) %*% X) 在每一步,它分配给一个对象,同时,它获取之前创建的对象并乘以 " X"

标签: r function loops matrix


【解决方案1】:

如果您只想要最后一个矩阵,我们可以使用递归函数,如 Sotos 所建议的:

A <- matrix(runif(9), 3) 
X <- matrix(runif(9), 3) 

repmult <- function(A,x,reps)
{
  if(reps==0){
    return(A)
  }
  else
  {
    repmult(A%*%x,x,reps-1)
  }
}

repmult(A,X,15)

如果您还希望列表中的所有中间结果,我们可以根据this SO question 上的答案修改函数(尽管您可能想要更改其名称):

Mpow <- function(A,x, n) {
  L <- list(A%*%x)
  if (n==1) return(L)
  P <- A
  for (i in 1:n) L[[i]] <- (P <- P %*% x)
  return(L)
}

Mpow(A,X,3)

【讨论】:

  • 我试过上面的代码:但这里的问题是,我只得到第 15 个矩阵的直接答案。我想要所有矩阵,如 1,2,3,4,5 ....最多 15。请帮助我。
  • 嗨 pradnya,我为此添加了第二个函数。
猜你喜欢
  • 2015-01-24
  • 2016-12-11
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
相关资源
最近更新 更多