Groebner パッケージの詳細
使い方
Groebner[command](arguments)
command(arguments)
|
説明
|
|
•
|
このページでは、Groebner パッケージについての詳細を説明します。ただし、加群の Groebner 基底の計算についての説明は除きます。加群の Groebner 基底についての説明は Groebner Bases for Modules をご参照ください。Groebner パッケージに関する基本的な情報は Groebner ヘルプページをご参照ください。
|
•
|
Groebner パッケージは Weyl 代数、Ore 代数といった非可換代数や D-加群のような代数構造に対する Groebner 基底計算などをおこなうコマンドを集めたものです。もちろん、これらのコマンドは可換な多項式環といった構造に対してもお使いいただけます。
|
•
|
可換な場合、イデアル (あるいは加群) は両側イデアルとして、非可環な場合は左イデアル (または左加群) として扱うものとしています。このことは、非可換多項式が、左にある関数に対して作用するものとして扱うことに対応しています。
|
•
|
Groebner パッケージの各コマンドは、コマンド名の 長い名前 短い名前 いづれの呼び出し名でも呼び出すことができます。
|
|
|
例
|
|
短い記述と一般的な記述による単項式順序の呼び出しの比較
短い記述を用いた単項式順序呼び出しによる単純な Groebner 基底計算:
>
|
G:=map(numer,[s^2/(2*s+1)*x^2*y-(s+1)*y,(3*s-1)/3*x*y^2-1/(s-1)*x]):
Basis(G,tdeg(x,y));
|
| (3.1) |
一般的な記述を用いた、やや複雑な Groebner 基底計算:
>
|
with(Ore_algebra):
A:=poly_algebra(s,x,y,characteristic=3,rational=s):
T:=MonomialOrder(A,tdeg(x,y)):
Basis(G,T);
|
| (3.2) |
Lauricella 関数と偏微分方程式系
次の例は Lauricella 関数を用いた例です。この例では基礎体におけるパラメータを用いた D-加群の Groebner 基底計算の様子がわかります。
>
|
n:=2:
S:=add(x[i]*D[i],i=1..n);
|
| (3.3) |
>
|
A:=skew_algebra(comm={a,b,seq(c[i],i=1..n)},seq(diff=[D[i],x[i]],i=1..n),
polynom={seq(x[i],i=1..n)}):
P:=skew_product(S+a,S+b,A);
|
| (3.4) |
次の操作では、n というパラメータを導入しています。
>
|
for i to n do l[i]:=skew_product(D[i],x[i]*D[i]+c[i]-1,A)-P end do;
|
| (3.5) |
>
|
M:=MonomialOrder(A,lexdeg([seq(D[i],i=1..n)],[seq(x[i],i=1..n)])):
|
結果は 4 つの方程式による三階偏微分方程式系になります。
>
|
Basis([seq(l[i],i=1..n)],M);
|
| (3.6) |
Legendre 多項式と微分-差分線型方程式系
次の例では Legendre 多項式 を扱った例です: これは微分方程式と微分-差分方程式によって定義されており、Dx を消去することによって得られた微分方程式の解になっています。
>
|
unassign('n'):
DE:=(1-x^2)*Dx^2-2*x*Dx+n*(n+1);
|
| (3.7) |
>
|
RDE:=(1-x^2)*Dx*Sn+(n+1)*x*Sn-(n+1);
|
| (3.8) |
>
|
with(Ore_algebra):
A:=skew_algebra(diff=[Dx,x],shift=[Sn,n],polynom={x,n}):
with(Groebner):
M:=MonomialOrder(A,lexdeg([Dx],[n,x,Sn])):
G:=Basis([DE,RDE],M);
|
| (3.9) |
この計算を続けて、Legendre 多項式が解となることを示します。
>
|
Sum(orthopoly[P](n,z)*u^n,n=0..infinity)=1/sqrt(1-2*z*u+u^2);
|
| (3.10) |
実際、orthopoly[P](n,z)*u^n を足し合わせたものは新たな代数構造 C(z,u)[n][Dz,Du,Sn] において目的のものを満足します。
>
|
G:=map(numer@normal,subs(Sn=Sn/u,convert(G,set))) union {u*Du-n};
|
| (3.11) |
(足し合わせのインデックスが n であることから、この変数を消去するためにこの変数からなる多項式を考えます。)
| (3.12) |
>
|
A:=skew_algebra(diff=[Dx,x],diff=[Du,u],shift=[Sn,n],polynom=n):
M:=MonomialOrder(A,lexdeg([n],[Dx,Du,Sn])):
GB:=Basis(G,M);
|
Error, (in Groebner:-Basis) invalid arguments to coeffs
| |
前述の方程式は和の項によって満たされています。Sn=1 とすると和によって満足される方程式が得られます。最後の Groebner 基底計算はこれらの方程式系を返します :
>
|
GB:=Basis(eval(remove(has,GB,n),Sn=1),M):
|
Error, (in Groebner:-Basis) the first argument must be a
list or set of polynomials or a PolynomialIdeal
| |
>
|
collect(GB,{Dx,Du},distributed,factor);
|
| (3.13) |
この単純な偏微分方程式系を解くことによって前述の閉じた形が得られます。
|
|
参照
|
|
Groebner, Ore_algebra, Ore_algebra[poly_algebra], Ore_algebra[skew_algebra], Ore_algebra[Weyl_algebra], PolynomialIdeals, PolynomialIdeals Example Worksheet, PolynomialIdeals[PolynomialIdeal], RegularChains, Terminology Used in Groebner, UsingPackages, with
|
|