这是我的问题。 我正在尝试创建一个列表,其中所有对称规范矩阵的大小为nxn,对角线为1,..,1和k元素等于每个三角形中的一个。
例如,如果n = 3且k = 2,我想生成所有3x3矩阵对称的1,1,1对角线和2个元素等于1对角线以下和对角线:
1 1 1
1 1 0
1 0 1
和
1 1 0
1 1 1
0 1 1
和
1 1 0
1 1 1
0 1 1
和
1 0 1
0 1 1
1 1 1
你能帮助我吗?
此致
答案 0 :(得分:0)
我不明白你为什么两次生成第二个矩阵。因此,下面的解决方案只是创建具有所需属性的所有唯一对称矩阵。如果你想要它们中的一些,你将不得不稍微调整一下代码。
# load required packages
require(plyr)
# function to generate a list of "canonical matrices"
generate.canonical.matrix <- function(n, k){
# initialize
m <- matrix(0, nrow=n, ncol=n)
# number of positions in the upper triangle
K <- n*(n-1)/2
if (K<k) stop("k cannot be larger than n*(n-1)/2")
# upper triangle matrix
upper <- which(upper.tri(m))
# for all combinations of k elements
alply(combn(K, k), 2, function(index){ # CHANGE combn(K, k) TO GET NON-UNIQUE MATRICES
# set upper tirangle matrix
m[upper[index]] <- 1
# combine upper, lower and diagonal matrices
m+t(m)+diag(n)
})
}
# function call
generate.canonical.matrix(3, 2)