嗨,我非常难以想到解决这个问题并且可以使用一些帮助。基本上,我有一个n x n矩阵,其中对角线设置为值k,其他每个值都为0.
1 2 3 4 5
1 k 0 0 0 0
2 0 k 0 0 0
3 0 0 k 0 0
4 0 0 0 k 0
5 0 0 0 0 k
基本上,我需要能够在此矩阵中创建另外两个对角线,其值为1,所以最终看起来像这样:
1 2 3 4 5
1 k 1 0 0 0
2 1 k 1 0 0
3 0 1 k 1 0
4 0 0 1 k 1
5 0 0 0 1 k
到目前为止,我所拥有的所有代码都能够制作对角矩阵
m=diag(k,n,n)
但我不知道如何添加其他两个对角线。我会使用apply()
和cbind()
还是rbind()
?
答案 0 :(得分:2)
您可以使用col
和row
创建子集并为其编制索引,并指定上下对角线。
k=3
m <- k* diag(6)
m[abs(row(m) - col(m)) == 1] <- 1
m
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 3 1 0 0 0 0
#[2,] 1 3 1 0 0 0
#[3,] 0 1 3 1 0 0
#[4,] 0 0 1 3 1 0
#[5,] 0 0 0 1 3 1
#[6,] 0 0 0 0 1 3
如果您想要反向对角线,可以使用col(m) - row(m)
答案 1 :(得分:0)
尝试此功能,它会生成数字row X col
的维度diagonal
和n
的矩阵。
matfun <- function(diag=n, row=4,col=4){
x = diag(1,row,col)
diag*x+rbind(as.vector(rep(0,col)),x[1:(row-1),])+cbind(as.vector(rep(0,row)),x[,1:(col-1)])
}
HTH