为了在图片中生成矩阵,我尝试编写一个函数代码来执行此操作,但我无法弄清楚下一步该做什么,也不确定我已经做了什么是正确的。
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)
}
一个选项:
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
你想要实现的目标并不完全清楚。
根据你的描述,矩阵将有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
}