- 9/15の記事でシューベルト計算について書いた
- シューベルト胞体(Schubert cell)とシューベルト多様体について書きなおしたい
- 以下、参考資料
- まず、おおざっぱに
- グラスマン多様体は、行列で表せて、ただし、重複があるのでそれを標準化することで自由度にまで落とすことができる
- このグラスマン多様体は、標準化行列表現でdisjoint 集合に分離することができる。そのdisjoint 集合の要素がシューベルト・セル
- シューベルト多様体は、このシューベルト・セルをあるルールで合わせたものになっており、幾何学的意味が付与できる
- これらについて、Rでの確認を含めてなんとかわかりたい
- シューベルト・セル(シューベルト胞体)
- グラスマン多様体を表現する行列の標準化を考える
- なるべく右側のk列のセットが作る小正方行列を単位行列化するという方針で標準化するとする
- このようにすると、最も右のk列が作る行列が逆行列を持てば、その部分が単位行列化し、残りの列は任意の値を取ることになる
- 最も右のk列が逆行列を持たないときには、単位行列に参加する列にはさまれた、単位行列に参加しない列は0勝ちになる。それは、最も右から逆行列を持つかどうかの探索をして、持たないことが確認されたということは、単位行列に参加しない列は、参加する列に線形依存することを意味し、参加する列を単一要素が1でその他の要素が0であるように線形変換したとき、参加する列に依存した列にも0が現れるという理由による
- 以下、そのことをRで確認する
- 3次元ベクトル空間で、あるベクトルが基底ベクトルに依存しているときに、基底を正規直交基底化する変換によって0勝ちになることを示す
n <- 3
V <- matrix(rnorm(n^2),n,n)
det(V)
Vinv <- solve(V)
Vinv %*% V
v <- V[,1] * rnorm(1)
Vinv %*% v
v <- V[,1] * rnorm(1) + V[,2] * rnorm(1)
Vinv %*% v
v <-V[,1] * rnorm(1) + V[,2] * rnorm(1) + V[,3] * rnorm(1)
Vinv %*% v
> n <- 3
> V <- matrix(rnorm(n^2),n,n)
> det(V)
[1] -0.6126624
> Vinv <- solve(V)
> Vinv %*% V
[,1] [,2] [,3]
[1,] 1.000000e+00 2.775558e-17 -8.326673e-17
[2,] 6.938894e-18 1.000000e+00 1.110223e-16
[3,] 3.035766e-18 0.000000e+00 1.000000e+00
> v <- V[,1] * rnorm(1)
>
> Vinv %*% v
[,1]
[1,] -3.358859e-01
[2,] 8.673617e-19
[3,] -4.878910e-19
>
> v <- V[,1] * rnorm(1) + V[,2] * rnorm(1)
> Vinv %*% v
[,1]
[1,] 6.162799e-01
[2,] -1.890424e-03
[3,] 2.602085e-18
>
> v <-V[,1] * rnorm(1) + V[,2] * rnorm(1) + V[,3] * rnorm(1)
>
> Vinv %*% v
[,1]
[1,] -0.5583590
[2,] 0.6733218
[3,] -0.6636176
-
- このようにすることで、行列は、右側詰めでk列を採用した上でそのk列が単位行列になり、かつ、各行について、その行に1を持つ単位ベクトルに相当する列より右側が0になるような行列に変換することができる。これをグラスマン多様体の要素を行列表現したときのcanonical formと言う
- n列からk列を選ぶ選び方を辞書式順序で右側詰めで採用し、最初に小行列式が0でないようにして行列を変換する処理を以下のようにRで作成する
- canonical formの行列と、単位行列を構成する列番号とを返す関数が以下である
library(gtools)
library(complexplus)
my.shubertcell <- function(M){
k <- length(M[,1])
n <- length(M[1,])
cmb <- combinations(n,k)
for(i in length(cmb[,1]):1){
d <- Det(M[,cmb[i,]])
if(d != 0){
U <- solve(M[,cmb[i,]]) %*% M
break
}
}
return(list(U=U,position=cmb[i,]))
}
-
- これで任意のグラスマン多様体の要素の行列をcanonical formにできるようになったが、ちょっと心配なので、まず、ランダムな行列をcanonical formに変換できていることを確認したい
- ただし、単純にランダムな行列を作るとたいていは最右k列に単位行列が現れてしまうので、0がちなcanonical formを作り、それを線形変換して、それらしく見えなくした上でcanonical formを作り直す、という実験をしてみる
library(gtools)
library(complexplus)
n <- 7
k <- 3
cmb <- combinations(n,k)
my.shubertcell <- function(M){
k <- length(M[,1])
n <- length(M[1,])
cmb <- combinations(n,k)
for(i in length(cmb[,1]):1){
d <- Det(M[,cmb[i,]])
if(d != 0){
U <- solve(M[,cmb[i,]]) %*% M
break
}
}
return(list(U=U,position=cmb[i,]))
}
n.iter <- 10
for(i in 1:n.iter){
s <- cmb[sample(1:length(cmb[,1]),1),]
M <- matrix(sample((1):9,k*n,replace=TRUE),k,n) + 1i * matrix(sample((1):9,k*n,replace=TRUE),k,n)
M[,s] <- diag(rep(1,k))
for(j in 1:k){
if(s[j]<n){
M[j,(s[j]+1):n] <- 0
}
}
print("s")
print(s)
print("M")
print(M)
R <- matrix(rnorm(k^2)+rnorm(k^2)*1i,k,k)
M. <- R %*% M
M. <- M.[sample(1:k),]
out <- my.shubertcell(M.)
print("M.")
print(M.)
print("U")
print(round(out$U,5))
print(round(M - out$U,5))
}
[1] "s"
[1] 3 5 6
[1] "M"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 9+9i 5+8i 1+0i 0+0i 0+0i 0+0i 0+0i
[2,] 7+8i 6+6i 0+0i 4+4i 1+0i 0+0i 0+0i
[3,] 9+8i 2+1i 0+0i 4+8i 0+0i 1+0i 0+0i
[1] "M."
[,1] [,2] [,3] [,4] [,5]
[1,] -27.74333-58.76457i -3.820702-34.213694i -1.7180353-2.196506i -17.562709-20.34898i -1.3757667-0.0156619i
[2,] -26.52057+ 7.25794i -11.087356- 7.998070i -2.0095441+0.450704i -8.570632+11.84205i 0.4399260-0.0827848i
[3,] -11.24297+ 8.64361i -4.062739+ 2.886691i 0.2453503+0.221698i -9.477735+ 1.13893i -0.3444707+0.0356265i
[,6] [,7]
[1,] -2.0844406+0.473066i 0+0i
[2,] 0.5082745+1.586822i 0+0i
[3,] -0.1604366+0.914450i 0+0i
[1] "U"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 9+9i 5+8i 1+0i 0+0i 0+0i 0+0i 0+0i
[2,] 7+8i 6+6i 0+0i 4+4i 1+0i 0+0i 0+0i
[3,] 9+8i 2+1i 0+0i 4+8i 0+0i 1+0i 0+0i
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[3,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[1] "s"
[1] 1 5 7
[1] "M"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 1+3i 8+6i 3+8i 1+0i 0+0i 0+0i
[3,] 0+0i 8+7i 8+4i 4+9i 0+0i 3+3i 1+0i
[1] "M."
[,1] [,2] [,3] [,4] [,5]
[1,] 1.3392738-1.0092714i 23.038426+ 4.311575i 36.48367+ 1.55389i 28.68471+20.82071i 2.122003-0.773145i
[2,] -3.1720207-0.1220339i 4.591831+ 1.991866i 6.28589+13.02727i 0.10364+13.12021i 1.061107+1.279734i
[3,] 0.7886594-0.5216905i 4.199180-11.088329i -15.35863-22.23604i 0.54524-22.50179i -2.696746-0.328314i
[,6] [,7]
[1,] 7.439897-0.016523i 1.2372290-1.2427367i
[2,] 3.000533-0.788439i 0.3686822-0.6314954i
[3,] 2.424811-0.906257i 0.2530923-0.5551780i
[1] "U"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 1+3i 8+6i 3+8i 1+0i 0+0i 0+0i
[3,] 0+0i 8+7i 8+4i 4+9i 0+0i 3+3i 1+0i
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[3,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[1] "s"
[1] 1 5 7
[1] "M"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 8+2i 2+9i 2+4i 1+0i 0+0i 0+0i
[3,] 0+0i 6+1i 4+1i 3+5i 0+0i 9+5i 1+0i
[1] "M."
[,1] [,2] [,3] [,4] [,5]
[1,] -1.0074081-1.051082i 6.030502+20.102680i -12.978868+19.323609i -8.360342+10.066159i 1.4571484+1.5468286i
[2,] 1.3379403+1.239246i -5.799635- 7.542224i -3.871236-11.000860i 3.869852- 7.509570i -0.6221203+0.3341872i
[3,] 0.5793812+0.896286i -1.291336- 2.131388i -3.285026+ 0.659556i 0.718473- 3.708096i 0.3811222+0.1761365i
[,6] [,7]
[1,] -6.771283+ 6.238323i -0.2806597+0.8490690i
[2,] 4.845878-14.393450i -0.2674939-1.4506645i
[3,] -3.917220- 9.124584i -0.7629991-0.5899543i
[1] "U"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 8+2i 2+9i 2+4i 1+0i 0+0i 0+0i
[3,] 0+0i 6+1i 4+1i 3+5i 0+0i 9+5i 1+0i
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[3,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[1] "s"
[1] 3 4 7
[1] "M"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 7+5i 7+6i 1+0i 0+0i 0+0i 0+0i 0+0i
[2,] 5+1i 3+7i 0+0i 1+0i 0+0i 0+0i 0+0i
[3,] 4+1i 7+6i 0+0i 0+0i 5+2i 3+9i 1+0i
[1] "M."
[,1] [,2] [,3] [,4] [,5]
[1,] 2.045748+10.731124i 3.57314+14.60584i 0.6973473+1.1189049i 0.1167493-0.1677450i 2.574095+0.527687i
[2,] -12.745262+ 4.715099i -22.09940- 2.57432i -0.6168447+1.3094083i 1.2551590+0.5709548i -8.849638-8.425751i
[3,] 7.095242- 7.637209i 15.09530- 4.66704i 0.0659614-0.5845706i 0.0283653-0.5114278i 4.194214-1.202661i
[,6] [,7]
[1,] 2.219495+ 4.062186i 0.4802018-0.0865432i
[2,] 1.260904-21.489161i -2.1068859-0.8423958i
[3,] 6.390099+ 4.271949i 0.6401982-0.4966116i
[1] "U"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 7+5i 7+6i 1+0i 0+0i 0+0i 0+0i 0+0i
[2,] 5+1i 3+7i 0+0i 1+0i 0+0i 0+0i 0+0i
[3,] 4+1i 7+6i 0+0i 0+0i 5+2i 3+9i 1+0i
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[3,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[1] "s"
[1] 2 3 5
[1] "M"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 2+9i 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 6+5i 0+0i 1+0i 0+0i 0+0i 0+0i 0+0i
[3,] 7+8i 0+0i 0+0i 5+7i 1+0i 0+0i 0+0i
[1] "M."
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] -0.04712+26.35439i 0.481573-2.226748i -0.1060071+1.2197216i -13.096957+14.712633i 0.5068060+2.232998i 0+0i
[2,] -14.99124+17.34649i 1.118619+1.813366i 0.1787639-0.2609404i -2.990212+ 3.220496i 0.1026002+0.500459i 0+0i
[3,] -29.70311+27.86607i -0.917989+2.671462i -0.4456303+1.9748210i 5.339803+17.738622i 2.0387752+0.693439i 0+0i
[,7]
[1,] 0+0i
[2,] 0+0i
[3,] 0+0i
[1] "U"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 2+9i 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 6+5i 0+0i 1+0i 0+0i 0+0i 0+0i 0+0i
[3,] 7+8i 0+0i 0+0i 5+7i 1+0i 0+0i 0+0i
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[3,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[1] "s"
[1] 3 5 6
[1] "M"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 2+5i 6+1i 1+0i 0+0i 0+0i 0+0i 0+0i
[2,] 4+7i 3+1i 0+0i 4+4i 1+0i 0+0i 0+0i
[3,] 4+1i 9+7i 0+0i 7+2i 0+0i 1+0i 0+0i
[1] "M."
[,1] [,2] [,3] [,4] [,5]
[1,] 16.51709+ 5.57651i 11.856509-8.555375i 0.6769759-1.3515935i 7.629095+ 1.244823i 1.0653902-0.476870i
[2,] 3.28881+12.67853i 0.283285+4.839955i 0.8799850-0.7989926i -2.193838+10.294256i 0.6535136+0.520363i
[3,] -1.64295-11.96512i 6.365038-9.857871i 0.6291279+0.0427631i -2.629621-13.621897i -1.4598784-0.308032i
[,6] [,7]
[1,] 0.1509784-0.2016020i 0+0i
[2,] -0.1488223+0.8423421i 0+0i
[3,] 0.0140348-0.9397607i 0+0i
[1] "U"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 2+5i 6+1i 1+0i 0+0i 0+0i 0+0i 0+0i
[2,] 4+7i 3+1i 0+0i 4+4i 1+0i 0+0i 0+0i
[3,] 4+1i 9+7i 0+0i 7+2i 0+0i 1+0i 0+0i
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[3,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[1] "s"
[1] 2 3 7
[1] "M"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 8+2i 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 8+7i 0+0i 1+0i 0+0i 0+0i 0+0i 0+0i
[3,] 7+7i 0+0i 0+0i 4+7i 3+5i 3+5i 1+0i
[1] "M."
[,1] [,2] [,3] [,4] [,5]
[1,] 25.780973-6.712571i 0.9966861-0.9092727i -0.0089567-0.9931957i 5.747210+ 7.119012i 4.265199+5.059175i
[2,] 2.034767+6.842937i -0.2311264+0.5924503i 0.9885336+0.0046801i -1.264312- 4.051998i -0.976533-2.910455i
[3,] -2.304568+9.443859i -0.8696802+1.8372466i -0.9876556-1.2160090i 3.250093+11.967546i 2.534184+8.603455i
[,6] [,7]
[1,] 4.265199+5.059175i 1.1203374-0.1808373i
[2,] -0.976533-2.910455i -0.5141728-0.1131971i
[3,] 2.534184+8.603455i 1.4888184+0.3864543i
[1] "U"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 8+2i 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 8+7i 0+0i 1+0i 0+0i 0+0i 0+0i 0+0i
[3,] 7+7i 0+0i 0+0i 4+7i 3+5i 3+5i 1+0i
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[3,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[1] "s"
[1] 1 4 6
[1] "M"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 7+3i 3+8i 1+0i 0+0i 0+0i 0+0i
[3,] 0+0i 5+8i 1+8i 0+0i 5+9i 1+0i 0+0i
[1] "M."
[,1] [,2] [,3] [,4] [,5]
[1,] 1.681446+0.218843i 2.37665-12.01605i 9.46076-13.45130i -1.7139489-0.3125681i 14.90764-4.35259i
[2,] -2.319181+0.825472i 21.76329+14.01221i 6.95549+23.82991i 1.9354161+0.7188172i 11.12580+4.04226i
[3,] 0.868530-2.094954i -20.12747+12.19343i -21.39575- 0.79959i -0.6469581+0.7219627i -15.15047+9.14214i
[,6] [,7]
[1,] 0.3336311-1.4710540i 0+0i
[2,] 0.8680128-0.7539711i 0+0i
[3,] 0.0615746+1.7175938i 0+0i
[1] "U"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 7+3i 3+8i 1+0i 0+0i 0+0i 0+0i
[3,] 0+0i 5+8i 1+8i 0+0i 5+9i 1+0i 0+0i
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[3,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[1] "s"
[1] 1 4 6
[1] "M"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 4+6i 9+4i 1+0i 0+0i 0+0i 0+0i
[3,] 0+0i 6+8i 3+6i 0+0i 2+7i 1+0i 0+0i
[1] "M."
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0406654-0.9827242i -15.799093+0.551561i -7.74994+11.46000i 0.272428+1.851939i -1.720881-7.275784i
[2,] 0.0391854-0.5809030i 12.536601-8.090842i 17.42577- 9.37894i 1.199494-0.708419i 5.609991-7.561902i
[3,] -2.5866343-0.7399787i -9.431794+4.980645i -18.61893+ 0.46631i -1.644960-0.340802i -7.545341+9.752098i
[,6] [,7]
[1,] -1.025892-0.047272i 0+0i
[2,] -0.787044-1.026297i 0+0i
[3,] 1.003283+1.364558i 0+0i
[1] "U"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 4+6i 9+4i 1+0i 0+0i 0+0i 0+0i
[3,] 0+0i 6+8i 3+6i 0+0i 2+7i 1+0i 0+0i
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[3,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[1] "s"
[1] 1 2 5
[1] "M"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[3,] 0+0i 0+0i 7+9i 8+1i 1+0i 0+0i 0+0i
[1] "M."
[,1] [,2] [,3] [,4] [,5]
[1,] -0.7660429-0.2847983i 0.4577676+0.1896016i -0.099628- 6.808012i -3.45382- 3.354192i -0.4766885-0.3596879i
[2,] 1.4218012-1.7664454i 1.4175896+1.0335804i 17.311674- 4.069963i 6.62086-10.690819i 0.6504004-1.4176524i
[3,] -0.1251204+0.1412433i -1.8414231-0.6915573i 8.799649-25.510444i -8.35540-17.155047i -1.2922804-1.9828458i
[,6] [,7]
[1,] 0+0i 0+0i
[2,] 0+0i 0+0i
[3,] 0+0i 0+0i
[1] "U"
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 1+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[3,] 0+0i 0+0i 7+9i 8+1i 1+0i 0+0i 0+0i
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[2,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
[3,] 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i 0+0i
>
- シューベルト多様体(Schubert variety)
- シューベルト多様体を扱うにあたって、k1次元ベクトル部分空間とk2次元ベクトル部分空間との交わりの空間の次元を扱いたくなるので、まずそれをRで扱えるようにしておく
- 十分にk1次元空間とk2次元空間があって、その積空間の次元がku(unionのu)とする。また、k1,k2次元の2つの空間を張るk1+k2本の基底が張る空間の次元がk12とすると、k1+k2-ku = k12である。これを使って積空間の次元を計算する関数を作り、ランダムに2つの空間を作って確かに関数がうまく行っていることを以下のように確かめる
my.unionrank <- function(V1,V2){
r1 <- qr(V1)$rank
r2 <- qr(V2)$rank
r12 <- qr(rbind(V1,V2))$rank
unionr <- r1 + r2 - r12
return(list(r1=r1,r2=r2,r12=r12,ru=unionr))
}
n.iter <- 50
for(i in 1:n.iter){
k1 <- sample(2:10,1)
k2 <- sample(k2:10,1)
k12 <- sample(0:min(k1,k2),1)
n <- max(k1,k2)*2
V1 <- matrix(rnorm(n*k1),k1,n)
if(k12==0){
V2 <- matrix(rnorm(n*k2),k2,n)
}else{
V2 <- rbind(V1[1:k12,],matrix(rnorm(n*(k2-k12)),k2-k12,n))
}
out <- my.unionrank(V1,V2)
print(out$ru - k12)
}
-
- ちょっと自信が無いのだが…
- 正規直交基底で張られたn次元ベクトル空間があるとする(正規直交基底でないと以下の計算がうまく行かないようだ)
- この空間で、基底を1本ずつ増やしていくことで、0次元部分空間→1次元部分空間→2次元部分空間→…→n次元部分空間という部分空間の入れ子を作る。それをF0,F1,...,Fn=Vとする
- 今、k次元グラスマン多様体の一つWを考えることにする
- このWとFiとの交わりの次元を考えると、必ず、次元は0 -> d1 -> d2 -> ... -> dn = k と変わって行く。k < nだから、diの値は大きくなることもあるが変わらないこともある。値が増えるなら、1増える。この増えるところを「ジャンプ」と呼ぶことにすると、このジャンプする値は、1->2, 2->3, ..., n-1 -> nのところのどこかになる。この「ジャンプする」ところと、前述のShubert cellのpositionとが対応する
- ジャンプ/cellのpositionの0並びに着目すると、の長方形には0の塊が作る階段ができる
- この階段がShubert cellを定める
- このShubert cellの階段と同じか、それよりも0の塊が狭くなるようなShubert cellとを一まとめにしたものがShubert varietyである
- 以下のRでは、それを作ってみて、そのshubert cell計算をさせている
n <- 8
k <- 3
V <- diag(rep(1,n))
position <- sort(sample(1:n,k,replace=FALSE))
position
Wcell <- matrix(0,k,n)
Wvar <- matrix(0,k,n)
for(i in 1:k){
Wcell[i,] <- rnorm(position[i]) %*% V[1:position[i],]
t <- sample(c(TRUE,FALSE),n,replace=TRUE,prob=c(0.1,0.8))
t[1:position[i]] <- TRUE
t2 <- which(t)
Wvar[i,] <- rnorm(length(t2)) %*% V[t2,]
}
Ucell <- my.shubertcell(Wcell)
Uvar <- my.shubertcell(Wvar)
Ucell$U
Uvar$U
Ucell$position
Uvar$position
Ucell$position <= Uvar$position
for(i in 1:n){
tmp <- my.unionrank(V[1:i,],Wcell)
print(tmp$ru)
}
for(i in 1:n){
tmp <- my.unionrank(V[1:i,],Wvar)
print(tmp$ru)
}
> Ucell$U
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 8.12042 -12.292623 1.000000e+00 -6.34587e-17 0.000000 0.000000 0 0
[2,] -1.40697 4.895018 0.000000e+00 1.00000e+00 0.000000 0.000000 0 0
[3,] 33.41310 -56.608290 8.881784e-16 0.00000e+00 -2.284121 1.747325 1 0
> Uvar$U
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] -0.2323935 -0.8102209 1.000000e+00 0 0.000000 0.000000 0 0
[2,] 0.8033347 -1.9831590 0.000000e+00 1 0.000000 0.000000 0 0
[3,] 2.6593732 6.0433726 1.110223e-16 0 6.219105 2.891261 1 0
>
> Ucell$position
[1] 3 4 7
> Uvar$position
[1] 3 4 7
>
>
>
> Ucell$position <= Uvar$position
[1] TRUE TRUE TRUE
>
> for(i in 1:n){
+ tmp <- my.unionrank(V[1:i,],Wcell)
+ print(tmp$ru)
+ }
[1] 0
[1] 0
[1] 1
[1] 2
[1] 2
[1] 2
[1] 3
[1] 3
> for(i in 1:n){
+ tmp <- my.unionrank(V[1:i,],Wvar)
+ print(tmp$ru)
+ }
[1] 0
[1] 0
[1] 1
[1] 2
[1] 2
[1] 2
[1] 3
[1] 3