答案 0 :(得分:1)
这比预期的要难一些:),但是您可以这样做:
createMatrix <- function(n){
firstCol <- rep(0, n + 2)
lastCol <- rep(0, n + 2)
firstCol[c((n + 2), n + 1)] <- c(1 - 1/(n + 2), 1/(n + 1))
lastCol[c((n + 2), n + 1)] <- c(1/(n + 2), 1 - 1/(n + 1))
mat1 <- diag(x = 1/(n:1), n, n)[n:1, ]
mat2 <- diag(x = (1 - 1/(1:n)), n, n)
mat1[mat1 == 0] <- mat2[mat1 == 0]
unname(cbind(firstCol, rbind(mat1, rep(0, n), rep(0, n)), lastCol))
}
> createMatrix(4)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.0000000 0.00 0.0000000 0.0000000 1.00 0.0000000
[2,] 0.0000000 0.00 0.5000000 0.5000000 0.00 0.0000000
[3,] 0.0000000 0.00 0.3333333 0.6666667 0.00 0.0000000
[4,] 0.0000000 0.25 0.0000000 0.0000000 0.75 0.0000000
[5,] 0.2000000 0.00 0.0000000 0.0000000 0.00 0.8000000
[6,] 0.8333333 0.00 0.0000000 0.0000000 0.00 0.1666667
答案 1 :(得分:0)
要填充一个对角线,您可以使用:
diag(m) <- "1-1/n"
对于其他对角线,您可以使用循环(因为我无法对其他对角线进行计算)。