Maxima で綴る数学の旅

紙と鉛筆の代わりに、数式処理システムMaxima / Macsyma を使って、数学を楽しみましょう

カラビ・ヤウ空間 : 竹内薫の「はじめての数式処理ソフト」より

 

この企画も今回を含めてあと2回となりました。

 

今回もグラフィックスものです。結局3Dグラフィックスの重ね書きが出来るので、どれでも同じなのですが、やはり華麗なカラビ・ヤウ空間を選びました。Maximaで描画するとこんな感じです。

 

f:id:jurupapa:20130905231447p:plain

 

この本のp98に載っているGnuplot向けのプログラムを書き直して実行したものです。

  

(%i1) load(draw)$

(%i2) u1(a,b):=0.5*(exp(a+%i*b)+exp(-a-%i*b));

$$ \tag{%o2} \mathrm{u1}\left(a , b\right):=0.5\,\left(\exp \left(-i\,b-a\right)+\exp \left(i\,b+a\right)\right) $$

(%i3) u3(a,b):=0.5*(exp(a+%i*b)-exp(-a-%i*b));

$$ \tag{%o3} \mathrm{u3}\left(a , b\right):=0.5\,\left(\exp \left(i\,b+a\right)-\exp \left(-i\,b-a\right)\right) $$

(%i4) z1k(a,b,n,k):=exp(k*2*%pi*%i/n)*u1(a,b)^(2.0/n);

$$ \tag{%o4} \mathrm{z1k}\left(a , b , n , k\right):=\exp \left(\frac{k\,2\,\pi\,i}{n}\right)\,\mathrm{u1}\left(a , b\right)^{\frac{2.0}{n}} $$

(%i5) z2k(a,b,n,k):=exp(k*2*%pi*%i/n)*u3(a,b)^(2.0/n);

$$ \tag{%o5} \mathrm{z2k}\left(a , b , n , k\right):=\exp \left(\frac{k\,2\,\pi\,i}{n}\right)\,\mathrm{u3}\left(a , b\right)^{\frac{2.0}{n}} $$

(%i6) n:3;

$$ \tag{%o6} 3 $$

(%i7) alpha:0.6*%pi;

$$ \tag{%o7} 0.6\,\pi $$

(%i8) gx(a,b,k1,k2):=realpart(z1k(a,b,n,k1));

$$ \tag{%o8} \mathrm{gx}\left(a , b , \mathrm{k1} , \mathrm{k2}\right):=\mathrm{realpart}\left(\mathrm{z1k}\left(a , b , n , \mathrm{k1}\right)\right) $$

(%i9) gy(a,b,k1,k2):=realpart(z2k(a,b,n,k2));

$$ \tag{%o9} \mathrm{gy}\left(a , b , \mathrm{k1} , \mathrm{k2}\right):=\mathrm{realpart}\left(\mathrm{z2k}\left(a , b , n , \mathrm{k2}\right)\right) $$

(%i10) gz(a,b,k1,k2):=cos(alpha)*imagpart(z1k(a,b,n,k1))+sin(alpha)*imagpart(z2k(a,b,n,k2));

$$ \tag{%o10} \mathrm{gz}\left(a , b , \mathrm{k1} , \mathrm{k2}\right):=\sin \alpha\,\mathrm{imagpart}\left(\mathrm{z2k}\left(a , b , n , \mathrm{k2}\right)\right)\\+\cos \alpha\,\mathrm{imagpart}\left(\mathrm{z1k}\left(a , b , n , \mathrm{k1}\right)\right) $$

(%i11) draw3d(proportional_axes = xy, zrange=auto, dimensions=[1200,1200],axis_3d=true,

       surface_hide = true,

         parametric_surface(gx(u,v,0,0),gy(u,v,0,0),gz(u,v,0,0), u,-1,1,v,0,%pi/2),

         parametric_surface(gx(u,v,0,1),gy(u,v,0,1),gz(u,v,0,1), u,-1,1,v,0,%pi/2),

         parametric_surface(gx(u,v,0,2),gy(u,v,0,2),gz(u,v,0,2), u,-1,1,v,0,%pi/2),

         parametric_surface(gx(u,v,1,0),gy(u,v,1,0),gz(u,v,1,0), u,-1,1,v,0,%pi/2),

         parametric_surface(gx(u,v,1,1),gy(u,v,1,1),gz(u,v,1,1), u,-1,1,v,0,%pi/2),

         parametric_surface(gx(u,v,1,2),gy(u,v,1,2),gz(u,v,1,2), u,-1,1,v,0,%pi/2),

         parametric_surface(gx(u,v,2,0),gy(u,v,2,0),gz(u,v,2,0), u,-1,1,v,0,%pi/2),

         parametric_surface(gx(u,v,2,1),gy(u,v,2,1),gz(u,v,2,1), u,-1,1,v,0,%pi/2),

         parametric_surface(gx(u,v,2,2),gy(u,v,2,2),gz(u,v,2,2), u,-1,1,v,0,%pi/2))$