[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
newalg
:: root
を生成する.
代数的数 (root
)
多項式
root
) を生成する.
[0] A0=newalg(x^2-2); (#0)
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
defpoly
:: root
の定義多項式を返す.
多項式
代数的数 (root
)
root
alg の定義多項式を返す.
root
を #n
とすれば, 定義多項式の主変数は
t#n
となる.
[1] defpoly(A0); t#0^2-2
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
alg
:: インデックスに対応する root
を返す.
代数的数 (root
)
整数
root
#i
を返す.
#i
はユーザが直接入力できないため, alg(i)
と
いう形で入力する.
[2] x+#0; syntax error 0 [3] alg(0); (#0)
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
algv
:: alg(i)
に対応する不定元を返す.
多項式
整数
t#i
を返す.
t#i
はユーザが直接入力できないため, algv(i)
と
いう形で入力する.
[4] var(defpoly(A0)); t#0 [5] t#0; syntax error 0 [6] algv(0); t#0
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
simpalg
:: 有理式に含まれる代数的数を簡単化する.
有理式
有理式
root
の定義
多項式により簡単化する.
root
の多項式となる.
[7] simpalg((1+A0)/(1-A0)); simpalg undefined return to toplevel [7] load("sp")$ [46] simpalg((1+A0)/(1-A0)); (-2*#0-3) [47] simpalg((2-A0)/(2+A0)*x^2-1/(3+A0)); (-2*#0+3)*x^2+(1/7*#0-3/7) [48] simpalg((x+1/(A0-1))/(x-1/(A0+1))); (x+(#0+1))/(x+(-#0+1))
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
algptorat
:: 多項式に含まれる root
を, 対応する不定元に置き換える.
多項式
多項式
root
#n
を全て t#n
に
置き換える.
[49] algptorat((-2*alg(0)+3)*x^2+(1/7*alg(0)-3/7)); (-2*t#0+3)*x^2+1/7*t#0-3/7
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
rattoalgp
:: 多項式に含まれる root
に対応する不定元を root
に
置き換える.
多項式
多項式
リスト
root
のリストである. rattoalgp()
は, この root
に対応する不定元を, それぞれ root
に置き換える.
[51] rattoalgp((-2*algv(0)+3)*x^2+(1/7*algv(0)-3/7),[alg(0)]); (-2*#0+3)*x^2+(1/7*#0-3/7)
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
cr_gcda
:: 代数体上の 1 変数多項式の GCD
多項式
多項式
[76] X=x^6+3*x^5+6*x^4+x^3-3*x^2+12*x+16$ [77] Y=x^6+6*x^5+24*x^4+8*x^3-48*x^2+384*x+1024$ [78] A=newalg(X); (#0) [79] cr_gcda(X,subst(Y,x,x+A)); x+(-#0)
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
sp_norm
:: 代数体上でのノルムの計算
多項式
poly の主変数
1 変数多項式
root
root
のリスト
USE_RES
を 1 に設定することにより, 常に終結式により計算
させることができる.
[0] load("sp")$ [39] A0=newalg(x^2+1)$ [40] A1=newalg(x^2+A0)$ [41] sp_norm(A1,x,x^3+A0*x+A1,[A1,A0]); x^6+(2*#0)*x^4+(#0^2)*x^2+(#0) [42] sp_norm(A0,x,@@,[A0]); x^12+2*x^8+5*x^4+1
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
asq
, af
, af_noalg
:: 代数体上の 1 変数多項式の無平方分解
:: 代数体上の 1 変数多項式の因数分解
リスト
多項式
root
のリスト
root
を表す不定元と定義多項式のペアのリスト
root
を含まない場合は整数上の函数が呼び出され高速であるが,
root
を含む場合には, cr_gcda()
が起動されるためしばしば
時間がかかる.
af()
は, 基礎体の指定, すなわち第 2 引数の, root
のリスト
の指定が必要である.
alglist
で指定される root
は, 後で定義されたものほど前の
方に来なければならない.
af(F,AL)
において, AL
は代数的数のリストであり, 有理数体の
代数拡大を表す. AL=[An,...,A1]
と書くとき, 各 Ak
は, それより
右にある代数的数を係数とした, モニックな定義多項式で定義されていなければ
ならない.
[1] A1 = newalg(x^2+1); [2] A2 = newalg(x^2+A1); [3] A3 = newalg(x^2+A2*x+A1); [4] af(x^2+A2*x+A1,[A2,A1]); [[x^2+(#1)*x+(#0),1]]
af_noalg
では, poly に含まれる代数的数 ai を不定元 vi
で置き換える. defpolylist
は, [[vn,dn(vn,...,v1)],...,[v1,d(v1)]]
なるリストである. ここで di(vi,...,v1) は ai の定義多項式において
代数的数を全て vj に置き換えたものである.
[1] af_noalg(x^2+a2*x+a1,[[a2,a2^2+a1],[a1,a1^2+1]]); [[x^2+a2*x+a1,1]]
af_noalg
の場合, 因子 に現れる代数的数は,
defpolylist に従って不定元に置き換えられる.
[98] A = newalg(t^2-2); (#0) [99] asq(-x^4+6*x^3+(2*alg(0)-9)*x^2+(-6*alg(0))*x-2); [[-x^2+3*x+(#0),2]] [100] af(-x^2+3*x+alg(0),[alg(0)]); [[x+(#0-1),1],[-x+(#0+2),1]] [101] af_noalg(-x^2+3*x+a,[[a,x^2-2]]); [[x+a-1,1],[-x+a+2,1]]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
sp
, sp_noalg
:: 最小分解体を求める.
リスト
多項式
sp_noalg
では, 全ての代数的数が, 対応する
不定元 (即ち #i
に対する t#i
) に置き換えられる. これに
より, sp_noalg
の出力は, 整数係数多変数多項式のリストとなる.
[root,algptorat(defpoly(root))]
のリストとして
表現されている. すなわち, 求める最小分解体は, 有理数体に, この root
を全て添加した体として得られる. 添加は, 右の方の root
から順に
行われる.
sp()
は, 内部でノルムの計算のために sp_norm()
をしばしば
起動する. ノルムの計算は, 状況に応じてさまざまな方法で行われるが,
そこで用いられる方法が最善とは限らず, 単純な終結式の計算の方が高速
である場合もある.
大域変数 USE_RES
を 1 に設定することにより, 常に終結式により計算
させることができる.
[101] L=sp(x^9-54); [[x+(-#2),-54*x+(#1^6*#2^4),54*x+(#1^6*#2^4+54*#2), 54*x+(-#1^8*#2^2),-54*x+(#1^5*#2^5),54*x+(#1^5*#2^5+#1^8*#2^2), -54*x+(-#1^7*#2^3-54*#1),54*x+(-#1^7*#2^3),x+(-#1)], [[(#2),t#2^6+t#1^3*t#2^3+t#1^6],[(#1),t#1^9-54]]] [102] for(I=0,M=1;I<9;I++)M*=L[0][I]; [111] M=simpalg(M); -1338925209984*x^9+72301961339136 [112] ptozp(M); -x^9+54
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
set_field
:: 代数体を基礎体として設定する.
0
root
のリスト
root
のリスト rootlist で生成される代数体を基礎体として設定する.
root
は内部的に順序づけられているので, rootlist は集合として指定
すればよい. (順序は気にしなくてよい.)
[0] A=newalg(x^2+1); (#0) [1] B=newalg(x^3+A); (#1) [2] C=newalg(x^4+B); (#1) [3] set_field([C,B,A]); 0
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
algtodalg
, dalgtoalg
, dptodalg
, dalgtodp
:: 代数的数 alg を DAlg
に変換する.
:: DAlg
dalg
を代数的数に変換する.
:: 分散多項式 dp を DAlg
に変換する.
:: DAlg
dalg
を分散多項式に変換する.
代数的数, DAlg
または [分散多項式,分母] なるリスト
root
を含む代数的数
有理数係数分散多項式
root
を含む代数的数, DAlg
および分散多項式間の変換を行う.
DAlg
が属すべき代数体は, set_field()
により
あらかじめ設定しておく必要がある.
dalgtodp()
は, 分子である整数係数分散多項式と, 分母である整数を要素に持つ
リストを返す.
algtodalg()
, dptodalg()
は簡単化された結果を返す.
[0] A=newalg(x^2+1); (#0) [1] B=newalg(x^3+A*x+A); (#1) [2] set_field([B,A]); 0 [3] C=algtodalg((A+B)^10); ((408)*<<2,1>>+(103)*<<2,0>>+(-36)*<<1,1>>+(-446)*<<1,0>> +(-332)*<<0,1>>+(-218)*<<0,0>>) [4] dalgtoalg(C); ((408*#0+103)*#1^2+(-36*#0-446)*#1-332*#0-218) [5] D=dptodalg(<<10,10>>/10+2*<<5,5>>+1/3*<<0,0>>); ((-9)*<<2,1>>+(57)*<<2,0>>+(-63)*<<1,1>>+(-12)*<<1,0>> +(-60)*<<0,1>>+(1)*<<0,0>>)/30 [6] dalgtodp(D); [(-9)*<<2,1>>+(57)*<<2,0>>+(-63)*<<1,1>>+(-12)*<<1,0>> +(-60)*<<0,1>>+(1)*<<0,0>>,30]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] |
この文書は12月 21, 2024にtexi2html 5.0を用いて生成されました。