使用对角矩阵

时间:2015-10-03 22:54:53

标签: r

嗨,我非常难以想到解决这个问题并且可以使用一些帮助。基本上,我有一个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()

2 个答案:

答案 0 :(得分:2)

您可以使用colrow创建子集并为其编制索引,并指定上下对角线。

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的维度diagonaln的矩阵。

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