団代数の行列変異の線形代数的算出

arxiv.org

  • 団代数の n x n exchange matrix(skew-symmetric)Bに対して、次のような正方行列W_k(k番による変異のための行列)を定める
  • W_k = \begin{pmatrix}I_{k-1} & \alpha & \mathbf{0} \\ \mathbf{0} & -1 & \mathbf{0} \\ \mathbf{0} & \beta & I_{n-k} \end{pmatrix}
  • このとき、変異後の置換行列はW B W^Tとなることが知られている
  • 検算
my.B.mut <- function(B,k){
  new.B <- B
  n <- length(B[,1])
  new.B[k,] <- - B[k,]
  new.B[,k] <- - B[,k]
  for(i in 1:n){
    for(j in 1:n){
      if(i != k){
        if(j != k){
          new.B[i,j] <- B[i,j] + sign(B[i,k]) * max(B[i,k]*B[k,j],0)
        }
      }
    }
  }
  return(new.B)
}

d <- 5
B <- matrix(sample(1:9,d^2,replace=TRUE),d,d)
B <- B - t(B)

B

my.mat.mut.B <- function(B,k){
	 b <- B[,k]
	b. <- cbind(b,rep(0,length(b)))
	b. <- apply(b.,1,max)
	b.[k] <- -1
	ret <- diag(rep(1,length(b)))
	ret[,k] <- b.
	return(ret)
}


W <- my.mat.mut.B(B,2)
W %*% B %*% t(W)

my.B.mut(B,2)