<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE document PUBLIC "-//CNX//DTD CNXML 0.5 plus MathML//EN" "http://cnx.rice.edu/cnxml/0.5/DTD/cnxml_mathml.dtd">
<document xmlns="http://cnx.rice.edu/cnxml" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:bib="http://bibtexml.sf.net/" id="id2248199">
  <name>On Factoring Polynomials of High Degree</name>
  <metadata>
  <md:version>1.11</md:version>
  <md:created>2007/09/11 15:45:35 GMT-5</md:created>
  <md:revised>2008/02/20 19:32:48.731 US/Central</md:revised>
  <md:authorlist>
      <md:author id="cburrus">
      <md:firstname>C.</md:firstname>
      <md:othername>Sidney</md:othername>
      <md:surname>Burrus</md:surname>
      <md:email>csb@rice.edu</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist>
    <md:maintainer id="cburrus">
      <md:firstname>C.</md:firstname>
      <md:othername>Sidney</md:othername>
      <md:surname>Burrus</md:surname>
      <md:email>csb@rice.edu</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist>
    <md:keyword>factor</md:keyword>
    <md:keyword>high degree</md:keyword>
    <md:keyword>Polynomial</md:keyword>
    <md:keyword>Polynomial Club</md:keyword>
    <md:keyword>root</md:keyword>
  </md:keywordlist>

  <md:abstract>Factoring a high degree polynomial has been considered a difficult problem since the beginning of mathematics. We describe the strategies used to attack this problem. The results are from a group called the "Polynomial Club" (Jim Fox, Sidney Burrus, Gary Sitton, and Sven Treitel)</md:abstract>
</metadata>
  <content>
    <section id="uid1">
      <name>Introduction</name>
      <para id="id2248149">Polynomials form one of the oldest classes of mathematical functions
in mathematics with an important history in science, engineering, and other
quantitative fields <cnxn target="bid0">[Pan, 1997]</cnxn>, <cnxn target="bid1">[Pan, 1998]</cnxn>, <cnxn target="bid2">[Traub, 1998]</cnxn>, <cnxn target="bid3">[Derbyshire, 2006]</cnxn>, <cnxn target="bid4">[Sitton, 2003]</cnxn>. Part of the
polynomial's appeal comes from the fact that it may be numerically evaluated
using a finite number of multiplications and additions. Another advantage
it presents is its use in modeling physical processes or complicated mathematical
functions. Polynomials are used to build expansion systems or basis sets in
various vector spaces. Segments of polynomials are used to create splines.
It is worth studying the basic ideas and the variety of applications.</para>
      <para id="id2248190">Polynomials are introduced early in the teaching of algebra as a means of
demonstrating basic principles and methods, e.g. substitution, simplification,
and factoring. Most people are aware that there exist formulas for factoring
quadratic (2nd degree), cubic (3rd degree), and quartic (4th degree) polynomials.
In 1824 the mathematician Niels Abel proved that there is no possible "closed form" solution in terms of basic operations for the general pentic or quintic (5th degree) polynomial or those of
higher degrees. This fact requires the development of effective numerical methods
for iteratively factoring polynomials above degree 4.</para><para id="element-573">The results reported in these modules are from a group at Rice University called the "Polynomial Club" (Jim Fox, Sidney Burrus, Gary Sitton, and Sven Treitel).  The program was designed and written by Jim Fox.</para>
    </section>
    <section id="uid2">
      <name>Basic Definitions</name>
      <para id="id2248550">The definition of an <m:math overflow="scroll"><m:mi>N</m:mi></m:math>th degree polynomial is</para>
      <equation id="uid3">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mi>f</m:mi>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>z</m:mi>
              <m:mo>)</m:mo>
            </m:mrow>
            <m:mo>=</m:mo>
            <m:msub>
              <m:mi>a</m:mi>
              <m:mn>0</m:mn>
            </m:msub>
            <m:mo>+</m:mo>
            <m:msub>
              <m:mi>a</m:mi>
              <m:mn>1</m:mn>
            </m:msub>
            <m:mi>z</m:mi>
            <m:mo>+</m:mo>
            <m:msub>
              <m:mi>a</m:mi>
              <m:mn>2</m:mn>
            </m:msub>
            <m:msup>
              <m:mi>z</m:mi>
              <m:mn>2</m:mn>
            </m:msup>
            <m:mo>+</m:mo>
            <m:mo>⋯</m:mo>
            <m:mo>+</m:mo>
            <m:msub>
              <m:mi>a</m:mi>
              <m:mi>N</m:mi>
            </m:msub>
            <m:msup>
              <m:mi>z</m:mi>
              <m:mi>N</m:mi>
            </m:msup>
            <m:mo>=</m:mo>
            <m:munderover>
              <m:mo>∑</m:mo>
              <m:mrow>
                <m:mi>k</m:mi>
                <m:mo>=</m:mo>
                <m:mn>0</m:mn>
              </m:mrow>
              <m:mi>N</m:mi>
            </m:munderover>
            <m:msub>
              <m:mi>a</m:mi>
              <m:mi>k</m:mi>
            </m:msub>
            <m:msup>
              <m:mi>z</m:mi>
              <m:mi>k</m:mi>
            </m:msup>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2248685">where both <m:math overflow="scroll"><m:mrow><m:mi>f</m:mi><m:mo>(</m:mo><m:mi>z</m:mi><m:mo>)</m:mo></m:mrow></m:math> and <m:math overflow="scroll"><m:mi>z</m:mi></m:math> are complex valued
and the coefficients <m:math overflow="scroll"><m:msub><m:mi>a</m:mi><m:mi>k</m:mi></m:msub></m:math> can be complex but are often real valued. <m:math overflow="scroll"><m:mi>N</m:mi></m:math>,
which is the highest power of <m:math overflow="scroll"><m:mi>z</m:mi></m:math> in the polynomial, is called the
degree (or sometimes the order) of the polynomial. The number of
coefficients is <m:math overflow="scroll"><m:mrow><m:mi>N</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:math>.</para>
      <para id="id2248767">From the various forms of the <emphasis>Fundamental Theorem of Algebra</emphasis>, one
can show that all polynomials can also be expressed in a “factored" form
by</para>
      <equation id="uid4">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mi>f</m:mi>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>z</m:mi>
              <m:mo>)</m:mo>
            </m:mrow>
            <m:mo>=</m:mo>
            <m:msub>
              <m:mi>a</m:mi>
              <m:mi>N</m:mi>
            </m:msub>
            <m:munderover>
              <m:mo>∏</m:mo>
              <m:mrow>
                <m:mi>r</m:mi>
                <m:mo>=</m:mo>
                <m:mn>1</m:mn>
              </m:mrow>
              <m:mi>N</m:mi>
            </m:munderover>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>z</m:mi>
              <m:mo>-</m:mo>
            </m:mrow>
            <m:msub>
              <m:mi>z</m:mi>
              <m:mi>r</m:mi>
            </m:msub>
            <m:mrow>
              <m:mo>)</m:mo>
            </m:mrow>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2247524">where the possibly complex valued <m:math overflow="scroll"><m:msub><m:mi>z</m:mi><m:mi>r</m:mi></m:msub></m:math> are called the “zeros" of the
polynomial since <m:math overflow="scroll"><m:mrow><m:mi>f</m:mi><m:mo>(</m:mo><m:msub><m:mi>z</m:mi><m:mi>k</m:mi></m:msub><m:mo>)</m:mo><m:mo>=</m:mo><m:mn>0</m:mn></m:mrow></m:math>. Because the zeros are not necessarily
distinct, a unique form of (<cnxn target="uid4"/>) is given by</para>
      <equation id="uid5">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mi>f</m:mi>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>z</m:mi>
              <m:mo>)</m:mo>
            </m:mrow>
            <m:mo>=</m:mo>
            <m:msub>
              <m:mi>a</m:mi>
              <m:mi>N</m:mi>
            </m:msub>
            <m:munderover>
              <m:mo>∏</m:mo>
              <m:mrow>
                <m:mi>k</m:mi>
                <m:mo>=</m:mo>
                <m:mn>1</m:mn>
              </m:mrow>
              <m:mi>L</m:mi>
            </m:munderover>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>z</m:mi>
              <m:mo>-</m:mo>
            </m:mrow>
            <m:msub>
              <m:mi>z</m:mi>
              <m:mi>k</m:mi>
            </m:msub>
            <m:msup>
              <m:mo>)</m:mo>
              <m:msub>
                <m:mi>M</m:mi>
                <m:mi>k</m:mi>
              </m:msub>
            </m:msup>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2249212">where <m:math overflow="scroll"><m:msub><m:mi>M</m:mi><m:mi>k</m:mi></m:msub></m:math> is the multiplicity of the <m:math overflow="scroll"><m:msup><m:mi>k</m:mi><m:mrow><m:mi>t</m:mi><m:mi>h</m:mi></m:mrow></m:msup></m:math> zero, <m:math overflow="scroll"><m:mi>L</m:mi></m:math> is the number
of distinct zeros, and <m:math overflow="scroll"><m:mrow><m:msub><m:mo>∑</m:mo><m:mi>k</m:mi></m:msub><m:msub><m:mi>M</m:mi><m:mi>k</m:mi></m:msub><m:mo>=</m:mo><m:mi>N</m:mi></m:mrow></m:math>. The first degree polynomials
<m:math overflow="scroll"><m:mrow><m:mo>(</m:mo><m:mi>z</m:mi><m:mo>-</m:mo><m:msub><m:mi>z</m:mi><m:mi>k</m:mi></m:msub><m:mo>)</m:mo></m:mrow></m:math> in (<cnxn target="uid4"/>) and (<cnxn target="uid5"/>) are called the factors of <m:math overflow="scroll"><m:mrow><m:mi>f</m:mi><m:mo>(</m:mo><m:mi>z</m:mi><m:mo>)</m:mo></m:mrow></m:math>. Note the analogy between polynomials and integers.
Indeed, multiplying two polynomials is the same operation as multiplying
two integers (except for carrying) or convolving two number sequences.</para>
      <para id="id2249340">Creating (<cnxn target="uid3"/>) from (<cnxn target="uid4"/>) or (<cnxn target="uid5"/>) is fairly straight
forward and requires only a finite number of arithmetic operations, but
finding (<cnxn target="uid4"/>) or (<cnxn target="uid5"/>) from (<cnxn target="uid3"/>) is difficult. That
process is called “factoring" the polynomial and is the topic of these
notes. Actually, the effects of finite precision arithmetic sometimes make
the "unfactoring" process of calculating (<cnxn target="uid3"/>) from (<cnxn target="uid4"/>) or
(<cnxn target="uid5"/>) poorly defined because it depends on the sequence order of
combining the zeros.</para>
      <para id="id2249396">One can look at the zeros of a polynomial as being a second
parameterization of the polynomial with the coefficient form of
(<cnxn target="uid3"/>) being the first. A combination would be expressing an even
degree polynomial as the product of two <m:math overflow="scroll"><m:mrow><m:mi>N</m:mi><m:mo>/</m:mo><m:mn>2</m:mn></m:mrow></m:math> degree polynomials.
Factoring and “unfactoring" can create a variety of parameterizations for
both discrete-time signals and systems.</para>
    </section>
    <section id="uid6">
      <name>The Four Problems for Polynomials</name>
      <list id="id2249436" type="enumerated"><item>Evaluating the polynomial and its derivatives.
“polyval" in Matlab or <cnxn document="m15099">   Horner's method </cnxn>
</item>
        <item>Factoring the polynomial. “roots" in Matlab
</item>
        <item>Composing the factors. “poly" in Matlab or convolution perhaps using the FFT.
</item>
        <item>Deflating the
polynomial by a root. <cnxn document="m15099">   Horner's method </cnxn> or FFT division.
</item>
      </list>
      <para id="id2249484">If the polynomial is represented in factored form (<cnxn target="uid4"/>), then
the coefficient sum form (<cnxn target="uid3"/>) may be easily found by computing the
product of the <m:math overflow="scroll"><m:mi>M</m:mi></m:math> linear polynomial factors. This is done by multiplying
the linear factors one at a time and collecting all coefficients of like
powers in the product. As will be shown later, this is equivalent to a
cascaded discrete <emphasis>convolution</emphasis> of all of the polynomial coefficients
where the <m:math overflow="scroll"><m:msup><m:mi>r</m:mi><m:mrow><m:mi>t</m:mi><m:mi>h</m:mi></m:mrow></m:msup></m:math> linear polynomial is represented as a doublet set of
two coefficients <m:math overflow="scroll"><m:mrow><m:mo>{</m:mo><m:mo>-</m:mo><m:msub><m:mi>z</m:mi><m:mi>r</m:mi></m:msub><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>}</m:mo></m:mrow></m:math> where the leading coefficient <m:math overflow="scroll"><m:mrow><m:mo>-</m:mo><m:msub><m:mi>z</m:mi><m:mi>r</m:mi></m:msub></m:mrow></m:math> is
usually complex. This computation allows the reconstruction of the
coefficients of the polynomial corresponding to this root set. We call
this process <emphasis>unfactoring</emphasis> but it can lead to large numerical
inaccuracies for a surprisingly small number of terms. The main concern here is with the inverse or factoring problem:
given the coefficient form (<cnxn target="uid3"/>), find the factored form
(<cnxn target="uid4"/>).</para>
      <para id="id2249602">The common case of purely real polynomial coefficients leads to a
simplification: All of the complex roots of a <emphasis>real</emphasis> polynomial occur
in complex <emphasis>conjugate</emphasis> pairs. Given the <m:math overflow="scroll"><m:msup><m:mi>r</m:mi><m:mrow><m:mi>t</m:mi><m:mi>h</m:mi></m:mrow></m:msup></m:math> complex root
<m:math overflow="scroll"><m:mrow><m:msub><m:mi>z</m:mi><m:mi>r</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>x</m:mi><m:mi>r</m:mi></m:msub><m:mo>+</m:mo><m:mi>i</m:mi><m:msub><m:mi>y</m:mi><m:mi>r</m:mi></m:msub></m:mrow></m:math>, its complex conjugate is given by <m:math overflow="scroll"><m:mrow><m:msubsup><m:mi>z</m:mi><m:mi>r</m:mi><m:mo>*</m:mo></m:msubsup><m:mo>=</m:mo><m:msub><m:mi>x</m:mi><m:mi>r</m:mi></m:msub><m:mo>-</m:mo><m:mi>i</m:mi><m:msub><m:mi>y</m:mi><m:mi>r</m:mi></m:msub></m:mrow></m:math>.</para>
      <para id="id2249714">Thus for <m:math overflow="scroll"><m:mrow><m:msub><m:mi>y</m:mi><m:mi>r</m:mi></m:msub><m:mo>≠</m:mo><m:mn>0</m:mn></m:mrow></m:math>, a complex root <m:math overflow="scroll"><m:msub><m:mi>z</m:mi><m:mi>r</m:mi></m:msub></m:math> will always be associated
with its conjugate <m:math overflow="scroll"><m:msubsup><m:mi>z</m:mi><m:mi>r</m:mi><m:mo>*</m:mo></m:msubsup></m:math> to form a conjugate root pair. This pair of
roots represents the product of two linear factors forming a real
quadratic or second degree factor:</para>
      <equation id="uid11">
        <m:math mode="display" overflow="scroll">
          <m:mrow>
            <m:mrow>
              <m:mo>(</m:mo>
              <m:mi>z</m:mi>
              <m:mo>-</m:mo>
            </m:mrow>
            <m:msub>
              <m:mi>z</m:mi>
              <m:mi>r</m:mi>
            </m:msub>
            <m:mrow>
              <m:mo>)</m:mo>
              <m:mo>(</m:mo>
              <m:mi>z</m:mi>
            </m:mrow>
            <m:mo>-</m:mo>
            <m:msubsup>
              <m:mi>z</m:mi>
              <m:mi>r</m:mi>
              <m:mo>*</m:mo>
            </m:msubsup>
            <m:mrow>
              <m:mo>)</m:mo>
              <m:mo>=</m:mo>
              <m:mo>(</m:mo>
            </m:mrow>
            <m:msup>
              <m:mi>x</m:mi>
              <m:mn>2</m:mn>
            </m:msup>
            <m:mo>+</m:mo>
            <m:msup>
              <m:mi>y</m:mi>
              <m:mn>2</m:mn>
            </m:msup>
            <m:mrow>
              <m:mo>)</m:mo>
              <m:mo>-</m:mo>
              <m:mn>2</m:mn>
            </m:mrow>
            <m:msub>
              <m:mi>x</m:mi>
              <m:mi>r</m:mi>
            </m:msub>
            <m:mi>z</m:mi>
            <m:mo>+</m:mo>
            <m:msup>
              <m:mi>z</m:mi>
              <m:mn>2</m:mn>
            </m:msup>
          </m:mrow>
        </m:math>
      </equation>
      <para id="id2249870">From (<cnxn target="uid4"/>) a polynomial may be defined as the product of all of its
factors. If the factors have only real coefficients, then the product of
all the factors will have only real coefficients <m:math overflow="scroll"><m:msub><m:mi>a</m:mi><m:mi>n</m:mi></m:msub></m:math>. Thus only half
of the complex roots need be found, say in the upper complex half-plane
with positive imaginary parts, i.e. <m:math overflow="scroll"><m:mrow><m:msub><m:mi>y</m:mi><m:mi>r</m:mi></m:msub><m:mo>≥</m:mo><m:mn>0</m:mn></m:mrow></m:math>. The associated
conjugate roots in the lower half-plane may be trivially derived by simple
negation of their imaginary parts.</para>
      <para id="id2249920">Most of the results in these modules are based on extensive numerical
experimentation. We have built on existing theory and techniques with
empirically derived rules and algorithms that perform well on well-conditioned
polynomials and, in many cases, specifically applied to signal processing
applications with random coefficients.</para>
    </section>
    <section id="uid12">
      <name>Factoring Polynomials</name>
      <para id="id2249937">Below are three approaches to factoring polynomials:</para>
      <list id="id2249941" type="bulleted"><item><term>Find and Deflate:</term> The usual algorithms for factoring
polynomials starts by guessing or estimating the value of a zero, then
using some descent method on |f(z)|, find a single zero. This zero is
then removed from f(z) by "deflation" and the process repeated on the
reduced degree quotient polynomial. The descent method is often <cnxn document="m15579"> Newton's </cnxn>
method which is implemented with <cnxn document="m15099">   Horner's method </cnxn>.  There may be problems
with error accumulation which, after several deflations, results in
failure. Also, if the zeros are not found and removed in a carefully
chosen order, the quotient polynomial becomes poorly conditioned. This set of procedures is
often simply called <cnxn document="m15579"> Newton's </cnxn> method. Methods presented in these notes
include "Random Argument", "Chosen Argument", and "Pre-Whitening", all of
which try to maintain or improve the conditioning of the quotient
polynomial produced by deflation. The deflation itself must be done in a
"stable" way to prevent error accumulation. In some cases, this involves
using <cnxn document="m15099">   Horner's method </cnxn> and in others, the DFT.
</item>
        <item><term>Eigenvalue Method:</term> If the companion matrix for the polynomial
is created, its eigenvalues are the zeros of the polynomial. Because very
sophisticated algorithms have been developed for finding eigenvalues, this
is a powerful and robust approach. However, it requires considerable
computer memory for the matrices and is computationally inefficient and,
therefore, slow. Matlab uses this approach.
</item>
        <item><term>Grid Search:</term> If one has knowledge from the structure of the
polynomial what regions in the complex plane contain the zeros, a direct
search can be used. Because a large class of polynomials, including those
with random coefficients, have their zeros clusters around the unit
circle, a very efficient polar coordinate grid search can be conducted to
find good estimates for the zeros which are then found accurately by a
Newton's or Leguerre's algorithm. The Lindsey-Fox algorithm uses this
approach. A description of <cnxn document="m15573">    the
  Lindsey-Fox program </cnxn>
</item>
      </list>
      <list id="id2250020" type="enumerated"><name>Bibliography</name>
        <item id="bid3">
J. Derbyshire, 
<cite>Unknown Quantity: A Real and Imaginary History of Algebra.</cite> 
Joseph Henry Press, an imprint of the National Academies Press,
Washington,
2006.
</item>
        <item id="bid0">
V. Y. Pan, 
"Solving a polynomial equation: some history and recent progress". 
<cite>SIAM Review.</cite> 
No. 2, 
Vol. 39, 
June
1997.
pp. 187–220. 
</item>
        <item id="bid1">
V. Y. Pan, 
"Solving Polynomials with Computers". 
<cite>American Scientist.</cite> 
No. 1, 
Vol. 86, 
January-February
1998.
pp. 62–69. 
</item>
        <item id="bid4">
G. Sitton, C. S. Burrus, J. W. Fox, and S. Treitel, 
"Factoring Very High Degree Polynomials in Signal Processing". 
<cite>Signal Processing Magazine</cite>. 
No. 6, 
Vol. 20, 
November
2003.
pp. 27–42. 
</item>
        <item id="bid2">
J. F. Traub, 
"Another Algorithm". 
<cite>American Scientist</cite>. 
No. 2, 
Vol. 86, 
March-April
1998.
pp. 108–109. 
</item>
        <item id="bid2a">
J. M. McNamee
"A Bibliography on Roots of Polynomials",
<cite>J. Comput. Appl. Math.</cite>,
47 (1993) pp. 391-394.
78 (1997). 
110 (1999) pp. 305-306.
</item>
</list>
    </section>
  </content>
</document>
