[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
gr
, hgr
, gr_mod
, dgr
:: グレブナ基底の計算
リスト
リスト
数, リストまたは行列
2^27 未満の素数
nd_gr
系の関数を代わりに利用すべきである(nd_gr
, nd_gr_trace
, nd_f4
, nd_f4_trace
, nd_weyl_gr
, nd_weyl_gr_trace
).
gr()
, hgr()
は 有理数係数, gr_mod()
は GF(p) 係数として計算する.
gr()
, trace-lifting (モジュラ演算を用いた高速化) および sugar
strategy による計算, hgr()
は trace-lifting および
斉次化による 矯正された sugar strategy による計算を行う.
dgr()
は, gr()
, hgr()
を
子プロセスリスト procs の 2 つのプロセスにより同時に計算させ,
先に結果を返した方の結果を返す. 結果は同一であるが, どちらの方法が
高速か一般には不明のため, 実際の経過時間を短縮するのに有効である.
dgr()
で表示される時間は, この函数が実行されているプロセスでの
CPU 時間であり, この函数の場合はほとんど通信のための時間である.
dp_sort
で
ソートされてから計算される.
多項式リストの要素が分散表現多項式の場合も
変数の数分の不定元のリストを vlist 引数として与えないといけない
(ダミー).
[0] load("gr")$ [64] load("cyclic")$ [74] G=gr(cyclic(5),[c0,c1,c2,c3,c4],2); [c4^15+122*c4^10-122*c4^5-1,...] [75] GM=gr_mod(cyclic(5),[c0,c1,c2,c3,c4],2,31991)$ 24628*c4^15+29453*c4^10+2538*c4^5+7363 [76] (G[0]*24628-GM[0])%31991; 0
dp_gr_main
, dp_gr_mod_main
, dp_gr_f_main
, dp_weyl_gr_main
, dp_weyl_gr_mod_main
, dp_weyl_gr_f_main
,
dp_ord
.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
lex_hensel
, lex_tl
, tolex
, tolex_d
, tolex_tl
:: 基底変換による辞書式順序グレブナ基底の計算
:: グレブナ基底を入力とする, 基底変換による辞書式順序グレブナ基底の計算
リスト
リスト
数, リストまたは行列
フラグ
lex_hensel()
, lex_tl()
は,
多項式リスト plist の, 変数順序 vlist1, 項順序型
order に関するグレブナ基底を求め, それを, 変数順序 vlist2
の辞書式順序グレブナ基底に変換する.
tolex()
, tolex_tl()
は,
変数順序 vlist1, 項順序型 order に関するグレブナ基底である
多項式リスト plist を変数順序 vlist2 の辞書式順序グレブナ
基底に変換する.
tolex_d()
は, tolex()
における, 各基底の計算を, 子プロセス
リスト procs の各プロセスに分散計算させる.
lex_hensel()
, lex_tl()
においては, 辞書式順序グレブナ基底の
計算は次のように行われる. ([Noro,Yokoyama]
参照.)
lex_hensel()
のみ. )
lex_tl()
, tolex_tl()
においては, 辞書式順序グレブナ基底の
計算は次のように行われる.
lex_hensel()
のみ. )
lex_tl()
, tolex_tl()
のみ受け付ける.
homo
が 0 でない場合, 内部で起動される Buchberger アルゴリズムに
おいて, 斉次化が行われる.
tolex_d()
で表示される時間は, この函数が実行されているプロセスに
おいて行われた計算に対応していて, 子プロセスにおける時間は含まれない.
[78] K=katsura(5)$ 30msec + gc : 20msec [79] V=[u5,u4,u3,u2,u1,u0]$ 0msec [80] G0=hgr(K,V,2)$ 91.558sec + gc : 15.583sec [81] G1=lex_hensel(K,V,0,V,0)$ 49.049sec + gc : 9.961sec [82] G2=lex_tl(K,V,0,V,1)$ 31.186sec + gc : 3.500sec [83] gb_comp(G0,G1); 1 10msec [84] gb_comp(G0,G2); 1
dp_gr_main
, dp_gr_mod_main
, dp_gr_f_main
, dp_weyl_gr_main
, dp_weyl_gr_mod_main
, dp_weyl_gr_f_main
,
dp_ord
, 分散計算
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
lex_hensel_gsl
, tolex_gsl
, tolex_gsl_d
:: GSL 形式のイデアル基底の計算
:: グレブナ基底を入力とする, GSL 形式のイデアル基底の計算
リスト
リスト
数, リストまたは行列
フラグ
lex_hensel_gsl()
は lex_hensel()
の, tolex_gsl()
は
tolex()
の変種で, 結果のみが異なる.
tolex_gsl_d()
は, 基底計算を, procs
で指定される子プロセスに
分散計算させる.
[f0,x1-f1,...,xn-fn]
(f0
,...,fn
は
x0
の 1 変数多項式) なる形 (これを SL 形式と呼ぶ) を持つ場合,
[[x1,g1,d1],...,[xn,gn,dn],[x0,f0,f0']]
なるリスト (これを GSL 形式と呼ぶ)
を返す.
ここで, gi
は, di*f0'*fi-gi
が f0
で割り切れるような
x0
の1 変数多項式で,
解は f0(x0)=0
なる x0
に対し, [x1=g1/(d1*f0'),...,xn=gn/(dn*f0')]
となる. 辞書式順序グレブナ基底が上のような形でない場合, tolex()
に
よる通常のグレブナ基底を返す.
tolex_gsl_d()
で表示される時間は, この函数が実行されているプロセスに
おいて行われた計算に対応していて, 子プロセスにおける時間は含まれない.
[103] K=katsura(5)$ [104] V=[u5,u4,u3,u2,u1,u0]$ [105] G0=gr(K,V,0)$ [106] GSL=tolex_gsl(G0,V,0,V)$ [107] GSL[0]; [u1,8635837421130477667200000000*u0^31-...] [108] GSL[1]; [u2,10352277157007342793600000000*u0^31-...] [109] GSL[5]; [u0,11771021876193064124640000000*u0^32-..., 376672700038178051988480000000*u0^31-...]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
gr_minipoly
, minipoly
:: 多項式の, イデアルを法とした最小多項式の計算
:: グレブナ基底を入力とする, 多項式の最小多項式の計算
多項式
リスト
数, リストまたは行列
多項式
不定元
フラグ
gr_minipoly()
はグレブナ基底の計算から行い, minipoly()
は
入力をグレブナ基底とみなす.
gr_minipoly()
, minipoly()
は, 多項式 p の最小多項式
を求め, v を変数とする多項式として返す.
minipoly()
, gr_minipoly()
は
グレブナ基底を用いる方法に比べて効率がよい.
gr_minipoly()
に指定する項順序としては, 通常全次数逆辞書式順序を
用いる.
[117] G=tolex(G0,V,0,V)$ 43.818sec + gc : 11.202sec [118] GSL=tolex_gsl(G0,V,0,V)$ 17.123sec + gc : 2.590sec [119] MP=minipoly(G0,V,0,u0,z)$ 4.370sec + gc : 780msec
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
tolexm
, minipolym
:: 法 mod での基底変換によるグレブナ基底計算
:: 法 mod でのグレブナ基底による多項式の最小多項式の計算
tolexm()
: リスト, minipolym()
: 多項式
リスト
数, リストまたは行列
素数
minipolym()
は minipoly
に対応する計算を法 modで行う.
tolexm()
は FGLM 法による基底変換により vlist2,
辞書式順序によるグレブナ基底を計算する.
[197] tolexm(G0,V,0,V,31991); [8271*u0^31+10435*u0^30+816*u0^29+26809*u0^28+...,...] [198] minipolym(G0,V,0,u0,z,31991); z^32+11405*z^31+20868*z^30+21602*z^29+...
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_gr_main
, dp_gr_mod_main
, dp_gr_f_main
, dp_weyl_gr_main
, dp_weyl_gr_mod_main
, dp_weyl_gr_f_main
:: グレブナ基底の計算 (組み込み函数)
リスト
リスト
数, リストまたは行列
フラグ
フラグまたは素数
gr()
,
hgr()
, gr_mod()
などはすべてこれらの函数を呼び出して計算
を行っている. 関数名に weyl が入っているものは, Weyl 代数上の計算
のための関数である.
dp_gr_f_main()
, dp_weyl_f_main()
は, 種々の有限体上のグレブナ基底を計算する
場合に用いる. 入力は, あらかじめ, simp_ff()
などで,
考える有限体上に射影されている必要がある.
dp_gr_mod_main()
に対しては, modular は, GF(modular) 上
での計算を意味する.
dp_gr_main()
に対しては, modular は次のような意味を持つ.
lprime(0)
から順に成功するまで lprime()
を呼び出して生成する.
gr(P,V,O)
は dp_gr_main(P,V,0,1,O)
, hgr(P,V,O)
は
dp_gr_main(P,V,1,1,O)
, gr_mod(P,V,O,M)
は
dp_gr_mod_main(P,V,0,M,O)
をそれぞれ実行する.
dp_gr_flags()
で設定される
さまざまなフラグにより計算が制御される.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_f4_main
, dp_f4_mod_main
, dp_weyl_f4_main
, dp_weyl_f4_mod_main
:: F4 アルゴリズムによるグレブナ基底の計算 (組み込み函数)
リスト
リスト
数, リストまたは行列
dp_gr_main()
, dp_gr_mod_main()
,
dp_weyl_gr_main()
, dp_weyl_gr_mod_main()
と同様である.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
nd_gr
, nd_gr_trace
, nd_f4
, nd_f4_trace
, nd_weyl_gr
, nd_weyl_gr_trace
:: グレブナ基底の計算 (組み込み函数)
リスト
リスト
数, リストまたは行列
フラグ
フラグまたは素数
nd_gr
は, p
が 0 のとき有理数体上の Buchberger
アルゴリズムを実行する. p
が 2 以上の自然数のとき, GF(p) 上の
Buchberger アルゴリズムを実行する.
nd_gr_trace
および nd_f4_trace
は有理数体上で trace アルゴリズムを実行する.
p が 0 または 1 のとき, 自動的に選ばれた素数を用いて, 成功する
まで trace アルゴリズムを実行する.
p が 2 以上のとき, trace はGF(p) 上で計算される. trace アルゴリズム
が失敗した場合 0 が返される. p が負の場合, グレブナ基底チェックは
行わない. この場合, p が -1 ならば自動的に選ばれた素数が,
それ以外は指定された素数を用いてグレブナ基底候補の計算が行われる.
nd_f4_trace
は, 各全次数について, ある有限体上で F4 アルゴリズム
で行った結果をもとに, その有限体上で 0 でない基底を与える S-多項式のみを
用いて行列生成を行い, その全次数における基底を生成する方法である. 得られる
多項式集合はやはりグレブナ基底候補であり, nd_gr_trace
と同様の
チェックが行われる.
nd_f4
は modular
が 0 のとき有理数体上の, modular
が
マシンサイズ素数のとき有限体上の F4 アルゴリズムを実行する.
nd_weyl_gr
, nd_weyl_gr_trace
は Weyl 代数用である.
f4
系関数以外はすべて有理関数係数の計算が可能である.
dp_gr_main
, dp_gr_mod_main
より高速であるが,
特に有限体上の場合顕著である.
homo
1 のとき, 斉次化を経由して計算する. (nd_gr
, nd_f4
のみ)
dp
1 のとき, 分散表現多項式 (加群の場合には加群多項式) を結果として返す.
nora
1 のとき, 結果の相互簡約を行わない.
[38] load("cyclic")$ [49] C=cyclic(7)$ [50] V=vars(C)$ [51] cputime(1)$ [52] dp_gr_mod_main(C,V,0,31991,0)$ 26.06sec + gc : 0.313sec(26.4sec) [53] nd_gr(C,V,31991,0)$ ndv_alloc=1477188 5.737sec + gc : 0.1837sec(5.921sec) [54] dp_f4_mod_main(C,V,31991,0)$ 3.51sec + gc : 0.7109sec(4.221sec) [55] nd_f4(C,V,31991,0)$ 1.906sec + gc : 0.126sec(2.032sec)
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
nd_gr_postproc
, nd_weyl_gr_postproc
:: グレブナ基底候補のチェックおよび相互簡約
リスト または 0
リスト
素数または 0
数, リストまたは行列
0 または 1
nd_weyl_gr_postproc
は Weyl 代数用である.
afo
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_gr_flags
, dp_gr_print
:: 計算および表示用パラメタの設定, 参照
設定値
リスト
整数
dp_gr_main()
, dp_gr_mod_main()
, dp_gr_f_main()
実行時におけるさまざま
なパラメタを設定, 参照する.
["Print",1,"NoSugar",1,...]
なる形のリストで, 左から順に
設定される. パラメタ名は文字列で与える必要がある.
dp_gr_print()
は, 特にパラメタ Print
, PrintShort
の値を直接設定, 参照
できる. 設定される値は次の通りである。
Print=0
, PrintShort=0
Print=1
, PrintShort=0
Print=0
, PrintShort=1
これは, dp_gr_main()
などをサブルーチンとして用いるユーザ
函数において, そのサブルーチンが中間情報の表示
を行う際に, 迅速にフラグを見ることができるように用意されている.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_ord
:: 変数順序型の設定, 参照
変数順序型 (数, リストまたは行列)
数, リストまたは行列
gr()
など, 引数として変数順序型をとるものは, 内部で dp_ord()
を呼び出し, 変数順序型を設定する. この設定は, 計算終了後も生き残る.
[0,Ord]
の場合,
多項式環上で Ord
で指定される項順序に基づく TOP 順序, 引数が [1,Ord]
の場合
OPT 順序を設定する.
[19] dp_ord(0)$ [20] <<1,2,3>>+<<3,1,1>>; (1)*<<1,2,3>>+(1)*<<3,1,1>> [21] dp_ord(2)$ [22] <<1,2,3>>+<<3,1,1>>; (1)*<<3,1,1>>+(1)*<<1,2,3>>
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_set_weight
, dp_set_top_weight
, dp_weyl_set_weight
:: sugar weight の設定, 参照
:: top weight の設定, 参照
:: weyl weight の設定, 参照
ベクトル
整数のリストまたはベクトル
dp_set_weight
は sugar weight を weight に設定する. 引数がない時,
現在設定されている sugar weight を返す. sugar weight は正整数を成分とするベクトルで,
各変数の重みを表す. 次数つき順序において, 単項式の次数を計算する際に用いられる.
斉次化変数用に, 末尾に 1 を付け加えておくと安全である.
dp_set_top_weight
は top weight を weight に設定する. 引数がない時,
現在設定されている top weight を返す. top weight が設定されているとき,
まず top weight による単項式比較を先に行う. tie breaker として現在設定されている
項順序が用いられるが, この比較には top weight は用いられない.
dp_weyl_set_weight
は weyl weight を weight に設定する. 引数がない時,
現在設定されている weyl weight を返す. weyl weight w を設定すると,
項順序型 11 での計算において, (-w,w) を top weight, tie breaker を graded reverse lex
とした項順序が設定される.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_ptod
:: 多項式を分散表現多項式に変換する.
分散表現多項式
多項式
リスト
[50] dp_ord(0); 1 [51] dp_ptod((x+y+z)^2,[x,y,z]); (1)*<<2,0,0>>+(2)*<<1,1,0>>+(1)*<<0,2,0>>+(2)*<<1,0,1>>+(2)*<<0,1,1>> +(1)*<<0,0,2>> [52] dp_ptod((x+y+z)^2,[x,y]); (1)*<<2,0>>+(2)*<<1,1>>+(1)*<<0,2>>+(2*z)*<<1,0>>+(2*z)*<<0,1>> +(z^2)*<<0,0>>
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dpm_dptodpm
:: 分散表現多項式を加群多項式に変換する.
加群多項式
分散表現多項式
正整数
dpoly e_pos
である.
[50] dp_ord([0,0])$ [51] D=dp_ptod((x+y+z)^2,[x,y,z]); (1)*<<2,0,0>>+(2)*<<1,1,0>>+(1)*<<0,2,0>>+(2)*<<1,0,1>>+(2)*<<0,1,1>> +(1)*<<0,0,2>> [52] dp_dptodpm(D,2); (1)*<<2,0,0:2>>+(2)*<<1,1,0:2>>+(1)*<<0,2,0:2>>+(2)*<<1,0,1:2>> +(2)*<<0,1,1:2>>+(1)*<<0,0,2:2>>
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dpm_ltod
:: 多項式リストを加群多項式に変換する.
加群多項式
多項式リスト
変数リスト
[p1,...,pm]
は p1 e1+...+pm em
に変換される.
[2126] dp_ord([0,0])$ [2127] dpm_ltod([x^2+y^2,x,y-z],[x,y,z]); (1)*<<2,0,0:1>>+(1)*<<0,2,0:1>>+(1)*<<1,0,0:2>>+(1)*<<0,1,0:3>> +(-1)*<<0,0,1:3>>
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dpm_dtol
:: 加群多項式を多項式リストに変換する.
多項式リスト
加群多項式
変数リスト
p1 e1+...+pm em
は [p1,...,pm]
に変換される.
poly
に含まれる標準基底の最大インデックスとなる.
[2126] dp_ord([0,0])$ [2127] D=(1)*<<2,0,0:1>>+(1)*<<0,2,0:1>>+(1)*<<1,0,0:2>>+(1)*<<0,1,0:3>> +(-1)*<<0,0,1:3>>$ [2128] dpm_dtol(D,[x,y,z]); [x^2+y^2,x,y-z]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_dtop
:: 分散表現多項式を多項式に変換する.
多項式
分散表現多項式
リスト
[53] T=dp_ptod((x+y+z)^2,[x,y]); (1)*<<2,0>>+(2)*<<1,1>>+(1)*<<0,2>>+(2*z)*<<1,0>>+(2*z)*<<0,1>> +(z^2)*<<0,0>> [54] P=dp_dtop(T,[a,b]); z^2+(2*a+2*b)*z+a^2+2*b*a+b^2
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_mod
, dp_rat
:: 有理数係数分散表現多項式の有限体係数への変換
:: 有限体係数分散表現多項式の有理数係数への変換
分散表現多項式
分散表現多項式
素数
リスト
dp_nf_mod()
, dp_true_nf_mod()
は, 入力として有限体係数の
分散表現多項式を必要とする. このような場合, dp_mod()
により
有理数係数分散表現多項式を変換して用いることができる. また, 得られた
結果は, 有限体係数多項式とは演算できるが, 有理数係数多項式とは演算できない
ため, dp_rat()
により変換する必要がある.
setmod()
により有限体の元の
個数を指定しておく必要がある.
[[var,value],...]
の形のリストである.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_homo
, dp_dehomo
:: 分散表現多項式の斉次化
:: 斉次分散表現多項式の非斉次化
分散表現多項式
分散表現多項式
dp_homo()
は, dpoly の 各項 t について, 指数ベクトルの長さを
1 伸ばし, 最後の成分の値を d-deg(t)
(d は dpoly の全次数) とした分散表現多項式を返す.
dp_dehomo()
は, dpoly の各項について, 指数ベクトルの最後の成分
を取り除いた分散多項式を返す.
hgr()
などにおいて, 内部的に用いられている.
[202] X=<<1,2,3>>+3*<<1,2,1>>; (1)*<<1,2,3>>+(3)*<<1,2,1>> [203] dp_homo(X); (1)*<<1,2,3,0>>+(3)*<<1,2,1,2>> [204] dp_dehomo(@); (1)*<<1,2,3>>+(3)*<<1,2,1>>
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_ptozp
, dp_prim
:: 定数倍して係数を整数係数かつ係数の整数 GCD を 1 にする.
:: 有理式倍して係数を整数係数多項式係数かつ係数の多項式 GCD を 1 にする.
分散表現多項式
分散表現多項式
dp_ptozp()
は, ptozp()
に相当する操作を分散表現多項式に
対して行う. 係数が多項式を含む場合, 係数に含まれる多項式共通因子は
取り除かない.
dp_prim()
は, 係数が多項式を含む場合, 係数に含まれる多項式共通因子
を取り除く.
[208] X=dp_ptod(3*(x-y)*(y-z)*(z-x),[x]); (-3*y+3*z)*<<2>>+(3*y^2-3*z^2)*<<1>>+(-3*z*y^2+3*z^2*y)*<<0>> [209] dp_ptozp(X); (-y+z)*<<2>>+(y^2-z^2)*<<1>>+(-z*y^2+z^2*y)*<<0>> [210] dp_prim(X); (1)*<<2>>+(-y-z)*<<1>>+(z*y)*<<0>>
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_nf
, dp_nf_mod
, dp_true_nf
, dp_true_nf_mod
, dp_weyl_nf
, dp_weyl_nf_mod
:: 分散表現多項式の正規形を求める. (結果は定数倍されている可能性あり)
:: 分散表現多項式の正規形を求める. (真の結果を [分子, 分母]
の形で返す)
dp_nf()
: 分散表現多項式, dp_true_nf()
: リスト
リスト
分散表現多項式
配列
フラグ
素数
dp_nf_mod()
, dp_true_nf_mod()
の入力は, dp_mod()
など
により, 有限体上の分散表現多項式になっていなければならない.
dp_nf()
は
真の値の定数倍の値を返す. 有理式係数の場合の dp_nf_mod()
も同様
であるが, 係数体が有限体の場合 dp_nf_mod()
は真の値を返す.
dp_true_nf()
, dp_true_nf_mod()
は,
[nm,dn]
なる形のリストを返す.
ただし, nm は係数に分数, 有理式を含まない分散表現多項式, dn は
数または多項式で nm/dn が真の値となる.
p_nf
, p_true_nf
を
用いるとよい.
[0] load("gr")$ [64] load("katsura")$ [69] K=katsura(4)$ [70] dp_ord(2)$ [71] V=[u0,u1,u2,u3,u4]$ [72] DP1=newvect(length(K),map(dp_ptod,K,V))$ [73] G=gr(K,V,2)$ [74] DP2=newvect(length(G),map(dp_ptod,G,V))$ [75] T=dp_ptod((u0-u1+u2-u3+u4)^2,V)$ [76] dp_dtop(dp_nf([0,1,2,3,4],T,DP1,1),V); u4^2+(6*u3+2*u2+6*u1-2)*u4+9*u3^2+(6*u2+18*u1-6)*u3+u2^2 +(6*u1-2)*u2+9*u1^2-6*u1+1 [77] dp_dtop(dp_nf([4,3,2,1,0],T,DP1,1),V); -5*u4^2+(-4*u3-4*u2-4*u1)*u4-u3^2-3*u3-u2^2+(2*u1-1)*u2-2*u1^2-3*u1+1 [78] dp_dtop(dp_nf([0,1,2,3,4],T,DP2,1),V); -11380879768451657780886122972730785203470970010204714556333530492210 456775930005716505560062087150928400876150217079820311439477560587583 488*u4^15+... [79] dp_dtop(dp_nf([4,3,2,1,0],T,DP2,1),V); -11380879768451657780886122972730785203470970010204714556333530492210 456775930005716505560062087150928400876150217079820311439477560587583 488*u4^15+... [80] @78==@79; 1
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dpm_nf
, dpm_nf_and_quotient
:: 加群多項式の正規形を求める. (結果は定数倍されている可能性あり)
:: 加群多項式の正規形と商を求める.
dpm_nf()
: 加群多項式, dpm_nf_and_quotient()
: リスト
リスト
加群多項式
配列
dpm_nf()
は
真の値の定数倍の値を返す.
dpm_nf_and_quotient()
は,
[nm,dn,quo]
なる形のリストを返す.
ただし, nm は係数に分数を含まない加群多項式, dn は
数または多項式で nm/dn が真の値となる.
quo は除算の商を表す配列で, dndpoly=nm+quo[0]dpolyarray[0]+... が成り立つ.
のリスト.
[2126] dp_ord([1,0])$ [2127] S=ltov([(1)*<<0,0,2,0:1>>+(1)*<<0,0,1,1:1>>+(1)*<<0,0,0,2:1>> +(-1)*<<3,0,0,0:2>>+(-1)*<<0,0,2,1:2>>+(-1)*<<0,0,1,2:2>> +(1)*<<3,0,1,0:3>>+(1)*<<3,0,0,1:3>>+(1)*<<0,0,2,2:3>>, (-1)*<<0,1,0,0:1>>+(-1)*<<0,0,1,0:1>>+(-1)*<<0,0,0,1:1>> +(-1)*<<3,0,0,0:3>>+(1)*<<0,1,1,1:3>>,(1)*<<0,1,0,0:2>> +(1)*<<0,0,1,0:2>>+(1)*<<0,0,0,1:2>>+(-1)*<<0,1,1,0:3>> +(-1)*<<0,1,0,1:3>>+(-1)*<<0,0,1,1:3>>])$ [2128] U=dpm_sp(S[0],S[1]); (1)*<<0,0,3,0:1>>+(-1)*<<0,1,1,1:1>>+(1)*<<0,0,2,1:1>> +(-1)*<<0,1,0,2:1>>+(1)*<<3,1,0,0:2>>+(1)*<<0,1,2,1:2>> +(1)*<<0,1,1,2:2>>+(-1)*<<3,1,1,0:3>>+(1)*<<3,0,2,0:3>> +(-1)*<<3,1,0,1:3>>+(-1)*<<0,1,3,1:3>>+(-1)*<<0,1,2,2:3>> [2129] dpm_nf(U,S,1); 0 [2130] L=dpm_nf_and_quotient(U,S)$ [2131] Q=L[2]$ [2132] D=L[1]$ [2133] D*U-(Q[1]*S[1]+Q[2]*S[2]); 0
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_hm
, dp_ht
, dp_hc
, dp_rest
:: 頭単項式を取り出す.
:: 頭項を取り出す.
:: 頭係数を取り出す.
:: 頭単項式を取り除いた残りを返す.
dp_hm()
, dp_ht()
, dp_rest()
: 分散表現多項式,
dp_hc()
: 数または多項式
分散表現多項式
p = dp_hm(p) + dp_rest(p)
dp_hm(p) = dp_hc(p) dp_ht(p)
[87] dp_ord(0)$ [88] X=ptozp((a46^2+7/10*a46+7/48)*u3^4-50/27*a46^2-35/27*a46-49/216)$ [89] T=dp_ptod(X,[u3,u4,a46])$ [90] dp_hm(T); (2160)*<<4,0,2>> [91] dp_ht(T); (1)*<<4,0,2>> [92] dp_hc(T); 2160 [93] dp_rest(T); (1512)*<<4,0,1>>+(315)*<<4,0,0>>+(-4000)*<<0,0,2>>+(-2800)*<<0,0,1>> +(-490)*<<0,0,0>>
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dpm_hm
, dpm_ht
, dpm_hc
, dpm_hp
, dpm_rest
:: 加群多項式の頭単項式を取り出す.
:: 加群多項式の頭項を取り出す.
:: 加群多項式の頭係数を取り出す.
:: 加群多項式の頭位置を取り出す.
:: 加群多項式の頭単項式を取り除いた残りを返す.
dp_hm()
, dp_ht()
, dp_rest()
: 加群多項式,
dp_hc()
: 数または多項式
加群多項式
dpm_hc()
は, dpm_hm()
の, 標準基底に関する係数である単項式を返す.
スカラー係数を取り出すには, さらに dp_hc()
を実行する.
dpm_hp()
は, 頭加群単項式に含まれる標準基底のインデックスを返す.
[2126] dp_ord([1,0]); [1,0] [2127] F=2*<<1,2,0:2>>-3*<<1,0,2:3>>+<<2,1,0:2>>; (1)*<<2,1,0:2>>+(2)*<<1,2,0:2>>+(-3)*<<1,0,2:3>> [2128] M=dpm_hm(F); (1)*<<2,1,0:2>> [2129] C=dpm_hc(F); (1)*<<2,1,0>> [2130] R=dpm_rest(F); (2)*<<1,2,0:2>>+(-3)*<<1,0,2:3>> [2131] dpm_hp(F); 2
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_td
, dp_sugar
:: 頭項の全次数を返す.
:: 多項式の sugar
を返す.
自然数
分散表現多項式
フラグ
dp_td()
は, 頭項の全次数, すなわち各変数の指数の和を返す.
sugar
と呼ばれるある整数が付与
される. この値は 仮想的に斉次化して計算した場合に結果が持つ全次数の値となる.
sugar
は, グレブナ基底計算における正規化対の選択のストラテジを
決定するための重要な指針となる.
[74] dp_ord(0)$ [75] X=<<1,2>>+<<0,1>>$ [76] Y=<<1,2>>+<<1,0>>$ [77] Z=X-Y; (-1)*<<1,0>>+(1)*<<0,1>> [78] dp_sugar(T); 3
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_lcm
:: 最小公倍項を返す.
分散表現多項式
分散表現多項式
[100] dp_lcm(<<1,2,3,4,5>>,<<5,4,3,2,1>>); (1)*<<5,4,3,4,5>>
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_redble
:: 頭項どうしが整除可能かどうか調べる.
整数
分散表現多項式
[148] C; (1)*<<1,1,1,0,0>>+(1)*<<0,1,1,1,0>>+(1)*<<1,1,0,0,1>>+(1)*<<1,0,0,1,1>> [149] T; (3)*<<2,1,0,0,0>>+(3)*<<1,2,0,0,0>>+(1)*<<0,3,0,0,0>>+(6)*<<1,1,1,0,0>> [150] for ( ; T; T = dp_rest(T)) print(dp_redble(T,C)); 0 0 0 1
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dpm_redble
:: 頭項どうしが整除可能かどうか調べる.
整数
加群多項式
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_subd
:: 頭項の商単項式を返す.
分散表現多項式
分散表現多項式
dp_ht(dpoly1)/dp_ht(dpoly2)
を求める. 結果の係数は 1
である.
[162] dp_subd(<<1,2,3,4,5>>,<<1,1,2,3,4>>); (1)*<<0,1,1,1,1>>
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_vtoe
, dp_etov
:: 指数ベクトルを項に変換
:: 頭項を指数ベクトルに変換
dp_vtoe
: 分散表現多項式, dp_etov
: ベクトル
ベクトル
分散表現多項式
dp_vtoe()
は, ベクトル vect を指数ベクトルとする項を生成する.
dp_etov()
は, 分散表現多項式 dpoly
の頭項の指数ベクトルを
ベクトルに変換する.
[211] X=<<1,2,3>>; (1)*<<1,2,3>> [212] V=dp_etov(X); [ 1 2 3 ] [213] V[2]++$ [214] Y=dp_vtoe(V); (1)*<<1,2,4>>
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_mbase
:: monomial 基底の計算
分散表現多項式のリスト
分散表現多項式のリスト
[215] K=katsura(5)$ [216] V=[u5,u4,u3,u2,u1,u0]$ [217] G0=gr(K,V,0)$ [218] H=map(dp_ptod,G0,V)$ [219] map(dp_ptod,dp_mbase(H),V)$ [u0^5,u4*u0^3,u3*u0^3,u2*u0^3,u1*u0^3,u0^4,u3^2*u0,u2*u3*u0,u1*u3*u0, u1*u2*u0,u1^2*u0,u4*u0^2,u3*u0^2,u2*u0^2,u1*u0^2,u0^3,u3^2,u2*u3,u1*u3, u1*u2,u1^2,u4*u0,u3*u0,u2*u0,u1*u0,u0^2,u4,u3,u2,u1,u0,1]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_mag
:: 係数のビット長の和を返す
数
分散表現多項式
dp_gr_flags()
で, ShowMag
, Print
を on にすることにより
途中生成される多項式にたいする dp_mag()
の値を見ることができる.
[221] X=dp_ptod((x+2*y)^10,[x,y])$ [222] dp_mag(X); 115
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_red
, dp_red_mod
:: 一回の簡約操作
リスト
分散表現多項式
リスト
素数
dp_red_mod()
の入力は, 全て有限体係数に変換されている必要がある.
[a dpoly1,a dpoly2 - bt dpoly3]
なるリストである.
[157] D=(3)*<<2,1,0,0,0>>+(3)*<<1,2,0,0,0>>+(1)*<<0,3,0,0,0>>; (3)*<<2,1,0,0,0>>+(3)*<<1,2,0,0,0>>+(1)*<<0,3,0,0,0>> [158] R=(6)*<<1,1,1,0,0>>; (6)*<<1,1,1,0,0>> [159] C=12*<<1,1,1,0,0>>+(1)*<<0,1,1,1,0>>+(1)*<<1,1,0,0,1>>; (12)*<<1,1,1,0,0>>+(1)*<<0,1,1,1,0>>+(1)*<<1,1,0,0,1>> [160] dp_red(D,R,C); [(6)*<<2,1,0,0,0>>+(6)*<<1,2,0,0,0>>+(2)*<<0,3,0,0,0>>, (-1)*<<0,1,1,1,0>>+(-1)*<<1,1,0,0,1>>]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dp_sp
, dp_sp_mod
:: S-多項式の計算
分散表現多項式
分散表現多項式
素数
dp_sp_mod()
の入力は, 全て有限体係数に変換されている必要がある.
[227] X=dp_ptod(x^2*y+x*y,[x,y]); (1)*<<2,1>>+(1)*<<1,1>> [228] Y=dp_ptod(x*y^2+x*y,[x,y]); (1)*<<1,2>>+(1)*<<1,1>> [229] dp_sp(X,Y); (-1)*<<2,1>>+(1)*<<1,2>>
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dpm_sp
:: S-多項式の計算
加群多項式またはリスト
加群多項式 分散表現多項式
[S,t1,t2]
なるリストを返す.
ここで, t1
, t2
はS-多項式を作る際の係数単項式で S=t1 dpoly1-t2 dpoly2
を満たす.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dpm_schreyer_base
:: szygy 加群のグレブナー基底の計算
加群多項式リスト
加群多項式リスト
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dpm_schreyer_frame
:: Schreyer フレームの計算
加群単項式リストのリスト
加群多項式リスト
dpm_set_schreyer_level
により, 各レベルの Schreyer 順序を設定する際に用いられる.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dpm_set_schreyer_level
:: 指定されたレベルの Schreyer ordering の設定
非負整数
非負整数
dpm_set_schreyer_level
により, 各レベルの Schreyer 順序を設定する際に用いられる.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
dpm_sp_nf
:: S-多項式を多項式配列で割った余りの計算
加群単項式のリスト
加群多項式配列
整数リストの配列
整数
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
p_nf
, p_nf_mod
, p_true_nf
, p_true_nf_mod
:: 表現多項式の正規形を求める. (結果は定数倍されている可能性あり)
:: 表現多項式の正規形を求める. (真の結果を [分子, 分母]
の形で返す)
p_nf
: 多項式, p_true_nf
: リスト
多項式
リスト
数, リストまたは行列
素数
dp_nf()
, dp_true_nf()
, dp_nf_mod()
, dp_true_nf_mod
に対するインタフェースである.
dp_nf()
, dp_true_nf()
, dp_nf_mod()
,
dp_true_nf_mod()
に渡される.
dp_nf()
, dp_true_nf()
, dp_nf_mod()
,
dp_true_nf_mod()
は fullreduce が 1 で呼び出される.
p_true_nf()
, p_true_nf_mod()
の出力に関しては,
dp_true_nf()
, dp_true_nf_mod()
の項を参照.
[79] K = katsura(5)$ [80] V = [u5,u4,u3,u2,u1,u0]$ [81] G = hgr(K,V,2)$ [82] p_nf(K[1],G,V,2); 0 [83] L = p_true_nf(K[1]+1,G,V,2); [-1503...,-1503...] [84] L[0]/L[1]; 1
dp_ptod
,
dp_dtop
,
dp_ord
,
dp_nf
, dp_nf_mod
, dp_true_nf
, dp_true_nf_mod
, dp_weyl_nf
, dp_weyl_nf_mod
.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
p_terms
:: 多項式にあらわれる単項をリストにする.
リスト
多項式
リスト
数, リストまたは行列
[233] G=gr(katsura(5),[u5,u4,u3,u2,u1,u0],2)$ [234] p_terms(G[0],[u5,u4,u3,u2,u1,u0],2); [u5,u0^31,u0^30,u0^29,u0^28,u0^27,u0^26,u0^25,u0^24,u0^23,u0^22, u0^21,u0^20,u0^19,u0^18,u0^17,u0^16,u0^15,u0^14,u0^13,u0^12,u0^11, u0^10,u0^9,u0^8,u0^7,u0^6,u0^5,u0^4,u0^3,u0^2,u0,1]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
gb_comp
:: 多項式リストが, 符号を除いて集合として等しいかどうか調べる.
[243] C=cyclic(6)$ [244] V=[c0,c1,c2,c3,c4,c5]$ [245] G0=gr(C,V,0)$ [246] G=tolex(G0,V,0,V)$ [247] GG=lex_tl(C,V,0,V,0)$ [248] gb_comp(G,GG); 1
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
katsura
, hkatsura
, cyclic
, hcyclic
:: 多項式リストの生成
リスト
整数
katsura()
は ‘katsura’, cyclic()
は ‘cyclic’
で定義されている.
katsura
,
cyclic
およびその斉次化を生成する.
cyclic
は Arnborg
, Lazard
, Davenport
などの
名で呼ばれることもある.
[74] load("katsura")$ [79] load("cyclic")$ [89] katsura(5); [u0+2*u4+2*u3+2*u2+2*u1+2*u5-1,2*u4*u0-u4+2*u1*u3+u2^2+2*u5*u1, 2*u3*u0+2*u1*u4-u3+(2*u1+2*u5)*u2,2*u2*u0+2*u2*u4+(2*u1+2*u5)*u3 -u2+u1^2,2*u1*u0+(2*u3+2*u5)*u4+2*u2*u3+2*u1*u2-u1, u0^2-u0+2*u4^2+2*u3^2+2*u2^2+2*u1^2+2*u5^2] [90] hkatsura(5); [-t+u0+2*u4+2*u3+2*u2+2*u1+2*u5, -u4*t+2*u4*u0+2*u1*u3+u2^2+2*u5*u1,-u3*t+2*u3*u0+2*u1*u4+(2*u1+2*u5)*u2, -u2*t+2*u2*u0+2*u2*u4+(2*u1+2*u5)*u3+u1^2, -u1*t+2*u1*u0+(2*u3+2*u5)*u4+2*u2*u3+2*u1*u2, -u0*t+u0^2+2*u4^2+2*u3^2+2*u2^2+2*u1^2+2*u5^2] [91] cyclic(6); [c5*c4*c3*c2*c1*c0-1, ((((c4+c5)*c3+c5*c4)*c2+c5*c4*c3)*c1+c5*c4*c3*c2)*c0+c5*c4*c3*c2*c1, (((c3+c5)*c2+c5*c4)*c1+c5*c4*c3)*c0+c4*c3*c2*c1+c5*c4*c3*c2, ((c2+c5)*c1+c5*c4)*c0+c3*c2*c1+c4*c3*c2+c5*c4*c3, (c1+c5)*c0+c2*c1+c3*c2+c4*c3+c5*c4,c0+c1+c2+c3+c4+c5] [92] hcyclic(6); [-c^6+c5*c4*c3*c2*c1*c0, ((((c4+c5)*c3+c5*c4)*c2+c5*c4*c3)*c1+c5*c4*c3*c2)*c0+c5*c4*c3*c2*c1, (((c3+c5)*c2+c5*c4)*c1+c5*c4*c3)*c0+c4*c3*c2*c1+c5*c4*c3*c2, ((c2+c5)*c1+c5*c4)*c0+c3*c2*c1+c4*c3*c2+c5*c4*c3, (c1+c5)*c0+c2*c1+c3*c2+c4*c3+c5*c4,c0+c1+c2+c3+c4+c5]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
primadec
, primedec
:: イデアルの分解
多項式リスト
変数リスト
primadec()
, primedec
は ‘primdec’ で定義されている.
primadec()
, primedec()
はそれぞれ有理数体上でのイデアルの
準素分解, 根基の素イデアル分解を行う.
primadec
は [準素成分, 付属素イデアル]
のリストを返す.
primadec
は 素因子のリストを返す.
PRIMAORD
, PRIMEORD
に格納されている.
primadec
は [Shimoyama,Yokoyama]
の準素分解アルゴリズム
を実装している.
primedec
を使う方がよい.
これは, 入力イデアルが根基イデアルでない場合に, primadec
の計算に余分なコストが必要となる場合があるからである.
[84] load("primdec")$ [102] primedec([p*q*x-q^2*y^2+q^2*y,-p^2*x^2+p^2*x+p*q*y, (q^3*y^4-2*q^3*y^3+q^3*y^2)*x-q^3*y^4+q^3*y^3, -q^3*y^4+2*q^3*y^3+(-q^3+p*q^2)*y^2],[p,q,x,y]); [[y,x],[y,p],[x,q],[q,p],[x-1,q],[y-1,p],[(y-1)*x-y,q*y^2-2*q*y-p+q]] [103] primadec([x,z*y,w*y^2,w^2*y-z^3,y^3],[x,y,z,w]); [[[x,z*y,y^2,w^2*y-z^3],[z,y,x]],[[w,x,z*y,z^3,y^3],[w,z,y,x]]]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
primedec_mod
:: イデアルの分解
多項式リスト
変数リスト
数, リストまたは行列
正整数
整数
primedec_mod()
は ‘primdec_mod’
で定義されている. [Yokoyama]
の素イデアル分解アルゴリズム
を実装している.
primedec_mod()
は有限体上でのイデアルの
根基の素イデアル分解を行い, 素イデアルのリストを返す.
primedec_mod()
は, GF(mod) 上での分解を与える.
結果の各成分の生成元は, 整数係数多項式である.
dp_gr_print(2)
を実行しておけばよい.
[0] load("primdec_mod")$ [246] PP444=[x^8+x^2+t,y^8+y^2+t,z^8+z^2+t]$ [247] primedec_mod(PP444,[x,y,z,t],0,2,1); [[y+z,x+z,z^8+z^2+t],[x+y,y^2+y+z^2+z+1,z^8+z^2+t], [y+z+1,x+z+1,z^8+z^2+t],[x+z,y^2+y+z^2+z+1,z^8+z^2+t], [y+z,x^2+x+z^2+z+1,z^8+z^2+t],[y+z+1,x^2+x+z^2+z+1,z^8+z^2+t], [x+z+1,y^2+y+z^2+z+1,z^8+z^2+t],[y+z+1,x+z,z^8+z^2+t], [x+y+1,y^2+y+z^2+z+1,z^8+z^2+t],[y+z,x+z+1,z^8+z^2+t]] [248]
modfctr
,
dp_gr_main
, dp_gr_mod_main
, dp_gr_f_main
, dp_weyl_gr_main
, dp_weyl_gr_mod_main
, dp_weyl_gr_f_main
,
項順序の設定.
dp_gr_flags
, dp_gr_print
.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
bfunction
, bfct
, generic_bfct
, ann
, ann0
:: b 関数の計算
:: 多項式のベキの annihilator の計算
多項式またはリスト
多項式
多項式リスト
変数リスト
bfunction(f)
, bfct(f)
は多項式 f の global b 関数 b(s)
を
計算する. b(s)
は, Weyl 代数 D
上の一変数多項式環 D[s]
の元 P(x,s)
が存在して, P(x,s)f^(s+1)=b(s)f^s
を満たすような
多項式 b(s)
の中で, 次数が最も低いものである.
generic_bfct(f,vlist,dvlist,weight)
は, plist で生成される D
の左イデアル I
の,
ウェイト weight に関する global b 関数を計算する.
vlist は x
-変数, vlist は対応する D
-変数
を順に並べる.
bfunction
と bfct
では用いているアルゴリズムが
異なる. どちらが高速かは入力による.
ann(f)
は, f^s
の annihilator ideal
の生成系を返す. ann(f)
は, [a,list]
なるリストを返す. ここで, a は f の b 関数の最小整数根,
list は ann(f)
の結果の s
$ に, a を
代入したものである.
[0] load("bfct")$ [216] bfunction(x^3+y^3+z^3+x^2*y^2*z^2+x*y*z); -9*s^5-63*s^4-173*s^3-233*s^2-154*s-40 [217] fctr(@); [[-1,1],[s+2,1],[3*s+4,1],[3*s+5,1],[s+1,2]] [218] F = [4*x^3*dt+y*z*dt+dx,x*z*dt+4*y^3*dt+dy, x*y*dt+5*z^4*dt+dz,-x^4-z*y*x-y^4-z^5+t]$ [219] generic_bfct(F,[t,z,y,x],[dt,dz,dy,dx],[1,0,0,0]); 20000*s^10-70000*s^9+101750*s^8-79375*s^7+35768*s^6-9277*s^5 +1278*s^4-72*s^3 [220] P=x^3-y^2$ [221] ann(P); [2*dy*x+3*dx*y^2,-3*dx*x-2*dy*y+6*s] [222] ann0(P); [-1,[2*dy*x+3*dx*y^2,-3*dx*x-2*dy*y-6]]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] |
この文書は12月 30, 2024にtexi2html 5.0を用いて生成されました。