はじめに
面白いブログ記事を見つけました。
カラビヤウ多様体の可視化については色々情報がありますが、一番とっつきやすい情報源だったので、思いっきり活用させていただこうかと思います。引用元ではJavaScriptを使っているようです。今回はSageを使います。
準備
ダウンロード済みの SageMath 9.2 Shell を起動します。
sageと打ち込みます。
以下の状態になったら準備OKです。
プログラム
以下のプログラムを作成し、sage にロードして使っていきます。
def calabi(n,a,k1,k2,color,np,flag): u,v=var('u,v') f = (lambda u,v:(exp(CC(0,1)*2*pi*k1/n)*cos(u+CC(0,1)*v)^(2/n)).real(), lambda u,v:(exp(CC(0,1)*2*pi*k2/n)*sin(u+CC(0,1)*v)^(2/n)).real(), lambda u,v:(exp(CC(0,1)*2*pi*k1/n)*cos(u+CC(0,1)*v)^(2/n)).imag()*cos(a) +(exp(CC(0,1)*2*pi*k2/n)*sin(u+CC(0,1)*v)^(2/n)).imag()*sin(a)) return parametric_plot3d(f,(u,0,pi/2),(v,-pi/2,pi/2),plot_points=[np,np],rgbcolor=color,mesh=flag) def calabi_plots(n,a,np,flag): p_list = [] for i in range(n): for j in range(n): p_list.append(calabi(n,a,i,j,Color((6*i+j)*10*pi/180,0.7,0.7,space='hsl'),np,flag)) return p_list
n は多様体の次元、k1 と k2 はそれぞれ 0 から n-1 までの値をとります。k1 と k2 のパターンの取り方によって図を色分けするようなコードにしました。
実行結果
sage: load("calabi.sage")
n=3 の場合をみてみましょう。
sage: l = calabi_plots(3,0,10,True)
k1とk2がとるパターンはn×nとなるので、n=3の場合は9個の図を可視化する必要があります。作成した calabi_plots は可視化に必要な9個のグラフィックスオブジェクトをリストとして返します。
sage: len(l) 9
9個のうち、1つを可視化してみます。
sage: l[0] Launched html viewer for Graphics3d Object
1つ目の図にもう1つ図を追加してみます。
sage: l[0]+l[1] Launched html viewer for Graphics3d Object
9個すべて可視化する場合は以下のような書き方が可能です。
sage: sum(l) Launched html viewer for Graphics3d Object
n=6 の場合
n=3の場合とやり方は同じです。
sage: sum(calabi_plots(6,0,10,True)) Launched html viewer for Graphics3d Object
参考
Visualizing Calabi-Yau Manifolds
Arbitrary Precision Complex Numbers — Sage 9.2 Reference Manual: Fixed and Arbitrary Precision Numerical Fields
Parametric Plots — Sage 9.2 Reference Manual: 3D Graphics
How can I save an image from sage plot ? - ASKSAGE: Sage Q&A Forum
plots of complex numbers - ASKSAGE: Sage Q&A Forum
Colors — Sage 9.2 Reference Manual: 2D Graphics