| [ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
| [ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
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]
| [ << ] | [ < ] | [上] | [ > ] | [ >> ] |
この文書は11月 2, 2025にtexi2html 5.0を用いて生成されました。