Groebner[SuggestVariableOrder] - よい変数順序の選択
|
使い方
|
|
SuggestVariableOrder(J, X)
|
|
パラメータ
|
|
J
|
-
|
多項式のリストか集合、または PolynomialIdeal
|
X
|
-
|
(オプション) 変数のリストか集合
|
|
|
|
|
説明
|
|
•
|
SuggestVariableOrder コマンドは、plex や tdeg の Groebner 基底計算を高速に行える、よい変数の順序を、発見的選択を試みます。実際、悪い変数順序を用いると、もともと単純な問題でも解けなくなってしまうほど、変数の順序は計算効率に影響を与えるものです。変数はオプションの第 2 引数を用いることで明示的に指定できます。
|
•
|
発見的方法は、各変数の多項式の次数と係数の大きさに基づいています。この方法はいつも最適な順序を見つけるわけではなく、また、まれに悪い順序を選択する事もあります。
|
•
|
SuggestVariableOrder は Groebner[Basis] の第 2 引数が名前であり、既知の適当な基底がない場合、このコマンドによって呼び出されます。
|
|
|
例
|
|
最初の例は Trinks の問題からです。全次数の Groebner 基底を、変数順序を指定することなく計算します。Groebner[Basis] コマンドは SuggestVariableOrder を自動的に呼び出します。
>
|
trinks := [-9*w+15*p*t+20*z*s, 99*w-11*s*b+3*b^2, w*p+2*z*t-11*b^3, 45*p+35*s-165*b-36, 35*p+40*z+25*t-27*s, 15*w+25*p*s+30*z-18*t-165*b^2]:
|
>
|
G := Groebner[Basis](trinks, 'tord', order=tdeg):
|
| (4.1) |
続いて、辞書式順序の基底を、選択された変数順序、その逆、ばらばらに並べた という順序それぞれについて比較してみます。
>
|
V := SuggestVariableOrder(trinks);
|
| (4.2) |
>
|
G := Groebner[Basis](trinks, plex(V)):
|
| (4.3) |
>
|
map(length@maxnorm, G); # digits in the largest coefficient
|
| (4.4) |
>
|
V2 := seq(V[-i], i=1..6); # reverse the variables
|
| (4.5) |
>
|
G2 := Groebner[Basis](trinks, plex(V2)):
|
| (4.6) |
>
|
map(length@maxnorm, G2);
|
| (4.7) |
>
|
V3 := op(combinat[randperm]([V]));
|
| (4.8) |
>
|
G3 := Groebner[Basis](trinks, plex(V3)):
|
| (4.9) |
>
|
map(length@maxnorm, G3);
|
| (4.10) |
|
|
Download Help Document
Was this information helpful?