## Turn list into "sparse" matrix
to_sp <- function(x){
ans <- do.call("rbind", x)
storage.mode(ans)<-"double"
return(ans)
}
## Turn "sparse" matrix into dense matrix
##
to_de <- function(A,d){
if (nrow(A) < 1) stop("need non-empty matrix\n")
ans <- matrix(0,nr=d,nc=d)
for (i in 1:nrow(A)){
e <- A[i,]
if (length(e) == 1){
ans[e,e] <- 1
} else {
ans[e[1],e[2]] <- ans[e[2],e[1]] <- 1
}
}
return(ans)
}
d <- 5
W <- matrix(rnorm(d * d), nr=d, nc=d);
V <- matrix(rnorm(d * d), nr=d, nc=d);
W <- W + t(W)
V <- V + t(V)
A1.lst <- list(c(1,2),c(1,3))
A2.lst <- list(1,3,5)
A1.sp <- to_sp(A1.lst)
A2.sp <- to_sp(A2.lst)
A1.de <- to_de(A1.sp, d)
A2.de <- to_de(A2.sp, d)
trAW(A1.sp, W)
sum(diag(A1.de %*% W))
trAW(A2.sp, W)
sum(diag(A2.de %*% W))
trAWB(A1.sp, W, A2.sp)
trAWB(A2.sp, W, A1.sp)
sum(diag(A1.de %*% W %*% A2.de))
trAWBW(A1.sp, W, A2.sp)
trAWBW(A2.sp, W, A1.sp)
sum(diag(A1.de %*% W %*% A2.de %*% W))
trAWBV(A1.sp, W, A2.sp, V)
trAWBV(A2.sp, W, A1.sp, V)
sum(diag(A1.de %*% W %*% A2.de %*% V))
Run the code above in your browser using DataLab