多項式の代数演算

普通の計算で多項式を変形する必要があるなら,実質的に構造的操作で十分用が足りる.

しかし,さらに高等な代数計算をするなら,以下に示す機能を使う必要があるだろう.

ただし,本節で説明する演算機能のほとんどは,係数が有理数で各項の指数が整数である,通常の多項式についてのみ適用可能であるので注意しなければいけない.

PolynomialQuotient[poly1,poly2,x]x の多項式 で割ったときの商.剰余は除去する
PolynomialRemainder[poly1,poly2,x]x の多項式 で割ったときの剰余を抽出する
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,}]
多項式 についてグレブナー基底を探す
GroebnerBasis[{poly1,poly2,},{x1,x2,},{y1,y2,}]
を消去してグレブナー基底を探す
PolynomialReduce[poly,{poly1,poly2,},{x1,x2,}]
多項式 poly を項 で構成された最も小さい形に変換する

多項式の簡約化的な操作

多項式 が与えられたとき,の次数が より低いという条件の下で,関係式 は必ず一意的に決定する.商 PolynomialQuotientで,また,剰余 PolynomialRemainderで求めることができる.

で割ったときの余りを求める.
In[1]:=
Click for copyable input
Out[1]=
今度は の商を求め,余りは捨てる.
In[2]:=
Click for copyable input
Out[2]=
こうするともとの式が再構築できる.
In[3]:=
Click for copyable input
Out[3]=
この2つの多項式では,式がについてのものか,についてのものかにより答が変わってくる.
In[4]:=
Click for copyable input
Out[4]=

PolynomialModは,整数に対する関数Modの多項式版と考えればよい.m が整数なら,PolynomialMod[poly,m]は,単に多項式 poly の各係数を整数 m を法としてできるだけ低い次数の多項式に還元する.一方,m が多項式のときは,PolynomialMod[poly,m]は,m の適当な倍数 poly から減算することで,次数を最小とした項を実効的に探そうとする.乗数 q は多項式であっても構わないが,その次数は poly の次数より低いものでなければならない.PolynomialModの返す最終的な多項式は,次数と先頭係数をともに最小化した多項式である.

を法として を簡約する.結果は単に多項式の割り算の余りである.
In[5]:=
Click for copyable input
Out[5]=
この場合,PolynomialModPolynomialRemainderは同じ結果にならない.
In[6]:=
Click for copyable input
Out[6]=

PolynomialModPolynomialRemainderの主な相違点は,前者が多項式の積と差を取ることで機能するのに対して,後者は割り算を用いるという点にある.また,PolynomialModは,複数の法による簡約化を可能にしている.典型的な例として,多項式と整数をともに法とする簡約化がある.

をともに法とし を簡約する.
In[7]:=
Click for copyable input
Out[7]=

PolynomialGCD[poly1,poly2] を厳密に割ることのできる最高次の多項式を求める.これは整数関数GCDの多項式版と言える.

PolynomialGCDは,2つの多項式の最大公約式を与える.
In[8]:=
Click for copyable input
Out[8]=
PolynomialExtendedGCDは,2つの多項式の拡大最大公約式を与える.
In[9]:=
Click for copyable input
Out[9]=
返される多項式 および は,もとの多項式についての最大公約式を表すのに使うことができる.
In[10]:=
Click for copyable input
Out[10]=

関数Resultant[poly1,poly2,x]は,古典的代数問題で必要とされる各種アルゴリズムで使われる.ともに最高次の係数を1とする2つの多項式 の終結式は,その根の差 の積で与えられる.ある多項式の対があるとき,それらの終結式はもとの多項式対の係数を持った多項式になることが知られている.また,終結式がゼロになるように多項式対のパラメータの値を変えることで対に共通な根を見付けることができる.最高次の係数を1とする2個の多項式は,リストSubresultants[poly1,poly2,x]の最初の 個の要素がゼロであれば, 個の共通な根を持つ.

の多項式をについて合成する.多項式に共通なに関する根は,合成式を0にするの値についてのみ存在する.
In[11]:=
Click for copyable input
Out[11]=

関数Discriminant[poly,x]はその根の差分の2乗の積である.これを使うと,その多項式に重根があるかどうかが判別できる.判別式は,変数に非依存の因数まで,多項式およびその導関数の終結式に等しい.

以下の多項式には重根があるため,判別式は消える.
In[12]:=
Click for copyable input
Out[12]=
以下の多項式は異なる根を持つため,その判別式は非零である.
In[13]:=
Click for copyable input
Out[13]=

グレブナー基底は近代代数アルゴリズムでよく使われる.関数GroebnerBasis[{poly1,poly2,},{x1,x2,}]は,与えられた多項式の集合を,式の性質が簡単に推定できる標準的な形に変形してくれる.また,これは重要な特徴だが, GroebnerBasisから得られる多項式系に共通な根はもとの多項式系の共通根に等しい.

は冗長なので,グレブナー基底には現れない.
In[14]:=
Click for copyable input
Out[14]=
多項式は根を持たない.このため,もとの多項式には共通な根が存在しない.
In[15]:=
Click for copyable input
Out[15]=
求まる多項式は互いに依存しない形なので,ちょうど5つ根が存在することが分かる.
In[16]:=
Click for copyable input
Out[16]=

PolynomialReduce[poly,{p1,p2,},{x1,x2,}]はリスト形式で多項式の集合を返す.求まる多項式は, は最小次数で,poly に等しい.

を項 と項 で書き表し,剰余は のみに依存する.
In[17]:=
Click for copyable input
Out[17]=
Factor[poly]多項式を因数分解する
FactorSquareFree[poly]多項式を無平方分解する
FactorTerms[poly,x]x に依存しない項について因数分解する
FactorList[poly], FactorSquareFreeList[poly], FactorTermsList[poly]
結果の因数をリスト形式で返す

多項式の因数分解用関数

関数FactorFactorTermsFactorSquareFreeはさまざまの種類の多項式の因数分解を行う.Factorは,整数の範囲で因数分解を行う.FactorTermsでは,多項式の「内容」が対象になる.FactorSquareFreeでは,2乗形の因数を取り出す.

多項式を入力し,展開しておく.
In[18]:=
Click for copyable input
Out[18]=
FactorTermsで分解すると,に依存しない因数2が外に引き出される.
In[19]:=
Click for copyable input
Out[19]=
FactorSquareFreeだと,2との因数は引き出すが,他はいじらない.
In[20]:=
Click for copyable input
Out[20]=
Factorを使うと,式が完全に因数分解され,もとの形が得られる.
In[21]:=
Click for copyable input
Out[21]=

多項式を扱うプログラムを書く場合等で,多項式の項を抽出できると後で操作するのに都合よくなることがある.関数FactorListを使うと,因数分解の後に各因数を,指数部分を付けた形で,リストの成分として得ることができる.このリストの第1要素は,必ず多項式に共通な数値形の因子がくる.

FactorListの多項式の出力の仕方は,FactorIntegerの整数の出力の仕方に相当する.

前の例で使った多項式をまた因数分解する.ただし,今度は,得られる因数をリストで出す.リストの各要素は項の因数と指数部からなる.
In[22]:=
Click for copyable input
Out[22]=
Factor[poly,GaussianIntegers->True]
ガウスの整数を係数に許容して因数分解する

複素数を係数に持つ因数分解

Factorとこれに関連した関数は,通常,普通の整数や有理数を係数とした多項式を扱う.GaussianIntegers->Trueのオプションを設定しておくと,Factorで実数部と虚数部がともに有理数である複素数を係数に持った多項式も扱えるようになる.普通不可能な因数分解の問題でも,この設定をしておくと可能になる場合がよくある.

普通の整数しか係数に使えないことにすると,この多項式はこれ以上因数分解できない.
In[23]:=
Click for copyable input
Out[23]=
ガウスの整数もよしとすると,今度は,分解可能になる.
In[24]:=
Click for copyable input
Out[24]=
IrreduciblePolynomialQ[poly]poly が有理数体上の既約多項式かどうかを判定する
IrreduciblePolynomialQ[poly,GaussianIntegers->True]poly がガウスの有理数体上で既約かどうかを判定する
IrreduciblePolynomialQ[poly,Extension->Automatic]poly の代数的数の係数により拡張された有理数体上での既約性を判定する

既約性の判定

ある多項式が,体の係数を持つ2つの非定数多項式の積として表すことができない場合,その多項式は体上で既約である.

以下の多項式は有理数体上で既約である.
In[25]:=
Click for copyable input
Out[25]=
ガウスの有理数体上では,可約である.
In[26]:=
Click for copyable input
Out[26]=
デフォルトでは,代数的数は独立変数として扱われる.
In[27]:=
Click for copyable input
Out[27]=
Sqrt[2]により拡張された有理数体上では,この多項式は可約である.
In[28]:=
Click for copyable input
Out[28]=
Cyclotomic[n,x]n 次の x に関する円周等分多項式を構成する

円周等分多項式

円周等分した多項式は,さまざまな代数演算アルゴリズムで「基本多項式」として使われる.この多項式は,式 で定義される.ここで, より小さく,かつ, に対して互いに素となる正整数すべてを動く.

円周等分多項式 を求める.
In[29]:=
Click for copyable input
Out[29]=
の因数に現れる.
In[30]:=
Click for copyable input
Out[30]=
Decompose[poly,x]可能であれば,多項式 poly をより単純な多項式の合成に分解し,それらの多項式をリストで返す

多項式の分解

因数分解は多項式の再構成に使う重要な手法の1つである.これとは異なる手法として「分解」がある.多項式 を因数分解するとき,それは多項式 の積 の形で書かれる.一方,多項式 を分解するときは,多項式を合成した形,で構成されるとする.

Decomposeを使った簡単な例を見てみよう.もとの多項式 は多項式(ここで は多項式 )と書ける.
In[31]:=
Click for copyable input
Out[31]=
多項式の関数を2つ作っておく.
In[32]:=
Click for copyable input
関数を複合化した形にする.
In[33]:=
Click for copyable input
Out[33]=
Decomposeでもとの関数に分解する.
In[34]:=
Click for copyable input
Out[34]=

Decompose[poly,x] の多項式をリスト形式で返すが,それらの多項式を合成するともとの多項式が復元できるようになっている.このとき,もとの多項式に 以外の変数があっても構わないがDecomposeが生成する一連の多項式は の関数とみなされる.

因数分解と異なり,合成の仕方は完全に一意的ではない.例えば, の関係にある多項式 と多項式 は,ともに同じ合成式を与える.つまり,になる.またWolfram言語では,定数の項があれば,Decomposeの返すリストにおける最初の項に組み入れられることになっている.

InterpolatingPolynomial[{f1,f2,},x]
x の多項式で,x が整数 i に等しいときには に等しくなるものを返す
InterpolatingPolynomial[{{x1,f1},{x2,f2},},x]
x の多項式で,x のときには に等しくなるものを返す

補間多項式を作成する

3つの点を通る二次式を求める.
In[35]:=
Click for copyable input
Out[35]=
のとき,二次式の値はになる.
In[36]:=
Click for copyable input
Out[36]=