数学および数式処理において、多項式の因数分解とは、与えられた体または整数の係数を持つ多項式を、同じ領域に係数を持つ既約因子の積として表すこと を意味します。多項式の因数分解は、数式処理システムの基本的な構成要素の一つです。
最初の多項式因数分解アルゴリズムは、1793 年にテオドール・フォン・シューベルトによって発表されました。 [ 1 ]レオポルド・クロネッカーは1882 年にシューベルトのアルゴリズムを再発見し、それを代数的拡張によって多変数多項式と係数に拡張しました。しかし、このトピックに関する知識のほとんどは、1965 年頃の最初のコンピュータ代数システムより古いものではありません。[ 2 ]
古くから知られていた有限ステップアルゴリズムが初めてコンピュータに実装されたとき、それらは非常に非効率的であることが判明した。次数が100までの単変数または多変数多項式で、係数のサイズが中程度(最大100ビット)であれば、現代のアルゴリズムによって数分のコンピュータ時間で因数分解できるという事実は、この問題が過去15年間でいかに成功裏に取り組まれてきたかを示している。(エーリッヒ・カルトーフェン、1982年)
現代のアルゴリズムとコンピュータは、係数が数千桁に及ぶ1000を超える次数を持つ単変数多項式を迅速に因数分解することができます。 [ 3 ]この目的のために、有理数や数体 上の因数分解であっても、基本的なステップは有限体上の多項式の因数分解です。
整数環または体環上の多項式環は、一意分解領域です。これは、これらの環のすべての要素が、定数と既約多項式(定数でない2つの多項式の積ではない多項式)の積で表されることを意味します。さらに、この分解は、因数に可逆定数を掛けることを除いて一意です。
因数分解は基底体に依存します。例えば、複素係数を持つすべての多項式は複素根を持つという代数学の基本定理は、整数係数を持つ多項式が(根探索アルゴリズムを用いて)複素体C上の線形因子に因数分解できることを意味します。同様に、実数体上では既約因子の次数は最大で 2 ですが、有理数体Q上では任意の次数の既約多項式が存在します。
多項式の因数分解の問題は、すべての要素がコンピュータで表現でき、算術演算のアルゴリズムが存在する計算可能体の係数に対してのみ意味を持ちます。しかし、これは十分条件ではありません。FröhlichとShepherdsonは、因数分解アルゴリズムが存在しないような体の例を挙げています。[ 4 ]
因数分解アルゴリズムが知られている係数体には、素体(すなわち、有理数体および素数を法とする整数体)とその有限生成体拡大体が含まれる。整数係数も扱いやすい。クロネッカーの古典的な方法は歴史的な観点からのみ興味深いものであり、現代のアルゴリズムは次のような手順で進められる。
および削減:
このセクションでは、Q(有理数)とZ(整数)上の因数分解は本質的に同じ問題であることを示します。
多項式p ∈ Z [ X ] の内容は「cont( p )」と表記され、符号を除いて、その係数の最大公約数です。pの原始部分は primpart( p ) = p /cont( p ) であり、これは整数係数の原始多項式です。これにより、p を整数と原始多項式の積に因数分解することができます。この因数分解は、内容の符号を除いて一意です。通常、原始部分の最高次係数が正になるように内容の符号を選択します。
例えば、
これは内容と基本部分への因数分解である。
有理係数を持つすべての多項式q は次のように書くことができる
ここで、p ∈ Z [ X ] かつc ∈ Zである。c には qの係数のすべての分母の倍数(例えばそれらの積)を取り、 p = cqとすれば十分である。qの内容は次のように定義される。
そして、qの原始部分はpの原始部分である。整数係数を持つ多項式に関しては、これは有理数と整数係数を持つ原始多項式への因数分解を定義する。この因数分解は、符号の選択を除いて一意である。
例えば、
これは内容と基本部分への因数分解である。
ガウスは、2つの原始多項式の積もまた原始多項式であることを証明しました(ガウスの補題)。これは、原始多項式が有理数体上で既約であるのは、それが整数体上で既約である場合に限ることを意味します。また、有理数係数を持つ多項式の有理数体上での因数分解は、その原始部分の整数体上での因数分解と同じであることを意味します。同様に、整数係数を持つ多項式の整数体上での因数分解は、その原始部分の因数分解と内容の因数分解の積になります。
言い換えれば、整数の最大公約数(GCD)の計算は、有理数上の多項式の因数分解を整数係数を持つ原始多項式の因数分解に、整数上の多項式の因数分解を整数と原始多項式の因数分解に還元する。
Z を体F上の多項式環に、Q をF上の同じ変数の有理関数の体に置き換えた場合でも、前述のことはすべてそのまま成り立ちます。唯一の違いは、「符号を除いて」を「 Fの可逆定数による乗算を除いて」に置き換える必要があることです。これにより、 Fの純粋な超越体拡張上の因数分解は、 F上の多変数多項式の因数分解に帰着します。
多項式の因数が2つ以上同じである場合、その多項式はその因数の2乗の倍数である。また、その倍数は、多項式の導関数(複数の変数がある場合は、いずれかの変数に関する導関数)の因数でもある。
単変数多項式の場合、複数の因数は(適切な拡大体上で)複数の根と等価です。有理数体(またはより一般的には標数ゼロの体)上の単変数多項式の場合、Yunのアルゴリズムはこの性質を利用して、 gcd( f ( x ), f '( x )) から始まる一連の最大公約数計算を実行することで、多項式を平方因子でない因数(つまり平方の倍数でない因数)に効率的に因数分解します。元の多項式を因数分解するには、各平方因子でない因数を因数分解すれば十分です。したがって、平方因子でない因数分解は、ほとんどの多項式因数分解アルゴリズムの最初のステップです。
ユンのアルゴリズムは、多変数多項式を多項式環上の単変数多項式とみなすことで、これを多変数の場合に拡張している。
有限体上の多項式の場合、ユンのアルゴリズムは次数が標数より小さい場合にのみ適用されます。そうでない場合、非ゼロ多項式の導関数がゼロになる可能性があるためです(p個の要素を持つ体では、 x pに関する多項式の導関数は常にゼロです)。ただし、多項式とその導関数から始めて、一連の最大公約数計算を行うことで、平方因子を含まない分解を計算できます。詳しくは、「有限体上の多項式の因数分解 #平方因子を含まない因数分解」を参照してください。
このセクションでは、手計算を行う際に便利な教科書的な方法について説明します。これらの方法は整数因数分解を用いるため、現在のところ多項式因数分解よりも処理速度が遅く、機械計算には使用されません。
以下の2つの方法は、整数係数を持つ単変数多項式から出発し、同じく整数係数を持つ多項式である因数を見つけるものです。
有理係数を持つすべての線形因数は、有理根判定法を用いて求めることができます。因数分解する多項式がすると、考えられるすべての線形因子は次の形式になります。、 どこは整数の因数であるそしては整数の因数である整数因数のすべての組み合わせの妥当性をテストでき、有効な組み合わせはそれぞれ多項式の長除法を使用して因数分解できます。元の多項式が、少なくとも 2 つの因数が 2 以上である因数の積である場合、この手法では部分的な因数分解しか得られません。そうでない場合は、因数分解は完全です。特に、非線形因数がちょうど 1 つある場合、それはすべての線形因数を因数分解した後に残る多項式になります。3次多項式の場合、3 次多項式が因数分解可能であれば、有理根テストにより、線形因数と既約 2 次因数、または 3 つの線形因数のいずれかに完全に因数分解されます。
クロネッカーの方法は、整数係数を持つ一変数多項式を、整数係数を持つ多項式に因数分解することを目的としている。
この方法は、整数多項式を整数値で評価すると必ず整数が得られるという事実を利用しています。つまり、は整数係数の多項式である。a が整数であれば、 も整数になります。 aの因数として可能な整数値は有限個しかありません。したがって、は価値要因の1つである必要がある
与えられた次数dのすべての因数を探す場合、価値観、aに対して、タプルの有限個の可能性を与えるそれぞれ約数が有限個である、そして、それぞれ-タプルエントリはつまり、次の形式のタプル次数が最大で一意の多項式を生成するこれは多項式補間によって計算できます。これらの多項式のそれぞれは、多項式除算によって因数であるかどうかをテストできます。有限個の多項式があったため、そしてそれぞれは有限個の約数を持つので、そのようなタプルは有限個存在する。したがって、網羅的な探索によって、次数が最大dのすべての約数を見つけることができます。
例えば、
この多項式がZ上で因数分解できるならば、その因数の少なくとも 1 つは次数が2以下でなければならないので、は3つの値によって一意に決定されます。したがって、3つの値を計算します。、そしてこれらの値のいずれかが 0 の場合、線形因子となります。値がゼロでない場合は、それぞれの可能な因数分解を列挙できます。さて、2 は次のように因数分解できます。
したがって、2次整数多項式因子が存在する場合、それは次の値のいずれかを取る必要があります。
p (−1)についても同様です。6の因数分解は8通りあり(1×6と2×3それぞれに4通りずつ)、合計で4×4×8 = 128通りの可能な3つ組( p (0), p (1), p (−1))が存在します。そのうち半分は残りの半分の負の値として除外できます。したがって、64個の明示的な整数多項式をチェックする必要があります。考えられる要因としてそれらを徹底的にテストすると、
( g (0), g (1), g (−1)) = (1,3,1)個の因子から構成される。
f ( x )をp ( x )で割ると、もう一方の因数が得られます。、 となることによって。ここで、再帰的にテストして、 p ( x )とq ( x )の因数を求めることができます。この場合は、有理根判定法を使用します。結果として、両方とも既約であることがわかりました。したがって、 f ( x )の既約因数分解は次のようになります。 [ 5 ]
もしは整数上の単変数多項式であり、内容が不完全かつ平方因子を持たないと仮定すると、まず境界を計算することから始める。あらゆる要因絶対値が制限される係数を持つこうすれば、より大きい整数です、そしてもし既知のモジュロ、 それから画像から再構築できる。
ザッセンハウスのアルゴリズムは次のように進められます。まず、素数を選びます。そのため、正方形を含まないままであり、同じ程度ランダムな選択は、ほぼ常にこれらの制約を満たします。なぜなら、これらの制約を満たさない素数は有限個しかなく、それは判別式と多項式の最高次係数の積の素因数だからです。次に因数分解します。これにより整数多項式が生成されます。その製品が一致する次に、ヘンゼルリフティングを適用します。これにより、彼らの製品が一致するように、 どこ十分に大きいのでを超える:したがってそれぞれ明確に定義された整数多項式に対応する。モジュロ多項式もっている因子(単位まで):すべての部分集合の積これらの係数はモジュロ「真の」因子に対応する必要はないでしかし、割り算によって簡単にテストできますこの方法で、最大で症例数を減らし、補数をスキップすることでケースを処理削減可能であり、それらを取り除くことで症例数はさらに減少する既に見つかった真の因子に現れるもの。ザッセンハウスアルゴリズムは各ケース(各サブセット)を迅速に処理しますが、最悪の場合、指数関数的に増加するケースを考慮することになります。
有理多項式の因数分解のための最初の多項式時間アルゴリズムは、Lenstra、Lenstra、Lovászによって発見され、 Lenstra–Lenstra–Lovász格子基底縮小(LLL)アルゴリズムの応用である。[ 6 ]
LLL因数分解アルゴリズムの簡略版は次のとおりです。多項式の複素(またはp進)根αを計算します。高精度で、次にLenstra–Lenstra–Lovász 格子基底縮小アルゴリズムを使用して、 1、α、α 2、α 3 、... の間の近似線形関係を整数係数で見つけます。これは、正確な線形関係と多項式因子である可能性があります。この方法では、因数分解または既約性証明のいずれかが得られることを保証する精度の上限を定めることができる。この方法は多項式時間で完了するが、格子が高次元で要素数が非常に大きいため計算が遅くなり、実際には使用されていない。
ザッセンハウスアルゴリズムの指数関数的な複雑さは、組み合わせ問題から生じます。最先端の因数分解実装は、組み合わせ問題を格子問題に変換し、それを LLL で解く点を除いて、Zassenhaus と同様の方法で動作します。[ 7 ]このアプローチでは、LLL は因数の係数を計算するために使用されるのではなく、ベクトルを計算するために使用されます。{0,1} のエントリは、以下の部分集合をエンコードします。既約の真の因子に対応する。
多項式を因数分解することができます、その分野は有限拡張であるまず、平方因子を持たない因数分解を用いて、多項式が平方因子を持たないと仮定します。次に、商環を定義します。学位これはフィールドではありません。既約だが、それは縮約環である。平方因子を持たない。実際、もし
p ( x )の望ましい因数分解は、環が一意に次の体へと分解される。
因数分解を知らなくても、この分解を見つけます。まず、L を明示的に代数として書きます。ランダムな要素を選択します生成する以上with high probability by the primitive element theorem. If this is the case, we can compute the minimal polynomial of over , by finding a -linear relation among 1, α, . . . , αn. Using a factoring algorithm for rational polynomials, we factor into irreducibles in :
Thus we have:
where corresponds to . This must be isomorphic to the previous decomposition of .
The generators of L are x along with the generators of over ; writing these as a polynomials in , we can determine the embeddings of and into each component . By finding the minimal polynomial of in , we compute , and thus factor over
In general, most polynomials do not have square roots. However, some applications, such as the electrical engineers function of obtaining the Y parameters from a driving point impedance of a two port network,[8] do utilize squared polynomials that must be factored into two identical square root polynomials. The algorithm below will factor a squared polynomial, , into two identical polynomial roots, , using an example from Mathematics Stack Exchange.[9][10]
Steps:
Step1: Compute the square root of the leading term, , and place it, , in the leading term of the solution R polynomial solution row on top, and place the term in row 1 just below the polynomial to be factored, as shown.
Step2: Subtract the newly placed from the polynomial to be factored, and bring down the next two terms into row 2.
Step3: Double the current state of the solution R polynomial, then add a new term, Q, such that R(2Q+R) negates the leading term of row 2, and place the negative of R(2Q+R) in the lower space of row 2.
Step4: Subtract the two numbers in row 2, place the results in row 3, and bring down the next two terms of row 1 into row 3..
Step 5: Repeat for all remaining rows and columns until complete.
When complete, the solution R polynomial will show up in the R column in the left side table and the R row of the right side table.
上記の多項式の平方根アルゴリズムは、任意のサイズの二乗多項式から平方根を抽出するために使用できる標準的な数学構文に要約および一般化することができ、高速計算で使用するためにコンピュータ言語に簡単に変換できます。二乗多項式の最高次項が 1 でない場合、まず多項式を最高次項の値で割って前処理し、次に抽出された多項式の因数を同じ値の平方根で乗算して後処理する必要があります。一般化された数学的要約は次のとおりです。
;}}\quad R_{mi}={\frac {D_{ni}}{2}}{\text{ ;}}\quad T_{ni}=D_{ni}{\text{ ;}}\quad {\Big (}\sum _{k=1}^{i}{T_{nik}={\begin{cases}R_{mk}D_{ni},&{\text{if }}k<i\\R_{mk}R_{mi},&{\text{if }}k\geq i\end{cases}}{\Big )}{\Bigg ]}}\end{aligned}}} .
一度注意すると計算されたR多項式が完成し、以下そして計算結果はその後使用されなくなるため、計算自体は無視できますが、実行された場合は、表に示すように、TベクトルとDベクトルの最終値が同一であることを保証することで、S多項式が二乗多項式であること、およびアルゴリズムが正しく実行されたことを確認するための妥当性チェックとして使用できます。
「数値因数分解」とは、一般的に、実数または複素数の係数を持つ多項式の因数分解を指し、その係数は概ね浮動小数点数で表現されるため、おおよそしか分からない場合が多い。
複素係数を持つ単変数多項式の場合、因数分解は多項式の根と重複度の数値計算に容易に還元できます。
多変数の場合、係数にランダムな微小摂動を加えると、多くの因数を持つ多項式から始めても、確率1で既約多項式が得られます。したがって、数値因数分解の意味そのものを正確に明確にする必要があります。
させて複素係数を持つ既約因数分解可能な多項式である
どこそして要因は複素係数を持つ既約多項式である。多項式によって近似されるその係数は、の正確な因数分解は一般的に既約であるため、無意味である。の数値因数分解と呼ばれるものにはいくつかの定義がある。
もしそしてが既知である場合、近似因数分解は、 に近い多項式を見つけることから成ります。上記のように因数分解します。因数分解スキームがわからない場合は、必要となる。例えば、多項式の既約因子の数は、そのルパート行列の零性である。[ 11 ]したがって、重複度数値的な最大公約数計算とルパート行列上のランク表示による平方因子を用いない因数分解によって識別することができる。
数値因数分解のためのアルゴリズムがいくつか開発され、実装されており、これは継続的な研究テーマとなっている。[ 12 ] [ 13 ]
{{cite book}}: CS1メンテナンス: 場所 (リンク){{cite journal}}: CS1 maint: 複数の名前: 著者リスト (リンク){{cite journal}}: CS1 maint: 複数の名前: 著者リスト (リンク) (学部レベルの数学を履修した読者が閲覧可能)