使用函数代码产生一个n×n矩阵

时间:2019-02-28 11:45:23

标签: r function matrix

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)
}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

目前尚不清楚您要实现的目标。

根据您的描述,矩阵将包含n+1个元素(从1/(n+1)n/(n+1)),并且我假设剩余的矩阵为稀疏。这不是通过向量化计算来实现的简单结构,而是可以在单个for循环中实现,因此在给定大小为O(n)的矩阵的情况下,可以在n+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
}