Mathematica 9 is now available
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.
Mathematica >

多項式の代数演算

普通の計算で多項式を変形する必要があるなら,これまでの節で説明した機能で十分用が足りる.
しかし,さらに高等な代数計算をするなら,以下に示す機能を使う必要があるだろう.
ただし,本節で説明する演算機能のほとんどは,係数が有理数で各項の指数が整数である,通常の多項式についてのみ適用可能であるので注意しなければいけない.
PolynomialQuotient[poly1,poly2,x]x の多項式poly1poly2 で割ったときの商.剰余は除去する
PolynomialRemainder[poly1,poly2,x]x の多項式poly1poly2 で割ったときの剰余を抽出する
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で求めることができる.
x21+x で割ったときの余りを求める.
In[1]:=
Click for copyable input
Out[1]=
今度はx21+x の商を求め,余りは捨てる.
In[2]:=
Click for copyable input
Out[2]=
こうするともとの式が再構築できる.
In[3]:=
Click for copyable input
Out[3]=
この2つの多項式では,式がxについてのものか,yについてのものかにより答が変わってくる.
In[4]:=
Click for copyable input
Out[4]=
PolynomialModは,整数に対する関数Modの多項式版と考えればよい.m が整数なら,PolynomialMod[poly, m]は,単に多項式poly の各係数を整数m を法としてできるだけ低い次数の多項式に還元する.一方,m が多項式のときは,PolynomialMod[poly, m]は,m の適当な倍数q mpoly から減算することで,次数を最小とした項を実効的に探そうとする.乗数q は多項式であっても構わないが,その次数はpoly の次数より低いものでなければならない.PolynomialModの返す最終的な多項式は,次数と先頭係数をともに最小化した多項式である.
x+1を法としてx2を簡約する.結果は単に多項式の割り算の余りである.
In[5]:=
Click for copyable input
Out[5]=
この場合,PolynomialModPolynomialRemainderは同じ結果にならない.
In[6]:=
Click for copyable input
Out[6]=
PolynomialModPolynomialRemainderの主な相違点は,前者が多項式の積と差を取ることで機能するのに対して,後者は割り算を用いるという点にある.また,PolynomialModは,複数の法による簡約化を可能にしている.典型的な例として,多項式と整数をともに法とする簡約化がある.
x+12をともに法としx2+1を簡約する.
In[7]:=
Click for copyable input
Out[7]=
PolynomialGCD[poly1, poly2]polyi を厳密に割ることのできる最高次の多項式を求める.これは整数関数GCDの多項式版と言える.
PolynomialGCDは,2つの多項式の最大公約式を与える.
In[8]:=
Click for copyable input
Out[8]=
PolynomialExtendedGCDは,2つの多項式の拡大最大公約式を与える.
In[9]:=
Click for copyable input
Out[9]=
返される多項式r およびs は,もとの多項式についての最大公約式を表すのに使うことができる.
In[10]:=
Click for copyable input
Out[10]=
関数Resultant[poly1, poly2, x]は,古典的代数問題で必要とされる各種アルゴリズムで使われる.ともに最高次の係数を1とする2つの多項式ab の終結式は,その根の差ai-bj の積で与えられる.ある多項式の対があるとき,それらの終結式はもとの多項式対の係数を持った多項式になることが知られている.また,終結式がゼロになるように多項式対のパラメータの値を変えることで対に共通な根を見付けることができる.最高次の係数を1とする2個の多項式は,リストSubresultants[poly1, poly2, x]の最初のk 個の要素がゼロであれば,k 個の共通な根を持つ.
xy の多項式をy について合成する.多項式に共通なy に関する根は,合成式を0にするx の値についてのみ存在する.
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から得られる多項式系に共通な根はもとの多項式系の共通根に等しい.
(x+y)2は冗長なので,グレブナー基底には現れない.
In[14]:=
Click for copyable input
Out[14]=
多項式1は根を持たない.このため,もとの多項式には共通な根が存在しない.
In[15]:=
Click for copyable input
Out[15]=
求まる多項式は互いに依存しない形なので,ちょうど5つ根が存在することが分かる.
In[16]:=
Click for copyable input
Out[16]=
PolynomialReduce[poly, {p1, p2, ...}, {x1, x2, ...}]はリスト形式で多項式の集合{{a1, a2, ...}, b}を返す.求まる多項式は, b は最小次数で,a1p1+a2p2+...+bpoly に等しい.
x2+y2を項x-yと項y+aで書き表し,剰余はa のみに依存する.
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で分解すると,x に依存しない因数2が外に引き出される.
In[19]:=
Click for copyable input
Out[19]=
FactorSquareFreeだと,2と (1+x)^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]=
Cyclotomic[n,x]n 次のx に関する円周等分多項式を構成する

円周等分多項式

円周等分した多項式は,さまざまな代数演算アルゴリズムで「基本多項式」として使われる.この多項式は,式で定義される.ここで,knより小さく,かつ,n に対して互いに素となる正整数すべてを動く.
円周等分多項式C6 (x)を求める.
In[25]:=
Click for copyable input
Out[25]=
C6 (x)x6-1の因数に現れる.
In[26]:=
Click for copyable input
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)と書ける.
In[27]:=
Click for copyable input
Out[27]=
多項式の関数を2つ作っておく.
In[28]:=
Click for copyable input
関数を複合化した形にする.
In[29]:=
Click for copyable input
Out[29]=
Decomposeでもとの関数に分解する.
In[30]:=
Click for copyable input
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の返すリストにおける最初の項に組み入れられることになっている.
InterpolatingPolynomial[{f1,f2,...},x]
x の多項式で,x が整数i に等しいときにはfi に等しくなるものを返す
InterpolatingPolynomial[{{x1,f1},{x2,f2},...},x]
x の多項式で,xxiのときにはfi に等しくなるものを返す

補間多項式を作成する

3つの点を通る2次式を求める.
In[31]:=
Click for copyable input
Out[31]=
x0のとき,2次式の値は2になる.
In[32]:=
Click for copyable input
Out[32]=
Ask a question about this page  |  Suggest an improvement  |  Leave a message for the team