『グレブナ基底による媒介変数の変換』

この Tips では、媒介変数で表されるもののパラメータをグレブナ基底を使用し消去し、陰関数へ変換する手順を記します。

>    restart;

グレブナ基底を用いると、パラメータ表示されている式から多項式による陰関数に表現を変換することができます。例えば、以下ではトーラスのパラメータ表現を考えます。

>    torus := [(2+cos(t))*cos(u), (2+cos(t))*sin(u), sin(t)];

torus := [(2+cos(t))*cos(u), (2+cos(t))*sin(u), sin(t)]

この式を3次元描画してみます。

>    plot3d(torus, t=0..2*Pi, u=-Pi..Pi, axes=boxed, scaling=constrained, title="torus");

[Maple Plot]

t, u でパラメータ表示されている式を多項式による陰関数として変換してみます。まず、グレブナ基底パッケージを読み込みます。

>    with(Groebner);

[MulMatrix, SetBasis, ToricIdealBasis, fglm_algo, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter_reduce, is_finite, is_solvable, leadcoeff, leadmon, leadterm, normalf, pretend_gbasis, re...
[MulMatrix, SetBasis, ToricIdealBasis, fglm_algo, gbasis, gsolve, hilbertdim, hilbertpoly, hilbertseries, inter_reduce, is_finite, is_solvable, leadcoeff, leadmon, leadterm, normalf, pretend_gbasis, re...

Groebner パッケージの関数 gbasis は、基底を計算する対象を多項式と前提しています。そこで、トーラスの式中の書く三角関数部分を変数としてそれぞれ一時的に置き換えます。

>    torus2 := subs({cos(t)=ct, sin(t)=st, cos(u)=cu, sin(u)=su}, torus);

torus2 := [(2+ct)*cu, (2+ct)*su, st]

パラメータ表示はも元々 [ x, y, z ] = [ f(t,u), g(t,u), h(t,u) ] となっているものですから、全て左辺に移動したリストを作ります。

>    sys := [x,y,z] - torus2;

sys := [-(2+ct)*cu+x, -(2+ct)*su+y, -st+z]

グレブナ基底を計算します。尚、この際に三角関数の公式 sin(x)^2+cos(x)^2 = 1  を追加していることに注意して下さい。

>    gb := gbasis([op(sys), st^2+ct^2-1, su^2+cu^2-1], plex(ct,st,cu,su,x,y,z));

gb := [6*z^2+9+x^4+2*y^2*x^2+2*z^2*x^2-10*x^2+2*y^2*z^2+z^4-10*y^2+y^4, -13*y+4*su*z^2+12*su+x^2*y+y^3+y*z^2, 4*su*x^2+4*y^2*su-x^2*y-y^3-y*z^2-3*y, -13*x+4*cu*z^2+12*cu+x^3+y^2*x+z^2*x, cu*y-su*x, 4*c...
gb := [6*z^2+9+x^4+2*y^2*x^2+2*z^2*x^2-10*x^2+2*y^2*z^2+z^4-10*y^2+y^4, -13*y+4*su*z^2+12*su+x^2*y+y^3+y*z^2, 4*su*x^2+4*y^2*su-x^2*y-y^3-y*z^2-3*y, -13*x+4*cu*z^2+12*cu+x^3+y^2*x+z^2*x, cu*y-su*x, 4*c...

得られたグレブナ基底の一番最小の要素には、t, u というパラメータを消去した多項式が求まっています。

>    gb[1];

6*z^2+9+x^4+2*y^2*x^2+2*z^2*x^2-10*x^2+2*y^2*z^2+z^4-10*y^2+y^4

この多項式を用いて、3次元の陰関数を描画してみましょう。

>    plots[implicitplot3d](gb[1], x=-Pi..Pi, y=-Pi..Pi, z=-1..1, scaling=constrained, axes=boxed, grid=[15,15,15]);

[Maple Plot]

閉じる