桃田選手の2つの写真をつなぐ関節の動きを補間する

  • 体の姿勢は骨と関節とでおおよそ決まる
  • その骨格と関節を次のように実装する
  • 骨は直線的剛体とする
  • 骨には関節面があり、関節面の相対的位置関係は不変とする
  • 姿勢は、骨の長軸方向ベクトルと骨の長さで、その大部分が決まる
  • 両端の関節の自由度が高い骨(上腕骨)は、骨格の形状を変えずに、上腕骨を骨軸回りに回転することができる
  • バドミントンの場合は、利き手にラケットを握っており、このラケットは、握り方を変えることで軸回りの回転(イースタンウェスタングリップなど)を含め、自由度の大きい関節とみなすことができる
  • 今、写真等から、ある姿勢における骨の方向を推定する
  • 骨方向のみではわかりかねる上腕骨の骨軸回転、ラケットのシャフト軸回転は、解剖学的な知識を援用して与えるものとする
  • こうすることで、すべての骨の位置と、骨の骨軸回りの回転角が決まる。その情報は、骨の始点に正規直交基底を与えることで実現する
  • またすべての関節は骨の配置に対する相対的回転行列として定義できる
  • 今、2つの姿勢があるとする
  • 2つの姿勢の違いは、関節の状態を定める回転行列のセットとして表現できる
  • 片方の姿勢から、もう片方の姿勢に、姿勢変化を起こすとき、すべての関節が等速変化すると仮定して、2つの姿勢の間の姿勢を補間することは、運動モデルとして悪くないだろう
  • やってみる
  • 以下の2つの画像を(左右反転して右利きとして)やってみる

thetv.jp

https://www.jiji.com/news/handmade/topic/d4_qq/tmk407-jpp032157561.jpg

こんな結果に:
f:id:ryamada:20210914134243p:plain

Rmarkdown, knitr, rgl, plot3d open3D

  • 確認は不十分ながら、Rでrglパッケージを使って3次元プロットをする仕組みがopen3Dベースに変更になった??(いつ?)
  • それを受けて、Rmarkdown文書内でのぐりぐりうごかせる3次元プロットの埋め込み・表示の対応を変える必要が出るようになった?
  • WindowsMacとでそもそも挙動に違いがあったが、どちらのOSでも、従前と挙動が異なるようになった?
  • ひとまず、以下のようにすると、生成htmlファイルをブラウザで開けば、ぐりぐり3Dプロットの埋め込みができるかも
  • ただし、そのRmarkdownをRstudio内で「ローカル」に実施すると、Widget??的には表示されない、とか、あちらを立てればこちらが立たず的な問題は残っている???
  • 重い3次元プロットはなかなか表示されないなどの問題も残るようだ・・・
```{r setup, include=FALSE}
library(knitr)
opts_chunk$set(echo = TRUE)

library(rgl)
options(rgl.useNULL = TRUE)
options(rgl.printRglwidget = TRUE) 
knit_hooks$set(rgl = hook_webgl)
```

```{r,rgl=TRUE}
plot3d(matrix(rnorm(300),ncol=3))

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

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)

ぱらぱらめくる『クラスター代数入門』

クラスター代数入門

1 はじめに

  • クラスター代数には、以下の3項目とのつながりがあり
  • 数理物理学に出てくる可積分系は「組み合わせ論・ルート系・リー環量子群」ともつながりつつ、「三角形分割・双曲幾何・結び目」ともつながるという相互関係がある
  • クラスター代数の数字の動きを知る初歩的な例としてConway-Coxeter friezeと呼ばれる、数を並べるゲームが挙げられている
    • 数の計算ルールとして4個の数a,b,c,dを四角形に並べた時に、bc = ad + 1の規則を守らせる
    • 上下を1の列でサンドイッチし、その間に4数の四角形がダイヤモンド型に斜めに置かれる配置し、左端も1にする
    • このようにすると、上下サンドイッチの間に何層あっても、サンドイッチ部分には
      • 対称的な数値の並びが現れる
      • しかも、c = \frac{ad+1}{b}という分数計算をしているのにも関わらず、整数ばかりが現れる
  • こんな、一見、分数~有理数が出てきそうなゲームなのに、整数ばかりが現れ、しかも、対称的で、元に戻る、というのが、団代数のある側面を表していることから、好例として示されている
  • ここでbc = ad + 1という関係式を少し、一般化する
    • bc + ad  +1のルールでは、ちょっと書き方を変えると、x_{2k+1} = \frac{x_{2k}+1}{x_{2k-1}}, x_{2k+2} = \frac{x_{2k+1}+1}{x_{2k}}と言う計算になることが示せる
    • これをx_{2k+1} = \frac{x_{2k}^{d1}+1}{x_{2k-1}}, x_{2k+2} = \frac{x_{2k+1}^{d2}+1}{x_{2k}}としてやる
    • (d1,d2) = (1,1)の場合からの一般化になっている
  • このようにすると、「元に戻る~閉じる」という性質が(d1,d2) = (1,1),(1,2),(1,3)の場合に限られることを示すことができると言う
  • その他の有名な例
    • 多角形の対角線の引き方に見られる団代数の例

2 クラスター代数

  • (係数なし)クラスター代数
    • 箙による団代数の例
  • クラスター代数について知られているTheorem 2.2
    • すべてのクラスター変数は、ローラン多項式の形になっている
    • 相違なるクラスター変数が有限個(シードが有限個)であることと、対応する箙がADE型quiver (ルート系のタイプにA,B,C,D,E型と言うのがある)にmutation 同値である(mutation 同値とは、まあ、同値と同じようなことと思っておいて大丈夫)
  • ルート系(ランク2)
    • 二次元平面を1種類の三角形でタイル貼りする話とルート系に関係がある
    • しかも、このタイル貼りが成功することと、(d1,d2) =(1,1),(1,2),(1,3)の3通りだけが、発散しないという話に対応がとれる
    • うまくいく三角形タイル貼りでは、いくつかの種類の等間隔平行線が現れる
    • 等間隔平行線というのは、その平行線の法線ベクトル\alphaを使って\{v \in R^2 | (v,\alpha) = k; k = 0, \pm 1, \pm 2...\}のように書ける
    • ここで、タイル貼りパターンごとに、何通りの平行線が現れるかが決まっているが、そのそれぞれの平行線の法線ベクトルは線形非独立で、限られた数の法線ベクトルの整数係数線形和で他の法線ベクトルを表すことができる
    • そして、その法線ベクトルの集合がルート系
    • ルート系を生成することができる「素」となるベクトル(である生成係数制約を満たすもの)がsimple roots
    • そのルート系が一部の法線ベクトルによって生成され、その生成の整数係数線形和のパターンと、対応する三角形タイル貼りに伴うクラスター代数のローラン多項式の分母とが一致する
    • これが(有限な)クラスター代数とルート系の関係
    • ルート系の次元を上げる
      • 三角形でのタイル貼りは2次元版
      • 三角形を単体に、平行線を平行超平面にすると、一般次元版
  • 一般のルート系
    • ベクトル空間Vの部分集合\Psiがルート系で、\Psiは以下の条件を満足する
      • \Psiは零ベクトルを含まない有限集合で、Vを生成する
      • \alpha \in \Psiに対して、V上の線形変換s_\alphaを、s_\alpha : V \to V, v \to v - 2\frac{(v,\alpha)}{(\alpha, \alpha)} \alphaとするとs_\alpha (\Psi) = \Psiが成り立つ
          • この線形変換s_\alpha\alphaを法線ベクトルとする超平面に関する鏡映写像
      • \forall \alpha, \beta \in \Psi, 2 \frac{(\beta, \alpha)}{(\alpha, \alpha)} \in Z
      • \alpha \in \Psiのとき、 \pm \alpha \in \Psiだが、それ以外の\alphaの定数倍ベクトルは\Psiに含まれない
    • ごちゃごちゃかいてあるけれど、「単位的なベクトル」の集合で、正逆向きの2本のベクトルは含まれ、内角が180度でないベクトル同士の関係は、内積を通じて整数制約がかかっている。また、各ベクトルを法線とする超平面による鏡映ベクトルも含まれるような対称性の担保がされた、ベクトルセットがルート系
    • この制約では、2\frac{(\beta,\alpha)}{(\alpha,\alpha)} = C_{\alpha,\beta}の値が整数になるわけだが、それは0,1,2,3になり2つのベクトルのなす角は\frac{\pi}{k}; k = 2,3,4,6に限られる。また、\alpha,\betaというベクトルの長さの比の関係にも制約があって、1,\sqrt{2},\sqrt{3}のみになるなどの関係がある(ただし、内角が直角の場合の長さ制約はない)
  • また「単位的なベクトルの集合」はsimple rootsだが、それ以外のルートはsimple rootsの線形和で表され、その係数はすべて0以上か、すべて0以下かの2通りに分かれる。したがって、ルート系は、simple rootsを持ち、すべてのルートは、係数0以上のみルート(正ルート)と、係数0以下のみルート(負ルート)のどちらかに分けられる
  • カルタン行列
    • 整数になることが担保されているC_{\alpha,\beta} = 2\frac{(\beta,\alpha)}{(\alpha,\alpha)}  を成分とする行列はカルタン行列と呼ばれる
    • 箙の反対称行列の全成分の符号を負にし、対角成分を2にしたものは箙(とその団代数)の性質を(ある程度)保持するが、この行列が、Dynkin 図でADE型のカルタン行列になっていることは、(多少の付加的説明を加えた上で)この箙のクラスター代数が有限であることの必要十分条件になっている
  • Dynlin 図は、鎖状のグラフだったり、多少の枝分かれをするグラフだったりする。そのグラフのエッジは基本的には一重だが、二重以上のものもある。そして一重の場合がADE型と呼ばれる
  • カルタン行列からDynkin図を作るルールは以下の通り
    • nxnカルタン行列に対応するDynkin図の頂点数はn個
    • |C_{ij}| \ge |C_{ji}|のとき、頂点 i,jを|C_{ij}|本の辺で結ぶ
    • |\alpha_i| < |\alpha_j|のときjからiへの向きとする。ただし|\alpha|はベクトルのノルム
  • 係数付きクラスター代数
    • 係数なしクラスター代数は、シードが交代(可能)行列と変数セットからなり、その変数が変異によりローラン多項式の形を取るというものだった
    • 係数つきクラスター代数では、シードが交代(可能)行列と、変数セットと係数セットからなり、係数の変異は係数のみにて完結する(が(トロピカル)半体を用いた関係式になるという、ちょっとしたごちゃごちゃ感がある)、変数セットの変異は、変数と係数とを両方使った関係式によって定義される

3 差分方程式への応用

4 双曲幾何への応用

ぱらぱらめくる『1章 リー代数と量子論』

1章 リー代数と量子論

  • リー代数に興味がある
  • リー代数はリー群の接空間と関係がある
  • リー群の例としての回転行列の群とそれに対応するリー代数に興味がある
  • 回転行列の群の要素は回転行列(当然か…)
  • 回転行列に対応するリー代数の要素は交代行列(歪対称行列)
  • 交代行列(歪対称行列)は団代数のシードの一部をなす行列
  • この団代数のシードをなす交代行列に興味があるので、それが構成するリー代数に興味がある
  • さて、ぱらぱらめくることとする
  • リー代数に重要なのは交換関係
  • X,Yリー代数の要素であるとき、X+Yも要素。XY-YXも要素
  • この後者が交換関係
  • 非可換な時に非ゼロになる成分
  • この交換関係がリー代数の素性を決める
  • この[X,Y] = XY - YXを表現するときに現れるのが、構造定数
  • この構造定数が交換関係を決めているので、リー代数の素性を構造定数が決める、とも言える
  • リー代数の生成子の集合\{X_1,X_2,...\}があるときに、X_i + X_jリー代数の要素とし、X_i X_j - X_j X_iリー代数の要素とする、というルールで要素を増やしていける。そうやって増やすときの「素」になるのが生成子(だろうと思われる)
  • そして、その生成子間の交換関係式X_i X_j - X_j X_iを生成子の線形和で表すときの係数が構造定数
  • リー代数には対角化行列で表される成分も存在しうる(交代行列で出来上がった団代数のシード行列の集合にはそういうものはない)
  • リー代数の成分のうち、同時に対角化できる成分のセットを作る
  • そのような対角行列要素は交換関係式が0を返すので、「構造定数的」に考えることが少なくなってきて
  • それ以外の生成子との交換関係が重要になって来る
  • この対角化生成子、非対角化生成子の間の関係などを表すときに出てくるのが、ルート(ルートベクトル)とウェイト
  • このルートとウェイトとを整理して出てくるのがDynkin label
  • また、ルートベクトルから作られる行列であるカルタン行列は、リー代数の素性を定めるルートベクトルの情報を背負っているので、大事な行列になっている
  • さらに、また。ウェイトを考えていって、それにダイアグラムを与えたものがヤング図
  • この辺りを使って対称性の議論をすることで量子力学がこの世の中をどう見ることになるか、という話となってゲージ理論とかにつながるらしい
  • 量子力学ではリー代数がどういう使われ方をするかと言うと・・・
  • さて。これを、対角行列が出てこないリー代数、要素数が膨大になりうる団代数の交代行列が持つリー代数上の構成?構造?とどういう風につながるのか、、、ということを考えたい

トロピカル代数でグラフの最短距離計算、トロピカル行列式、トロピカル版代数学の基本定理、トロピカルPCA

論文Tropical Principal Component Analysis and its Application to Phylogenetics https://arxiv.org/pdf/1710.02682.pdf

トロピカル演算と行列のトロピカル積とトロピカル行列式とグラフの最短距離計算

  • トロピカル演算x \oplus y = min(x,y),x \otimes y = x + yがある
  • 行列の積にも同じように定義する
  • 今、グラフの距離行列 A を作る。ただし、対角成分は0とし、エッジのない頂点ペアに対応するセルは無限大とする
  • このとき、頂点数nに対して、A^{\otimes n-1} (行列Aのトロピカル積のn-1回繰り返し)は、頂点ペア間の最短距離になると言う
  • Rで確かめる
# トロピカル演算の関数を作る
my.tropical.sum <- function(x,y=NULL){
  min(c(x,y))
}
my.tropical.prod <- function(x,y){
  x+y
}
# トロピカル行列積の関数を作る
my.tropical.matrix.prod <- function(X,Y){
  ret <- matrix(0,length(X[,1]),length(Y[1,]))
  
  for(i in 1:length(X[,1])){
    for(j in 1:length(Y[1,])){
      tmp <- c()
      for(k in 1:length(X[1,])){
        tmp   <- c(tmp,my.tropical.prod(X[i,k],Y[k,j]))
      }
      ret[i,j] <- my.tropical.sum(tmp)
    }
  }
  return(ret)
}
# 関数の検算
x <- 3
y <- 5
my.tropical.sum(x,y)
my.tropical.sum(c(x,y)) 
my.tropical.prod(x,y)

my.tropical.sum(Inf,3)
my.tropical.prod(Inf,3)

X <- matrix(1:6,2,3)
Y <- matrix(2:7,3,2)
X
Y
my.tropical.matrix.prod(X,Y)

library(igraph) 

el <- rbind(c(1,2),c(2,3),c(3,1),c(1,4),c(5,4))
w <- 1:5
g <- graph.edgelist(el) 
plot(g)
# igraphパッケージを使って、いわゆるグラフ距離をグラフアルゴリズムで計算する
D.graph <- distances(g,mode="out",weights=w)

A <- matrix(Inf,5,5) 
for(i in 1:length(w)){
  A[el[i,1],el[i,2]] <- w[i]
}
diag(A) <- 0
A
# グラフ距離計算をトロピカル行列積で計算する関数を作る
my.tropical.shortest.dist <- function(A){
  n <- length(A[,1])
  ret <- A
  for(i in 1:(n-2)){
    ret <- my.tropical.matrix.prod(A,ret)
  }
  return(ret)
}

D.graph.tropical <- my.tropical.shortest.dist(A) 

# 二方法で計算したグラフ距離は一致する
D.graph
D.graph.tropical 
all.equal(D.graph,  D.graph.tropical)
> D.graph
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    1    3    4  Inf
[2,]    5    0    2    9  Inf
[3,]    3    4    0    7  Inf
[4,]  Inf  Inf  Inf    0  Inf
[5,]  Inf  Inf  Inf    5    0
> D.graph.tropical 
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    1    3    4  Inf
[2,]    5    0    2    9  Inf
[3,]    3    4    0    7  Inf
[4,]  Inf  Inf  Inf    0  Inf
[5,]  Inf  Inf  Inf    5    0
  • トロピカル行列式\bigoplus_{\sigma \in S([d])} \prod^{\otimes} a_{i,\sigma_i}で与えられる
  • 順列の総当たりである値を出し、その最小値を取るので、その最小値がただ一つの順列から得られるか、複数の順列が最小値を返すか、いずれの場合もある。この「重複」に意味があるので、それについても返す関数を作っておく
    • ちなみにTropical volumeというものがあって、それは、トロピカル行列式の値が2個(以上)の順列によって与えられるときは0になり、そうでない時には、順列で入れ替えて得られる、最小値と第二最小値の差になる。そのことをTropVol(A) = |\bigoplus_{\sigma \in S([d])} \prod^{\otimes} a_{i,\sigma_i} - \bigoplus_{\sigma \in S([d]) - \sigma_{opt}} \prod^{\otimes} a_{i,\sigma_i}|と表す

トロピカル版の代数学の基本定理

  • 代数学の基本定理は、1変数複素関数には、少なくとも1つ根がある、d次1変数関数ならd個の根がある、というもの(Wiki記事
  • トロピカル版のそれは、「1変数トロピカル関数」は、(ある条件付き処理を介して)a \prod_i ^{\otimes} x \oplus r_i)と言う形に変形できる。。。このr_iが「根」み見える。と言う話
  • 特に、このr_iは、1変数トロピカル関数の折れ線が曲がるときのxの値に相当しており、トロピカル幾何では、これをトロピカルhypersurface(の1変数版)と呼び、別名、「零点集合」と呼ぶわけだが、この「折線の折れるところ」であって、何も「零」になっていないのに、どうして「零点」なのか、というと、代数学の基本定理的にこの式を見直したときに、「根」に相当する~「零を与えるxの値=零点」ということらしい
  • 少し、説明を付け加える
  • f(x) = \bigoplus_{i = r,r+1,...,n} a_i \otimes x^{i \otimes}と表されたとする。r次からn次まで途中を抜かすことなく全部の項を書いた、ということ
  • これを折線のことを思い出しながら解釈すると、iが大きい項は、急峻な直線を表すが、その直線はトロピカル曲線に参加しやすい。参加しやすいのはa_iの値が大きくても小さくても参加しやすいということ
  • 逆にnが小さい項はa_iの値が大きくなると、トロピカル曲線に参加しない、あってもなくてもよい項になってしまう。そんなとき、「参加しないこと」が真実なのだから、参加させないわけだが、a_iをどんどん小さくしていくと、いつか、「参加する」ことになって、トロピカル曲線が違うものになってしまう。その事情を考慮して、a_iの値を変えても良い項については、なるだけ小さな値にまで下げる、というルールを入れることで、トロピカル曲線が与えられたときに、a_iの値は一意に確定する
  • さて。このようにして一意化した係数 a_iを用いたトロピカル関数の表記を「Least-coefficient polynomial」と呼ぶ
  • 今、Least-coefficient polynomialがf(x) = \bigoplus_{i = r,r+1,...,n} a_i \otimes x^{i \otimes}であったときに
  • f(x) = a_n \prod_{i = n,n-1,...r}^{\otimes} (x \otimes d_i) 、但し、d_i = a_{i-1} - a_iと言う表現があるという
  • これがトロピカル版の代数学の基本定理
  • 例を。。。
    • f(x) = 3 \otimes x^3 \oplus 1 \otimes x^2 \oplus 2 \otimes x \oplus 4 = min(3+3x,1+2x,x+x,4)である
    • このときa_n = a_3 = 3, a_2-a_3 = 1-3 = -2, a_1 - a_2 = 2 -1 = 1, a_0 -a_1 = 4 - 2 = 2なので
    • f(x) = 3 \otimes (x \oplus (-2) \otimes (x \oplus 1) \otimes (x \oplus 2) となる、と言う話
  • こちらのペイパーを:Elementary proof of the fundamental theory of tropical algebra