【问题标题】:Working With a Diagonal Matrix使用对角矩阵
【发布时间】:2015-10-03 22:54:53
【问题描述】:

您好,我在试图弄清楚这一点时非常难过,我需要一点帮助。基本上,我有一个 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()

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用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)

    【讨论】:

    • 感谢 Richard ...这些 row 和 col 问题确实不断出现...(但看不到正确的 dup)
    【解决方案2】:

    试试这个函数,它将生成一个由数字n 的维度row X coldiagonal 组成的矩阵。

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 2018-10-21
      • 1970-01-01
      相关资源
      最近更新 更多