【问题标题】:use function code to produce a n×n matrix使用函数代码生成一个 n×n 矩阵
【发布时间】:2019-02-28 11:45:23
【问题描述】:

为了生成图中的矩阵,我尝试编写一个函数代码来执行此操作,但我不知道下一步该做什么,也不确定我已经做的是否正确。

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


    【解决方案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,1)应该是1/2,(1,2)也是1/2,(2,1)是1 /3 其中 n=2 在第二行。
    • @Berry 此代码生成图像中显示的矩阵。但实际上,这并不符合 OP 的尝试。让我们等待澄清。
    【解决方案2】:

    目前还不完全清楚您要达到的目标。

    根据您的描述,矩阵将具有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
    }
    

    【讨论】:

      猜你喜欢
      • 2020-03-20
      • 1970-01-01
      • 2014-10-16
      • 2021-12-15
      • 2017-08-05
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多