如何创建一个二次带矩阵,其中给出对角线以及对角线下方和上方的第一个对角线?我正在寻找类似的功能
tridiag(upper, lower, main)
where 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
有没有一种有效的方法来做到这一点?
该函数将执行您想要的操作:
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 列矩阵时,该索引中的每一行都被解释为所分配的向量中单个值的行索引和列索引。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)