为了在图片中产生矩阵,我试图编写一个功能代码来做到这一点,但是我无法弄清楚下一步该怎么做,也不确定自己已经做过的事情是否正确。
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)
}
答案 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
}