- 駆け足で読む『数学をいかに使うか』の目次はこちら
- 3次元ベクトル空間でのベクトル積(外積)は、に対して、 というのベクトル。
- 他方、内積は[tex:=\sum_{i=1}^3 a_i b_i]
- 内積の定義はn次元においてもそのまま通用するが、ベクトル積はそうはなっていない。その理由を含めて考えると、ベクトル積・外積代数というものが出てくる。それを以下に示す
- n次元のベクトル積
- n次元空間ベクトルがn-1個あったとき、そのベクトル積は、n次元ベクトルになる
- 今、n-1個のベクトルをとし、もう一つn次元ベクトルを置く
- を行ベクトルとする行列を考えると、そのDeterminant()が算出できる
- のベクトル積はn次元ベクトルであって、ととの内積はのDeterminantである([tex:=det(X)])という関係にある
- それをRで書くと次のようになる
library(MCMCpack)
detComplex<-function(M){
e.out<-eigen(M)
prod(e.out[[1]])
}
ExteriorProduct<-function(V){
ret<-rep(0,length(V[1,]))
for(i in 1:length(ret)){
ret[i]<-(-1)^(i+1)*detComplex(V[,-i])
}
ret
}
n<-7
X<-matrix(complex(real = rdirichlet(1,rep(1,n^2)), imaginary = rdirichlet(1,rep(1,n^2))),ncol=n)
X<-t(Conj(X))%*%X
detX<-detComplex(X)
detX
s<-sample(1:n,(n-1))
ep<-ExteriorProduct(X[s,])
ep
sum(X[-s,]*ep)
detComplex(X)
sum(X[-s,]*ep)-detComplex(X)
- 長さnのベクトルn-1本から、長さnのベクトルが1本できた。これは、n次元空間をとしてからへと写したもの
- ベクトル積を一般次元に拡張する
- ベクトル積はn次元ベクトルがn-1本集まったときに定義できた
- n次元ベクトルがr([tex:r
- それは、n-1個のベクトルが作る行列からn-2列を取り出したもの(n-1通りある)が作る行列のDeterminantに正負を考慮したものになっている
- このベクトル積様なものの個数は、「組み合わせ」で決まるので、べき集合の要素数(n次元ベクトルn本に対して考えれば、)になる
- この個の要素たちは「代数」的に完結するので、以下のように「外積代数」としてまとめられる(参考→こちら)
- 外積代数はベクトル解析につながっている
- 外積・微分形式・外微分…時空間軌道の解析から始まった「曲線」「曲面」「多様体」に関する話題の一端であるこの記事につながる
- この先に関する若干の補足はこちら
- 外積代数を用いて、微分形式・外微分などを用いることで積分に関する以下の公式がわかりやすくなる
- Gauss-Stokesの公式(こちら)、「ベクトル場の回転を曲面上で面積分したものが、元のベクトル場を曲面の境界で線積分したものに一致する」
\int_{\partial S} \omega = \int_S d\omega
- 自分なりに外積代数・微分形式・外微分・Gauss-Stokesの公式を書いてみる
- n次元空間には、n個の線形独立なベクトルがおける。簡単に考えるなら、n本のベクトルからなる正規直交基底を考える
- 外積代数
- 外積代数では、1,2,...,nを要素とする集合のべき集合の要素である部分集合に対応したものを考える
- そのような要素は個ある
- この個は、部分集合であるが、部分集合としての要素数が、0,1,2,...,nのいずれかであって、それぞれの要素数はとなっている
- それらは符号の取り方の工夫をすることで、あるルールづけがなされている
- 微分形式
- 外積代数では「単位ベクトル」を考えたが、こちらは微分なので、「微小ベクトル」を考える。微小ベクトルだが、方向については、「単位ベクトル」をそのままひきつぐ
- 外積代数と同様に種類あるそれぞれに、関数がある
- 外積代数では、対応する部分集合の要素数で0,1,...,n通りに分類できたが、この要素数rごとにのように(部分集合として要素数rの外積代数の一つ)に関して足し合わせたものをr次の微分形式と呼ぶ
- 外微分
- r次の微分形式の外微分を次のように定義する
- ここで外積代数の交代性が功を奏して、ぱたぱたと項が消える
- Gauss-Stokesの公式
- のやはこのようにして定めた微分形式と外微分であって、この表現法を使うと、r次の微分形式を境界に関して積分したものと、その外微分を領域全体について積分したものとが一致する、ということが導ける
- これは、空間が1次元のときには、外微分を領域(ここからここまで)について積分したものと、微分形式を境界(1次元線分の境界は2点)について向き・正負に注意して積分したものに一致することに対応する
- 外積代数の計算をRでやってみる
- 次元nのとき、要素数は、nからi個を取り出して、その順列になる(それ以外は、0になる)から、。それらが、の基本要素で張られる
- 以下のソースではelemListが基本要素、allElemがすべての要素。MはallElemの演算結果を基本要素数の長さのベクトルで表している。またM2は、基本要素のどれに相当するかを符号つきで表している
n<-3
s<-1:n
s2<-sample(s)
M<-diag(rep(1,n))[s2,]
det(M)
SignaturePermutation<-function(s){
n<-length(s)
sig<-1
if(n>1){
s2<-order(s)
M<-diag(rep(1,n))[s2,]
sig<-det(M)
}
list(set=as.set(s),sign=sig)
}
a<-sample(s,sample(0:n))
a
SignaturePermutation(a)
a2<-sample(s,sample(0:n))
a2
SignaturePermutation(a2)
Zerocheck<-function(s1,s2){
ret<-TRUE
if(length(set_intersection(as.set(s1),as.set(s2)))==0){
ret<-FALSE
}
ret
}
Zerocheck(a,a2)
library(sets)
library(gtools)
t<-as.set(s)
pow.t<-set_power(t)
elemList<-list()
cnt<-1
numcnt<-1
cntINnumcnt<-1
currentn<-0
elemList[[1]]<-list()
for(i in pow.t){
n<-length(i)
print(n)
print(i)
if(n>currentn){
cntINnumcnt<-1
numcnt<-numcnt+1
currentn<-n
elemList[[numcnt]]<-list()
}
elemList[[numcnt]][[cntINnumcnt]]<-list(id=cnt,id2=cntINnumcnt,set=i,n=length(i))
cntINnumcnt<-cntINnumcnt+1
cnt<-cnt+1
}
allElem<-list()
cnt<-1
v<-c()
tmp<-SignaturePermutation(v)
allElem[[cnt]]<-list(id=cnt,v=v,set=tmp$set,sign=tmp$sign)
cnt<-cnt+1
for(i in 1:n){
tmpperm<-permutations(n,i)
for(j in 1:length(tmpperm[,1])){
v<-tmpperm[j,]
tmp<-SignaturePermutation(v)
allElem[[cnt]]<-list(id=cnt,v=v,set=tmp$set,sign=tmp$sign)
cnt<-cnt+1
}
}
allElem
N<-length(allElem)
M<-array(0,c(N,N,2^n))
M2<-matrix(0,N,N)
for(i in 1:N){
for(j in 1:N){
vi<-allElem[[i]]$v
vj<-allElem[[j]]$v
if(!Zerocheck(vi,vj)){
tmpv<-c(vi,vj)
tmpout<-SignaturePermutation(tmpv)
print(tmpv)
tmplen<-length(tmpv)
for(k in 1:length(elemList[[tmplen+1]])){
if(tmpout$set==elemList[[tmplen+1]][[k]]$set){
print(elemList[[tmplen+1]][[k]])
print(M[i,j,])
M[i,j,elemList[[tmplen+1]][[k]]$id]<-tmpout$sign
M2[i,j]<-elemList[[tmplen+1]][[k]]$id*tmpout$sign
print(M[i,j,])
}
}
}
}
}
M2
> M2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16]
[1,] 0 2 3 4 5 6 -5 7 -6 -7 8 -8 -8 8 8 -8
[2,] 2 0 5 6 0 0 0 8 0 -8 0 0 0 0 0 0
[3,] 3 -5 0 7 0 -8 0 0 8 0 0 0 0 0 0 0
[4,] 4 -6 -7 0 8 0 -8 0 0 0 0 0 0 0 0 0
[5,] 5 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0
[6,] 6 0 -8 0 0 0 0 0 0 0 0 0 0 0 0 0
[7,] -5 0 0 -8 0 0 0 0 0 0 0 0 0 0 0 0
[8,] 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[9,] -6 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0
[10,] -7 -8 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[11,] 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[12,] -8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[13,] -8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[14,] 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[15,] 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[16,] -8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0