使用函数代码生成n×n矩阵

问题描述 投票:1回答:2

enter image description here为了在图片中生成矩阵,我尝试编写一个函数代码来执行此操作,但我无法弄清楚下一步该做什么,也不确定我已经做了什么是正确的。

Matrix <- function(n){
  mat1 <- diag(x = ((1:n)-1)/((1:n)+1), n, n)[-1,]
  mat2 <- diag(x = ((1:n)-(1:n)+1)/((1:n)+1), n, n)[,-1]
  mat3 <- diag(x = 1/((1:n)+1), n, n)
}
r function matrix
2个回答
1
投票

一个选项:

library(SoDA)

n <- 4
triDiag(diagonal = rep(1/(n+1), n+1), 
        upper = (n:1)/(n+1), 
        lower = (1:n)/(n+1))
#       [,1] [,2] [,3] [,4] [,5]
# [1,]  0.2  0.8  0.0  0.0  0.0
# [2,]  0.2  0.2  0.6  0.0  0.0
# [3,]  0.0  0.4  0.2  0.4  0.0
# [4,]  0.0  0.0  0.6  0.2  0.2
# [5,]  0.0  0.0  0.0  0.8  0.2

0
投票

你想要实现的目标并不完全清楚。

根据你的描述,矩阵将有n+1元素(从1/(n+1)n/(n+1)),我假设剩下的矩阵是稀疏的。通过矢量化计算实现这不是一个简单的结构,但它可以在单个for循环中实现,因此在O(n)时间内构造,给定一个大小为n+1的矩阵。在下面的代码中,我提供了此类代码的示例。我们的想法是以相反的方式遍历矩阵,并且只为每个矩阵分配1个类型值。

Create_Matrix <- function(n){
  n1 = n + 1 #Last row, avoid n computations 
  n2 = n1 + 1 
  output <- diag(1/n1, nrow = n1, ncol = n1)
  for(i in seq(n)){
    output[i + 1, i] = output[n1 - i, n2 - i] = output[[1]] * i
  }
  output
}
© www.soinside.com 2019 - 2024. All rights reserved.