多項式の代数演算
普通の計算で多項式を変形する必要があるなら,これまでの節で説明した機能で十分用が足りる.
しかし,さらに高等な代数計算をするなら,以下に示す機能を使う必要があるだろう.
ただし,本節で説明する演算機能のほとんどは,係数が有理数で各項の指数が整数である,通常の多項式についてのみ適用可能であるので注意しなければいけない.
| PolynomialQuotient[poly1,poly2,x] | x の多項式poly1 をpoly2 で割ったときの商.剰余は除去する |
| PolynomialRemainder[poly1,poly2,x] | x の多項式poly1 をpoly2 で割ったときの剰余を抽出する |
| PolynomialQuotientRemainder[poly1,poly2,x] |
| 商と剰余をリストで与える |
| PolynomialMod[poly,m] | m を法として多項式poly を簡約する |
| PolynomialGCD[poly1,poly2] | 2つの多項式の最大公約式を探す |
| PolynomialLCM[poly1,poly2] | 2つの多項式の最小公倍式を探す |
| PolynomialExtendedGCD[poly1,poly2] | 2つの多項式の拡大最小公倍式を探す |
| Resultant[poly1,poly2,x] | 2つの多項式の終結式を返す |
| Subresultants[poly1,poly2,x] | 2つの多項式の主部分終結式の係数を見付ける |
| Discriminant[poly,x] | 多項式poly の判別式を見付ける |
| GroebnerBasis[{poly1,poly2,...},{x1,x2,...}] |
| 多項式polyi についてグレブナー基底を探す |
| GroebnerBasis[{poly1,poly2,...},{x1,x2,...},{y1,y2,...}] |
| yi を消去してグレブナー基底を探す |
| PolynomialReduce[poly,{poly1,poly2,...},{x1,x2,...}] |
| 多項式poly を項polyiで構成された最も小さい形に変換する |
多項式の簡約化的な操作
多項式
p (x)と
q (x)が与えられたとき,
b (x)の次数が
q (x)より低いという条件の下で,関係式

は必ず一意的に決定する.商
a (x)は
PolynomialQuotientで,また,剰余
b (x)は
PolynomialRemainderで求めることができる.
| Out[1]= |  |
|
| Out[2]= |  |
|
| Out[3]= |  |
|
この2つの多項式では,式が xについてのものか, yについてのものかにより答が変わってくる.
| Out[4]= |  |
|
PolynomialModは,整数に対する関数
Modの多項式版と考えればよい.
m が整数なら,
PolynomialMod[poly, m]は,単に多項式
poly の各係数を整数
m を法としてできるだけ低い次数の多項式に還元する.一方,
m が多項式のときは,
PolynomialMod[poly, m]は,
m の適当な倍数
q m を
poly から減算することで,次数を最小とした項を実効的に探そうとする.乗数
q は多項式であっても構わないが,その次数は
poly の次数より低いものでなければならない.
PolynomialModの返す最終的な多項式は,次数と先頭係数をともに最小化した多項式である.
x+1を法として x2を簡約する.結果は単に多項式の割り算の余りである.
| Out[5]= |  |
|
| Out[6]= |  |
|
PolynomialModと
PolynomialRemainderの主な相違点は,前者が多項式の積と差を取ることで機能するのに対して,後者は割り算を用いるという点にある.また,
PolynomialModは,複数の法による簡約化を可能にしている.典型的な例として,多項式と整数をともに法とする簡約化がある.
| Out[7]= |  |
|
PolynomialGCD[poly1, poly2]は
polyi を厳密に割ることのできる最高次の多項式を求める.これは整数関数
GCDの多項式版と言える.
| Out[8]= |  |
|
| Out[9]= |  |
|
返される多項式 r および s は,もとの多項式についての最大公約式を表すのに使うことができる.
| Out[10]= |  |
|
関数
Resultant[poly1, poly2, x]は,古典的代数問題で必要とされる各種アルゴリズムで使われる.ともに最高次の係数を1とする2つの多項式
a と
b の終結式は,その根の差
ai-bj の積で与えられる.ある多項式の対があるとき,それらの終結式はもとの多項式対の係数を持った多項式になることが知られている.また,終結式がゼロになるように多項式対のパラメータの値を変えることで対に共通な根を見付けることができる.最高次の係数を1とする2個の多項式は,リスト
Subresultants[poly1, poly2, x]の最初の
k 個の要素がゼロであれば,
k 個の共通な根を持つ.
x と y の多項式を y について合成する.多項式に共通な y に関する根は,合成式を0にする x の値についてのみ存在する.
| Out[11]= |  |
|
関数
Discriminant[poly, x]はその根の差分の2乗の積である.これを使うと,その多項式に重根があるかどうかが判別できる.判別式は,変数に非依存の因数まで,多項式およびその導関数の終結式に等しい.
| Out[12]= |  |
|
以下の多項式は異なる根を持つため,その判別式は非零である.
| Out[13]= |  |
|
グレブナー基底は近代代数アルゴリズムでよく使われる.関数
GroebnerBasis[{poly1, poly2, ...}, {x1, x2, ...}]は,与えられた多項式の集合を,式の性質が簡単に推定できる標準的な形に変形してくれる.また,これは重要な特徴だが,
GroebnerBasisから得られる多項式系に共通な根はもとの多項式系の共通根に等しい.
(x+y)2は冗長なので,グレブナー基底には現れない.
| Out[14]= |  |
|
多項式 1は根を持たない.このため,もとの多項式には共通な根が存在しない.
| Out[15]= |  |
|
求まる多項式は互いに依存しない形なので,ちょうど5つ根が存在することが分かる.
| Out[16]= |  |
|
PolynomialReduce[poly, {p1, p2, ...}, {x1, x2, ...}]はリスト形式で多項式の集合
{{a1, a2, ...}, b}を返す.求まる多項式は,
b は最小次数で,
a1p1+a2p2+...+b は
poly に等しい.
x2+y2を項 x-yと項 y+aで書き表し,剰余は a のみに依存する.
| Out[17]= |  |
|
多項式の因数分解用関数
関数
Factor,
FactorTerms,
FactorSquareFreeはさまざまの種類の多項式の因数分解を行う.
Factorは,整数の範囲で因数分解を行う.
FactorTermsでは,多項式の「内容」が対象になる.
FactorSquareFreeでは,2乗形の因数を取り出す.
| Out[18]= |  |
|
| Out[19]= |  |
|
| Out[20]= |  |
|
Factorを使うと,式が完全に因数分解され,もとの形が得られる.
| Out[21]= |  |
|
多項式を扱うプログラムを書く場合等で,多項式の項を抽出できると後で操作するのに都合よくなることがある.関数
FactorListを使うと,因数分解の後に各因数を,指数部分を付けた形で,リストの成分として得ることができる.このリストの第1要素は,必ず多項式に共通な数値形の因子がくる.
FactorListの多項式の出力の仕方は,
FactorIntegerの整数の出力の仕方に相当する.
前の例で使った多項式をまた因数分解する.ただし,今度は,得られる因数をリストで出す.リストの各要素は項の因数と指数部からなる.
| Out[22]= |  |
|
複素数を係数に持つ因数分解
Factorとこれに関連した関数は,通常,普通の整数や有理数を係数とした多項式を扱う.
GaussianIntegers->Trueのオプションを設定しておくと,
Factorで実数部と虚数部がともに有理数である複素数を係数に持った多項式も扱えるようになる.普通不可能な因数分解の問題でも,この設定をしておくと可能になる場合がよくある.
普通の整数しか係数に使えないことにすると,この多項式はこれ以上因数分解できない.
| Out[23]= |  |
|
ガウスの整数もよしとすると,今度は,分解可能になる.
| Out[24]= |  |
|
円周等分多項式
円周等分した多項式は,さまざまな代数演算アルゴリズムで「基本多項式」として使われる.この多項式は,式

で定義される.ここで,
k は
nより小さく,かつ,
n に対して互いに素となる正整数すべてを動く.
| Out[25]= |  |
|
| Out[26]= |  |
|
| Decompose[poly,x] | 可能であれば,多項式poly をより単純な多項式の合成に分解し,それらの多項式をリストで返す |
多項式の分解
因数分解は多項式の再構成に使う重要な手法の1つである.これとは異なる手法として「分解」がある.多項式
P (x)を因数分解するとき,それは多項式
pi (x)の積
p1 (x)p2 (x)...の形で書かれる.一方,多項式
Q (x)を分解するときは,多項式を合成した形,
q1 (q2 (... (x)...))で構成されるとする.
Decomposeを使った簡単な例を見てみよう.もとの多項式 x4+x2+1は多項式  (ここで  は多項式 x2)と書ける.
| Out[27]= |  |
|
| Out[29]= |  |
|
| Out[30]= |  |
|
Decompose[poly, x]は
x の多項式をリスト形式で返すが,それらの多項式を合成するともとの多項式が復元できるようになっている.このとき,もとの多項式に
x 以外の変数があっても構わないが
Decomposeが生成する一連の多項式は
x の関数とみなされる.
因数分解と異なり,合成の仕方は完全に一意的ではない.例えば,
q1 (x)=p1 (x-a)と
q2 (x)=p2 (x)+aの関係にある多項式
pi と多項式
qi は,ともに同じ合成式を与える.つまり,
p1 (p2 (x))=q1 (q2 (x))になる.また,定数の項があれば,
Decomposeの返すリストにおける最初の項に組み入れられることになっている.
補間多項式を作成する
| Out[31]= |  |
|
| Out[32]= |  |
|