【问题标题】:Efficient creation of tridiagonal matrices高效创建三对角矩阵
【发布时间】:2015-03-11 05:39:05
【问题描述】:

如何创建一个二次带状矩阵,其中我给出对角线和对角线下方和上方的第一个对角线?我正在寻找类似的功能

tridiag(upper, lower, main)

length(upper)==length(lower)==length(main)-1 并返回,例如,

tridiag(1:3, 2:4, 3:6)

         [,1] [,2] [,3] [,4]
[1,]    3    1    0    0
[2,]    2    4    2    0
[3,]    0    3    5    3
[4,]    0    0    4    6

有没有有效的方法?

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    这个函数会做你想做的:

    tridiag <- function(upper, lower, main){
        out <- matrix(0,length(main),length(main))
        diag(out) <- main
        indx <- seq.int(length(upper))
        out[cbind(indx+1,indx)] <- lower
        out[cbind(indx,indx+1)] <- upper
        return(out)
    }
    

    请注意,当矩阵的索引是 2 列矩阵时,该索引中的每一行都被解释为正在分配的向量中单个值的行和列索引。

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 2015-05-21
      相关资源
      最近更新 更多