Groebner[MultivariateCyclicVector] - 汎用のパラメータ化できる反復算法
使い方
MultivariateCyclicVector(NFproc, FDproc, TMproc, M)
パラメータ
NFproc - 正規形計算のための関数
FDproc - 従属性判定のための関数
TMproc - 停止条件の関数
M - Ore代数上の単項式順序
|
説明
|
|
•
|
MultivariateCyclicVector コマンドは NFproc が 0 の (非可換) 多項式の M に関する Groebner 基底を計算する (FGLM と同様の)反復算法です。
|
•
|
MultivariateCyclicVector の一般的な使い方は以下の通りです。
|
|
(i) - 単項式順序の変換によって Groebner 基底を計算する (ある単項式順序に関する Groebner 基底がわかっているとし、それを元に他の単項式順序に変換する)。
|
|
(ii) - 関数を定義する方程式を見つける。これは 例 のセクションもご参照ください。
|
m 代数 M[algebra] 上の単項式;
NF インデックスとして、すでに扱われた単項式と
対応した要素として、計算されたの正規形の表;
M 単項式順序 (実際、M は
MultivariateCyclicVector を呼ぶのに用います)
|
出力は m の正規形であり、結果を NF[m] に記憶します。
|
mi モノイデアルを生成する単項式のリスト
(これは、積で安定な単項式の集合です);
NF は上述のものと同様.
|
出力は NFproc で 0 だったものの、NF のインデックスの自明でない線型結合か、そのような線型関係がない場合は FAIL を返します。この関数は、モノイデアル mi で生成される元をインデックスに持つような NF の要素を使いません。
|
•
|
関数 TMproc はアルゴリズムがいつ停止するかを定めます。引数は以下の 3 つです。
|
border アルゴリズムで扱われている単項式のリスト;
monoideal モノイデアルを生成する単項式のリスト
(これは、積で安定な単項式の集合です);
TOrd これらが列挙したものに関する単項式順序
•
|
MultivariateCyclicVector コマンドの出力は NF, EQ の形式で、NF は計算で得られた全ての正規形の表であり、EQ は見つかった全ての線型関係です。
|
|
注意: アルゴリズムは 0 次元ではないかどうかの判定を行いません; このような場合アルゴリズムは無限ループします。
|
•
|
可換な場合に基底変換によって計算をする場合は FGLM コマンドで代用したほうが計算効率が良くなります。
|
|
|
例
|
|
基底変換
|
FGLM アルゴリズムは単項式順序を変換することで Groebner 基底を計算する算法として提案されました。
|
>
|
with(Ore_algebra):
with(Groebner):
A:=poly_algebra(x,y,z,t):
G:=[x^31-x^6-x-y,x^8-z,x^10-t,x^2+y^2+z^2-t^2]:
M[org]:=MonomialOrder(A,wdeg([1,31,8,10],[x,y,z,t])):
|
最初の Groebner 基底は次のものです。
>
|
GB[org]:=Basis(G,M[org]);
|
| (2.1) |
0- 次元であることを確認します。
>
|
HilbertDimension(%,M[org]);
|
| (2.2) |
MultivariateCyclicVector を呼ぶために NFproc と FDproc を定義します。
>
|
NFproc:=proc(m,NF,MOrd)
NF[m]:=NormalForm(m,GB[org],M[org])
end proc:
FDproc:=proc(M,NF)
local ind_lst,term,eta,sol;
ind_lst:=map(op,[indices(NF)]);
for term in M do
ind_lst:=remove(divide,ind_lst,term)
end do;
expand(numer(normal(add(eta[term]*NF[term],term=ind_lst))));
sol:=[solve({coeffs(%,{x,y,z,t})},{seq(eta[term],term=ind_lst)})];
subs(op(1,sol),add(eta[term]*term,term=ind_lst));
`if`(%=0,FAIL,collect(primpart(numer(subs(map(n->n=1,
map2(op,1,select(evalb,sol[1]))),%)),[x,y,z,t]),
[x,y,z,t],distributed,factor))
end proc:
TMproc:=proc(border,monoideal,MOrd)
border<>[]
end proc:
M[new]:=MonomialOrder(A,tdeg(x,y,z,t)):
fglm:=[MultivariateCyclicVector(NFproc,FDproc,TMproc,M[new])]:
|
順序の変換を行い、目的の Groebner 基底が得られます。
>
|
map(op,[entries(fglm[2])]);
|
| (2.3) |
従属性の計算
|
P[n](x) を n 番目の Legendre 多項式 とし、phi(x, y) を Legendre 多項式を定義した関数としたとき、それらの積 phi(x,y)*P[n](x) を定義する方程式を見つけます。
|
>
|
phi:=1/sqrt(1-2*x*y+y^2);
|
| (2.4) |
P[n](x) の導関数 Q[n](x) を計算します。
>
|
`diff/P`:=proc(x,v) Q[op(1,procname)](x)*diff(args) end proc:
|
Q[n](x) の導関数を計算します。
>
|
`diff/Q`:=proc(x,v)
local n;
n:=op(1,procname);
(2*x*Q[n](x)-n*(n+1)*P[n](x))*diff(args)/(1-x^2)
end proc:
|
P[n](x) と Q[n](x) をシフトします。
>
|
P[n+2](x):=((2*n+3)*x*P[n+1](x)-(n+1)*P[n](x))/(n+2);
|
| (2.5) |
>
|
Q[n+1](x):=(n+1)*(P[n](x)-x*Q[n](x))/(1-x^2);
|
| (2.6) |
phi, P, Q を定義するため Ore 代数と単項式順序を定義します。
>
|
A:=skew_algebra(shift=[Sn,n],diff=[Dx,x],diff=[Dy,y]):
M:=MonomialOrder(A,tdeg(Sn,Dx,Dy)):
|
MultivariateCyclicVector を呼ぶために NFproc と FDproc を定義します。
>
|
NFproc:=proc(t,NF,MOrd)
NF[t]:=normal(eval(subs(n=n+degree(t,Sn),
diff(P[n](x)*phi,[x$degree(t,Dx),y$degree(t,Dy)]))))
end proc:
FDproc:=proc(M,NF)
local ind_lst,t,eta,sol;
ind_lst:=map(op,[indices(NF)]);
for t in M do
ind_lst:=remove(divide,ind_lst,t)
end do;
expand(numer(normal(add(eta[t]*NF[t],t=ind_lst))));
coeffs(%,[P[n](x),P[n+1](x),Q[n](x)]);
sol:=[solve({%},{seq(eta[t],t=ind_lst)})];
subs(op(1,sol),add(eta[t]*t,t=ind_lst));
`if`(%=0,FAIL,collect(primpart(numer(subs(map(n->n=1,
map2(op,1,select(evalb,sol[1]))),%)),[Dx,Dy,Sn]),
[Dx,Dy,Sn],distributed,factor))
end proc:
TMproc:=proc(border,monoideal,MOrd)
border<>[]
end proc:
|
phi(x,y)*P[n](x) によって満たされる方程式を計算します。
>
|
fglm:=[MultivariateCyclicVector(NFproc,FDproc,TMproc,M)]:
map(op,[entries(fglm[2])]);
|
| (2.7) |
>
|
normal(eval(map(applyopr,%,phi*P[n](x),A)));
|
| (2.8) |
|
|
参考文献
|
|
|
J.-C. Faugere, P. Gianni, D. Lazard and T. Mora, "Efficient computation of zero-dimensional Grobner bases by change of ordering." J. Symbolic Comput., 16 (1993), 329-344.
|
|
|