分割表の位置・自由度・座標変換3 正単体・複体の2段階階層構造の頂点座標

  • 正単体の頂点座標
    • k個の頂点を持つ正単体の頂点座標はk-1次元空間上の点v_i;i=1,2,...,kとして表される
    • \sum_{i=1}^k v_i^{(k)}=0(全頂点ベクトルの和はゼロベクトル)
    • \forall i, j, |v_i^{(k)}|=|v_j^{(k)}|(すべての頂点ベクトルのノルムは等しい)
    • \forall i, j,i',j', (v_i^{(k)})^T v_j^{(k)}=(v_{i'}^{(k)})^T v_{j'}^{(k)},\text{when } i\ne j, i' \ne j'(すべての頂点ベクトルペアのなす角は等しい)
    • これらの頂点は、ある1つの尺度のカテゴリに対応している
    • また、この尺度のカテゴリ比率がある値のセットであるという状態は、この正単体の内部と表層からなる空間の点に対応付けられる
  • 1段階、上の構造としての2段階階層正単体の座標を考える
    • これらの頂点は、ある尺度のセットが作る複合カテゴリに対応している
    • p_i=\{a_{i_1},a_{i_2},...,a_{i_{n_i}}\} \subset Aが作る単体として、S_{p_i}=S_{\{a_{i_1},a_{i_2},...,a_{i_{n_i}}\}}のそれぞれの頂点a_{i_1},a_{i_2},...が頂点数r_{i_1},r_{i_2},...な正単体から構成されているような、2段階階層構造にある正単体を考える
    • これは、各頂点がr_{i_j}-1次元空間なので、その直積である\prod_{j=1} {n_1} (r_{i_j}-1)次元空間上の点である
    • 尺度a_{i_1},a_{i_2},...のカテゴリがそれぞれ第t_1,t_2,...番カテゴリであるような組み合わせカテゴリの座標を\otimes_{j=1}^{n} v_{t_j}^{(r_{i_j})}のように書いて、n個のベクトルについて、順次、n-1回、外積的な積をして、次元を\prod_{j=1} {n_1} (r_{i_j}-1)に増やして定義することとする
    • 複数の尺度が作る複合カテゴリの比率がある値のセットであるという状態は、この2段階階層正単体の内部と表層とからなる空間の点に対応付けられる
    • この対応付けにおいて、複合カテゴリの比率が特定されるとともに、これを構成する尺度の任意の部分集合が作る(より緩い)複合カテゴリの比率も特定され、個々の尺度のカテゴリ比率も特定さていることに注意する
  • Rを使って、正単体の頂点座標や、正単体・複体の2段階階層構造の座標計算をしてみよう
    • 正単体の頂点座標
# 頂点数ncの正単体はnc-1次元空間にある
CategoryVector<-function (nc = 3) 
{
    df <- nc - 1
    d <- df + 1
    diagval <- 1:d
    diagval <- sqrt((df + 1)/df) * sqrt((df - diagval + 1)/(df - 
        diagval + 2))
    others <- -diagval/(df - (0:(d - 1)))
    m <- matrix(rep(others, df + 1), nrow = df + 1, byrow = TRUE)
    diag(m) <- diagval
    m[upper.tri(m)] <- 0
    as.matrix(m[, 1:df])
}
    • 正単体・複体段階階層構造の組合せカテゴリに与えるべき座標
library(sets)
# nは長さk>=1のベクトルで、要素は、2以上の自然数
# kは分割表で言えば、尺度の数
# nの要素は、各尺度のカテゴリの数
# k=1の場合は、上記のCategoryVector()と同様の結果を返す
# 返り値は、2種類のリスト
# vは、k個の尺度を要素とする集合のべき集合ごとに、組合せカテゴリに対するベクトルをリストにしたもの
# powsは、k個の尺度を要素とする集合のべき集合の要素
CategoryVectorND<-function(n){
	
	df<-1
	NN<-length(n)
	S<-as.set(1:NN)
	powS<-set_power(S)
	scnt<-1
	result<-list()
	pows<-list()
	for(s in powS){
		ns<-c()
		nlist<-c()
		for(i in s){
			ns<-c(ns,n[i])
			nlist<-c(nlist,i)
		}
		
		N<-length(ns)
		if(N>0){
			CategoryVectors<-NULL
			for(i in 1:length(ns)){
				CategoryVectors[[i]]<-CategoryVector(ns[i])
				df<-df*(ns[i]-1)
			}
			#tmparr<-array(0,ns)
			tmparr<-array(0,ns[N:1])
			addresses<-which(tmparr==0,arr.ind=TRUE)
			#print(addresses)
			ret<-list()
			cnt<-1
			#print(CategoryVectors)
			for(i in 1:length(addresses[,1])){
				tmp<-c(CategoryVectors[[1]][addresses[i,N],])
				if(N>=2){
					for(j in 2:N){
						#print(tmp)
						#print(c(CategoryVectors[[j]][addresses[i,N-j+1],]))
						tmp<-c(outer(tmp,c(CategoryVectors[[j]][addresses[i,N-j+1],]),"*"))
						#print(tmp)
					}
				}

				#ret<-c(ret,tmp)
				ret[[cnt]]<-tmp
				cnt<-cnt+1
			}
			#array(ret,c(df,ns[N:1]))
			result[[scnt]]<-ret
			pows[[scnt]]<-nlist
			scnt<-scnt+1
		}
	}
	list(v=result,pows=pows)
}