<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE document PUBLIC "-//CNX//DTD CNXML 0.5 plus MathML//EN" "http://cnx.rice.edu/technology/cnxml/schema/dtd/0.5/cnxml_mathml.dtd">
<document xmlns="http://cnx.rice.edu/cnxml" xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:bib="http://bibtexml.sf.net/" xmlns:m="http://www.w3.org/1998/Math/MathML" id="new">
  <name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Horner's Method for Evaluating and Deflating Polynomials</name>
  <metadata xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
  <md:version xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">1.6</md:version>
  <md:created xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">2007/09/14 08:43:03 GMT-5</md:created>
  <md:revised xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">2007/11/28 12:20:10.061 US/Central</md:revised>
  <md:authorlist xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
      <md:author xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="cburrus">
      <md:firstname xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">C.</md:firstname>
      <md:othername xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Sidney</md:othername>
      <md:surname xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Burrus</md:surname>
      <md:email xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">csb@rice.edu</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
    <md:maintainer xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="cburrus">
      <md:firstname xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">C.</md:firstname>
      <md:othername xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Sidney</md:othername>
      <md:surname xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Burrus</md:surname>
      <md:email xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">csb@rice.edu</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">deflate polynomial</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">evaluate polynomial</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Horner's method</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">nested evaluation</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Newton's method</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">polynomial</md:keyword>
    <md:keyword xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">synthetic division</md:keyword>
  </md:keywordlist>

  <md:abstract xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Horner's method is a standard minimum arithmetic method for evaluating and deflating polynomials.  It can also efficiently evaluate various order derivatives of a polynomial, therefore is often used as part of Newton's method.  This note tries to develop the various techniques called Horner's method, nested evaluation, and synthetic division in a common framework using a recursive structure and difference equations.  There is a similarity to Goertzel's algorithm for the DFT, Z-transform inversion by division, and Pade's and Prony's methods.  This approach also allows a straight forward explanation of "stability" or numerical errors of the algorithms.  Matlab implementations are given. This note came from the work of the "Polynomial Club" at Rice: Burrus, Fox, Sitton, and Treitel.</md:abstract>
</metadata>
  <content xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
<section xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="sec1"><name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Polynomials</name>
    <para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="element-773">Polynomials are one of the oldest classes of mathematical functions with an important history in mathematics, science, engineering, and other quantitative fields [1].  Part of the polynomial's appeal comes from the fact that it may be numerically evaluated using a finite number of multiplications and additions.  In the processes of factoring, evaluating, and deflating polynomials, Horner's methods are central and are the focus of this note.</para><para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="poly1">Any Nth degree polynomial can be written in <term xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">coefficient</term> form as:
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn1">
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
  <m:ci type="fn"><m:msub><m:mi>f</m:mi><m:mi>N</m:mi></m:msub></m:ci>
  <m:ci>a</m:ci> <m:ci>z</m:ci>
 </m:apply>
 <m:apply><m:plus/>
  <m:ci>
    <m:msub><m:mi>a</m:mi><m:mn>0</m:mn></m:msub></m:ci>
  <m:apply><m:times/>
  <m:ci>
    <m:msub><m:mi>a</m:mi><m:mn>1</m:mn></m:msub></m:ci>
    <m:ci>z</m:ci>
  </m:apply>
  <m:apply><m:times/>
    <m:ci><m:msub><m:mi>a</m:mi><m:mn>2</m:mn></m:msub></m:ci>
    <m:apply><m:power/>
      <m:ci>z</m:ci><m:cn>2</m:cn>
    </m:apply>
  </m:apply>
  <m:mi>...</m:mi>
  <m:apply><m:times/>
    <m:ci><m:msub><m:mi>a</m:mi><m:mi>N</m:mi></m:msub></m:ci>
    <m:apply><m:power/>
       <m:ci>z</m:ci><m:ci>N</m:ci>
    </m:apply>
  </m:apply>
 </m:apply>
</m:apply>
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah1">
can be written in a <term xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">nested</term> form as:
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn2">
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
 <m:ci type="fn"><m:msub><m:mi>f</m:mi><m:mi>N</m:mi></m:msub></m:ci>
  <m:ci>a</m:ci> <m:ci>z</m:ci>
 </m:apply>
 <m:apply><m:plus/>
   <m:ci><m:msub><m:mi>a</m:mi><m:mn>0</m:mn></m:msub></m:ci>
   <m:apply><m:times/> 
       <m:ci>z</m:ci>
       <m:apply><m:plus/>
           <m:ci><m:msub><m:mi>a</m:mi><m:mn>1</m:mn></m:msub></m:ci>
           <m:apply><m:times/> 
               <m:ci>z</m:ci>
               <m:apply><m:plus/>
                   <m:ci><m:msub><m:mi>a</m:mi><m:mn>2</m:mn></m:msub></m:ci>
                   <m:mi>...</m:mi>
                   <m:apply><m:times/>
                       <m:ci>z</m:ci>
                       <m:apply><m:plus/>
                           <m:ci type="vector">
                             <m:msub>
                             <m:mi>a</m:mi>
                             <m:mrow>
                              <m:mi>N</m:mi>
                              <m:mo>-</m:mo>
                              <m:mn>1</m:mn>
                             </m:mrow>
                             </m:msub>
                           </m:ci>
                           <m:apply><m:times/>
                              <m:ci>z</m:ci>
                              <m:ci><m:msub>
                                <m:mi>a</m:mi>
                                <m:mi>N</m:mi>
                              </m:msub>
                              </m:ci>
                           </m:apply>
                       </m:apply>
                   </m:apply>
               </m:apply>
           </m:apply>
       <m:mi>...</m:mi> 
       </m:apply>
    </m:apply>
 </m:apply>
</m:apply>
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah2">
or nested in a different order as:
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn3">
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
<m:ci type="fn"><m:msub><m:mi>f</m:mi><m:mi>N</m:mi></m:msub></m:ci>
    <m:ci>a</m:ci> <m:ci>z</m:ci>
 </m:apply>
 <m:apply><m:plus/>
   <m:apply><m:times/> 
       <m:ci>z</m:ci>
       <m:apply><m:plus/>
       <m:apply><m:times/>
           <m:mi>...</m:mi> 
           <m:ci>z</m:ci>
           <m:apply><m:plus/>
             <m:apply><m:times/>
                 <m:ci>z</m:ci>
                 <m:apply><m:plus/>
                    <m:apply><m:times/>
                        <m:ci>z</m:ci>
                        <m:ci><m:msub><m:mi>a</m:mi><m:mi>N</m:mi></m:msub></m:ci>
                    </m:apply>
                    <m:ci type="vector">
                    <m:msub>
                    <m:mi>a</m:mi>
                    <m:mrow>
                      <m:mi>N</m:mi>
                      <m:mo>-</m:mo>
                      <m:mn>1</m:mn>
                    </m:mrow>
                    </m:msub></m:ci>  
                 </m:apply>
             </m:apply>
             <m:ci type="vector">
                    <m:msub>
                    <m:mi>a</m:mi>
                    <m:mrow>
                      <m:mi>N</m:mi>
                      <m:mo>-</m:mo>
                      <m:mn>2</m:mn>
                    </m:mrow>
                    </m:msub></m:ci>
           </m:apply>
       </m:apply>
       <m:mi>...</m:mi>
       </m:apply>
   </m:apply>
  <m:ci><m:msub><m:mi>a</m:mi><m:mn>0</m:mn></m:msub></m:ci>
 </m:apply>
</m:apply>
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah3">
and in a <term xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">factored</term> form as:
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn4"><m:math display="block">
  <m:apply>
    <m:eq/>
    <m:apply>
      <m:ci type="fn">
        <m:mi>f</m:mi>
      </m:ci>
      <m:ci>z</m:ci>
    </m:apply>
    <m:apply>
      <m:times/>
      <m:ci>
        <m:msub>
          <m:mi>a</m:mi>
          <m:mi>N</m:mi>
        </m:msub>
      </m:ci>
      <m:apply>
        <m:product/>
        <m:bvar>
          <m:ci>d</m:ci>
        </m:bvar>
        <m:lowlimit>
          <m:cn>1</m:cn>
        </m:lowlimit>
        <m:uplimit>
          <m:ci>D</m:ci>
        </m:uplimit>
        <m:apply>
          <m:power/>
          <m:apply>
            <m:minus/>
            <m:ci>z</m:ci>
            <m:ci>
              <m:msub>
                <m:mi>z</m:mi>
                <m:mi>d</m:mi>
              </m:msub>
            </m:ci>
          </m:apply>
          <m:ci><m:msub>
          <m:mi>Q</m:mi>
          <m:mi mathsize="small">d</m:mi>
          </m:msub></m:ci>
         </m:apply>
      </m:apply>
    </m:apply>
  </m:apply>
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah4">
where <m:math><m:ci><m:msub><m:mi>Q</m:mi><m:mi>d</m:mi></m:msub></m:ci></m:math> 
is the multiplicity of the <m:math><m:ci><m:msup><m:mi>d</m:mi><m:mi>th</m:mi></m:msup></m:ci></m:math> 
zero, 
<m:math><m:ci>D</m:ci></m:math> 
is the number of distinct zeros, and 
<m:math>
<m:apply>
 <m:eq/>
 <m:apply><m:sum/>
           <m:bvar><m:ci>d</m:ci></m:bvar>
           <m:lowlimit><m:cn>1</m:cn></m:lowlimit>
           <m:uplimit><m:ci>D</m:ci></m:uplimit>
           <m:msub><m:ci>Q</m:ci><m:ci>d</m:ci></m:msub>
 </m:apply>
 <m:ci>N</m:ci>
</m:apply>
</m:math>.
</para>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah5">
The polynomial can be written in a first order <term xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">remainder</term> form as:
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn5">
<m:math>
<m:apply>
<m:eq/>
 <m:apply>
<m:ci type="fn"><m:msub><m:mi>f</m:mi><m:mi>N</m:mi></m:msub></m:ci>
 <m:ci>a</m:ci> <m:ci>z</m:ci>
 </m:apply>
 <m:apply><m:plus/>
  <m:apply><m:times/>
    <m:apply>
      <m:ci type="fn"><m:msub><m:mi>q</m:mi><m:mi>N-1</m:mi></m:msub></m:ci>
      <m:ci>b</m:ci> <m:ci>z</m:ci>
    </m:apply>
    <m:apply><m:minus/>
       <m:ci>z</m:ci>
       <m:ci><m:msub><m:mi>z</m:mi><m:mn>0</m:mn></m:msub></m:ci>
    </m:apply>
  </m:apply>
  <m:ci>R</m:ci>
 </m:apply>
</m:apply> 
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah6">
where
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn6">
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
<m:ci type="fn"><m:msub><m:mi>q</m:mi><m:mi>N-1</m:mi></m:msub></m:ci>
  <m:ci>b</m:ci> <m:ci>z</m:ci>
 </m:apply>
 <m:apply><m:plus/>
  <m:ci><m:msub><m:mi>b</m:mi><m:mn>0</m:mn></m:msub></m:ci>
  <m:apply><m:times/>
    <m:ci><m:msub><m:mi>b</m:mi><m:mn>1</m:mn></m:msub></m:ci>
    <m:ci>z</m:ci>
  </m:apply>
  <m:apply><m:times/>
    <m:ci><m:msub><m:mi>b</m:mi><m:mn>2</m:mn></m:msub></m:ci>
    <m:apply><m:power/>
      <m:ci>z</m:ci><m:cn>2</m:cn>
    </m:apply>
  </m:apply>
  <m:mi>...</m:mi>
  <m:apply><m:times/>
    <m:ci type="vector">
     <m:msub>
      <m:mi>b</m:mi>
      <m:mrow>
       <m:mi>N</m:mi>
       <m:mo>-</m:mo>
       <m:mn>1</m:mn>
      </m:mrow>
     </m:msub>
    </m:ci>
    <m:apply><m:power/>
       <m:ci>z</m:ci><m:apply><m:minus/><m:ci>N</m:ci><m:cn>1</m:cn></m:apply>
    </m:apply>
  </m:apply>
 </m:apply>
</m:apply>
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah7">
is the quotient polynomial obtained when 
<m:math><m:apply>
  <m:ci type="fn"><m:msub><m:mi>f</m:mi><m:mi>N</m:mi></m:msub></m:ci>
  <m:ci>a</m:ci> <m:ci>z</m:ci>
 </m:apply></m:math> 
is divided by <m:math><m:apply><m:minus/><m:ci>z</m:ci><m:ci><m:msub><m:mi>z</m:mi><m:mn>0</m:mn></m:msub></m:ci></m:apply></m:math> and the remainder is a constant easily seen to be the value
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn7">
<m:math>
<m:apply>
 <m:eq/>
 <m:ci>R</m:ci> 
 <m:apply>
<m:ci type="fn"><m:msub><m:mi>f</m:mi><m:mi>N</m:mi></m:msub></m:ci>
 <m:ci>a</m:ci><m:ci><m:msub><m:mi>z</m:mi><m:mn>0</m:mn></m:msub></m:ci>
 </m:apply>
</m:apply>
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah8">If 
<m:math><m:ci><m:msub><m:mi>z</m:mi><m:mn>0</m:mn></m:msub></m:ci></m:math> is a zero of 
 <m:math><m:apply>
   <m:ci type="fn"><m:msub><m:mi>f</m:mi><m:mi>N</m:mi></m:msub></m:ci>
     <m:ci>z</m:ci>
   </m:apply>
 </m:math>
, then 
<m:math><m:apply><m:eq/><m:ci>R</m:ci><m:cn>0</m:cn></m:apply></m:math>
and 
<m:math>
<m:apply>
<m:ci type="fn">
 <m:msub>
  <m:mi>q</m:mi>
  <m:mrow>
   <m:mi>N</m:mi>
   <m:mo>-</m:mo>
   <m:mn>1</m:mn>
  </m:mrow>
 </m:msub>
</m:ci>
<m:ci>z</m:ci>
</m:apply>
</m:math>
contains the same zeros as
<m:math>
<m:apply>
   <m:ci type="fn"><m:msub><m:mi>f</m:mi><m:mi>N</m:mi></m:msub></m:ci>
   <m:ci>z</m:ci>
</m:apply>
</m:math>
except for the one at 
<m:math><m:ci><m:msub><m:mi>z</m:mi><m:mn>0</m:mn></m:msub></m:ci></m:math>
. A more general formulation of (5) is:
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn8">
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
<m:ci type="fn"><m:msub><m:mi>f</m:mi><m:mi>N</m:mi></m:msub></m:ci>
  <m:ci>a</m:ci><m:ci>z</m:ci>
 </m:apply>
 <m:apply><m:plus/>
    <m:apply><m:times/>
      <m:apply>
       <m:ci type="fn"><m:msub><m:mi>q</m:mi>
         <m:mrow>
            <m:mi>N</m:mi>
            <m:mo>-</m:mo>
            <m:mi>M</m:mi>
         </m:mrow>
       </m:msub></m:ci>
       <m:ci>b</m:ci><m:ci>z</m:ci>
      </m:apply>  
      <m:apply>
       <m:ci type="fn"><m:msub><m:mi>d</m:mi><m:mi>M</m:mi></m:msub></m:ci>
       <m:ci>c</m:ci><m:ci>z</m:ci>
      </m:apply>
    </m:apply>
    <m:apply>
      <m:ci type="fn">R</m:ci>
      <m:ci>z</m:ci>
    </m:apply>
 </m:apply>
</m:apply>
</m:math>
</equation>

<list xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="polyProbs" type="enumerated"><name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">There are four polynomial problems that are often posed:</name>
  <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
    <term xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Factor:</term> Given the coefficients  
     <m:math><m:ci><m:msub><m:mi>a</m:mi><m:mi>k</m:mi></m:msub></m:ci></m:math>
    , find the roots or zeros
     <m:math><m:ci><m:msub><m:mi>z</m:mi><m:mi>r</m:mi></m:msub></m:ci></m:math>
    .  Matlab command: <code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">roots()</code>
   </item>
   <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
   <term xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Unfactor:</term> Given the zeros  
     <m:math><m:ci><m:msub><m:mi>z</m:mi><m:mi>r</m:mi></m:msub></m:ci></m:math>
    , find the coefficients
     <m:math><m:ci><m:msub><m:mi>a</m:mi><m:mi>k</m:mi></m:msub></m:ci></m:math>
    .  Matlab command: <code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">poly()</code>
   </item>
   <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
   <term xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Evaluate:</term> Given the coefficients or zeros and
     <m:math><m:ci><m:msub><m:mi>z</m:mi><m:mn>0</m:mn></m:msub></m:ci></m:math>
    , find the value of the polynomial at
   <m:math>
   <m:apply><m:eq/>
     <m:ci>z</m:ci> 
     <m:ci><m:msub><m:mi>z</m:mi><m:mn>0</m:mn></m:msub></m:ci>
   </m:apply>
   </m:math>
   ,
   <m:math>
   <m:apply><m:ci type="fn">f</m:ci>
      <m:ci><m:msub><m:mi>z</m:mi><m:mn>0</m:mn></m:msub></m:ci>
   </m:apply>
   </m:math>
   (or the value of the derivative of the polynomial at 
   <m:math>
   <m:apply><m:eq/>
     <m:ci>z</m:ci> 
     <m:ci><m:msub><m:mi>z</m:mi><m:mn>0</m:mn></m:msub></m:ci>
   </m:apply>
   </m:math>
   ,
   <m:math>
   <m:apply><m:diff/>
   <m:apply><m:ci type="fn">f</m:ci>
      <m:msub><m:mi>z</m:mi><m:mn>0</m:mn></m:msub>
   </m:apply>
   </m:apply>
   </m:math>
    .  Matlab command: <code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">polyval()</code>
   </item>
   <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">
   <term xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Deflate:</term> Given a polynomial and one of its roots, find the polynomial   
   containing the other roots.
   </item>
</list>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="summary">
Horner's methods are important for evaluation and deflation, therefore, for factoring. For many high degree polynomial factoring schemes, it is important to use stable evaluation and deflation and to deflate in an order that maximizes the conditioning of the quotient. Unfactoring is simply the multiplying of the factors to obtain the polynomial but, because of round-off error, the order of multiplication is important. As an alternative, the FFT/DFT can be used to unfactor and evaluate.  Of the four, only factoring is nonlinear and it is the most difficult.  In many strategies, factoring uses the other three. For implementation of any of the four, the number of arithmetic operations required will determine the speed of execution and stability and conditioning will affect the error characteristics.
</para>
</section>
<section xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="sec2"><name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Evaluate the Polynomial and Its Derivatives</name>
    <para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="fwdeval">From the structure of the nested forms in (2) and (3), one can formulate a recursive relation which is also a linear first order difference equation:
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="egn9">
<m:math>
<m:apply>
  <m:eq/>
     <m:msub><m:ci>x</m:ci>
        <m:apply><m:plus/>
        <m:ci>k</m:ci><m:cn>1</m:cn>
        </m:apply>
     </m:msub>
     <m:apply><m:plus/>
         <m:apply><m:times/>
           <m:ci>z</m:ci>
           <m:msub><m:ci>x</m:ci><m:ci>k</m:ci></m:msub>
         </m:apply>
         <m:msub><m:ci>a</m:ci>
                <m:ci>N-1-k</m:ci>
         </m:msub>
     </m:apply>
</m:apply>
<m:mtext>,</m:mtext><m:mspace/> <m:mspace/> <m:mspace/>
<m:apply>
  <m:eq/>
    <m:msub><m:ci>x</m:ci><m:cn>0</m:cn></m:msub>
    <m:msub><m:ci>a</m:ci><m:ci>n</m:ci></m:msub>
</m:apply>
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah10">for
<m:math>
<m:apply><m:eq/>
<m:ci>k</m:ci>
<m:mrow>
<m:mn>0</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mo>...</m:mo><m:mo>,</m:mo>
<m:mi>N</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow>
</m:apply>
</m:math>
with the value of the polynomial at z given by 
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
  <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
  <m:ci>a</m:ci> <m:ci>z</m:ci>
 </m:apply>
 <m:msub><m:ci>x</m:ci><m:ci>n</m:ci></m:msub>
</m:apply>
</m:math>
[3,4,5].
Here the
<m:math><m:msub><m:ci>x</m:ci><m:ci>k</m:ci></m:msub></m:math>
are the values of the successively evaluated bracketed epressions in (2).  Matlab code to evaluate 
<m:math>
<m:apply>
 <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
  <m:ci>a</m:ci> <m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub>
</m:apply>
</m:math>
with coefficients <m:math><m:ci>a</m:ci></m:math> is given by:
</para>
<figure xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah11">
<code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="block">
   m = length(a);     % poly degree plus one: N+1
   f = a(1);          % initial condition
   for k = 2:m        % iterative Horner's algorithm
     f=z*f + a(k);    % recursive evaluation of f(z)
   end
</code>
<caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Program 1. Forward Evaluation of Polynomial</caption>
</figure>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="remember">Remember that Matlab stores polynomial coefficients in the reverse order of the notation used by many writers and the reverse of that shown in (1) and starts indexing with 1 rather than 0.
</para>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="dsp">
This formulation is very efficient if implemented with the "multiplicity-accumulate" single-cycle instruction of several DSP chips and some microprocessors.
</para>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="summary2">The nested forms of (2) and (3), the remainder form of (5), and the recursive from of (9) are all versions of Horner's method [2,5,6] or synthetic division.  There are also similarities to the Goertzel algoirthm to evaluate the DFT, the Padé or Prony method and inversion of z-transforms by division.  Indeed, all of these methods convert an evaluation into a recursion and then into a difference equation which has considerable literature [7].  While in some cases it is possible to reduce the number of multiplications used by Horner in polynomial evaluation, it is generally a small gain and accompanied by an increase in the number of additions and the complexity of the algorithm.  If preprocessing of the polynomial coefficients is not used, Horner gives a minimum arithmetic evaluation [3,5].
</para>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="differentiate">If we differentiate (5), we get:
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn10"><m:math>
<m:apply>
 <m:eq/>
 <m:apply>
  <m:diff/><m:apply>
    <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
  <m:ci>a</m:ci><m:ci>z</m:ci></m:apply>
 </m:apply>
 <m:apply><m:plus/>
      <m:apply>
       <m:ci type="fn"><m:msub><m:ci>q</m:ci><m:ci>N-1</m:ci></m:msub></m:ci>
       <m:ci>b</m:ci><m:ci>z</m:ci>
      </m:apply>  
      <m:apply><m:times/>
       <m:apply>
        <m:apply><m:diff/>
         <m:ci type="fn"><m:msub><m:ci>q</m:ci><m:ci>N-1</m:ci></m:msub></m:ci>
        </m:apply>
        <m:ci>b</m:ci><m:ci>z</m:ci>
       </m:apply>
       <m:apply><m:minus/>
         <m:ci>z</m:ci>
         <m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub>
       </m:apply>
    </m:apply>
 </m:apply>
</m:apply>
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah15">
which, if evaluated at
<m:math><m:apply><m:eq/><m:ci>z</m:ci><m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub></m:apply></m:math>
, gives:
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn11">
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
  <m:apply><m:diff/>
    <m:msub><m:ci type="fn">f</m:ci><m:ci>N</m:ci></m:msub>
  </m:apply>
  <m:ci>a</m:ci><m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub>
 </m:apply>
 <m:apply>
 <m:ci type="fn"><m:msub><m:ci>q</m:ci><m:ci>N-1</m:ci></m:msub></m:ci>
 <m:ci>b</m:ci><m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub>
 </m:apply>  
</m:apply>
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah16">
which can be evaluated by a minor variation of (9).  Thus Horner's method can evaluate an Nth degree polynomial with N multiplications and additions or evaluate it and its derivative with 2N multiplications and additions or avaluate it and its derivative with 2N multiplications and additions.  Note
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
   <m:msub><m:ci type="fn">q</m:ci><m:ci>N-1</m:ci></m:msub>
   <m:ci>a</m:ci><m:ci>z</m:ci>
  </m:apply>
</m:apply>
</m:math>
is not the derivative, but is the value of the derivative at 
<m:math><m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub></m:math>
. The simple Matlab code for this is:
</para>
<figure xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="prog2">
<code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="block">

m = length(a);          % N+1
f = a(1); fp = 0;       % initial conditions
for i = 2:m             % iterative Horner's algorithms
    fp = z * fp + f;    % recursive evaluation of f'(z)
    f = z * f + a(i);   % recursive evaluation of f(z)
end

</code>
<caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Program 2. Forward Evaluation of Polynomial and Its Derivative
</caption>
</figure>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="filter">
This can be made much faster by using the <code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">filter()</code> function in Matlab as:
</para>
<figure xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="prog3">
<code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="block">
N = length(a) - 1;
b = filter(1,[1 -z], a);       % Horner by filter: f(z)
f = b(N+1);
c = filter(1,[1 -z], b(1:N));  % Horner by filter: f'(z)
fp = c(N);
</code>
<caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Program 3. Forward Evaluation of Polynomial and Its Derivative by Filters</caption>
</figure>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="value">From (11) and (6), we see that the value of the derivative of the Nth degree polynomial 
<m:math>
 <m:apply>
 <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
 <m:ci>a</m:ci><m:ci>z</m:ci>
 </m:apply> 
</m:math>
is the value of the 
<m:math><m:msup><m:apply><m:minus/><m:ci>N</m:ci><m:cn>1</m:cn></m:apply><m:csymbol>th</m:csymbol></m:msup></m:math>
degree polynomial
<m:math>
  <m:apply>
 <m:ci type="fn"><m:msub><m:ci>q</m:ci><m:ci>N-1</m:ci></m:msub></m:ci>
 <m:ci>b</m:ci><m:ci>z</m:ci>
 </m:apply> 
</m:math>
with coefficients <m:math><m:msub><m:ci>b</m:ci><m:ci>k</m:ci></m:msub></m:math>
as solutions to the difference equation 
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn12">
<m:math>
<m:apply>
  <m:eq/>
     <m:msub><m:ci>b</m:ci>
        <m:apply><m:plus/>
        <m:ci>k</m:ci><m:cn>1</m:cn>
        </m:apply>
     </m:msub>
     <m:apply><m:plus/>
         <m:apply><m:times/>
           <m:ci>z</m:ci>
           <m:msub><m:ci>b</m:ci><m:ci>k</m:ci></m:msub>
         </m:apply>
         <m:msub><m:ci>a</m:ci>
                <m:ci>N-1-k</m:ci>
         </m:msub>
     </m:apply>
</m:apply>
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah18">
which has the same form as (9) but saving the intermediate values of 
<m:math><m:msub><m:ci>b</m:ci><m:ci>k</m:ci></m:msub></m:math>
. This means that the solution to the difference equation (12) with the 
<m:math><m:ci>N</m:ci></m:math> 
input values of 
<m:math><m:msub><m:ci>a</m:ci><m:ci>k</m:ci></m:msub></m:math>
gives 
<m:math><m:apply><m:minus/><m:ci>N</m:ci><m:cn>1</m:cn></m:apply></m:math>
output values of 
<m:math><m:msub><m:ci>b</m:ci><m:ci>k</m:ci></m:msub></m:math>
followed by the remainder 
<m:math><m:msub><m:ci>R</m:ci><m:cn>1</m:cn></m:msub></m:math>
which is the value of 
<m:math>
 <m:apply>
 <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
 <m:ci>a</m:ci><m:ci>z</m:ci>
 </m:apply> 
</m:math>
.
</para>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="recursive">A similar argument shows that solving (12) with an input of 
<m:math><m:msub><m:ci>b</m:ci><m:ci>k</m:ci></m:msub></m:math>
will give 
<m:math><m:apply><m:minus/><m:ci>N</m:ci><m:cn>2</m:cn></m:apply></m:math>
output values of
<m:math><m:msub><m:ci>c</m:ci><m:ci>k</m:ci></m:msub></m:math>
followed by 
<m:math><m:msub><m:ci>R</m:ci><m:cn>2</m:cn></m:msub></m:math>
which is the value of the derivative of
<m:math>
 <m:apply>
 <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
 <m:ci>a</m:ci><m:ci>z</m:ci>
 </m:apply> 
</m:math>
. Using the 
<m:math><m:msub><m:ci>c</m:ci><m:ci>k</m:ci></m:msub></m:math>
as an input will give 
<m:math><m:apply><m:minus/><m:ci>N</m:ci><m:cn>3</m:cn></m:apply></m:math>
values of 
<m:math><m:msub><m:ci>d</m:ci><m:ci>k</m:ci></m:msub></m:math>
and
<m:math><m:msub><m:ci>R</m:ci><m:cn>3</m:cn></m:msub></m:math>
which is the second derivative. This can be continued 
<m:math><m:ci>N</m:ci></m:math>
times to evaluate the function and all of its
<m:math><m:apply><m:minus/><m:ci>N</m:ci><m:cn>1</m:cn></m:apply></m:math>
derivatives (see <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" target="figure1">Fig 1</cnxn>). These values of 
<m:math><m:msub><m:ci>R</m:ci><m:ci>k</m:ci></m:msub></m:math>
allow the original polynomial to be written as:
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn13">
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
  <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
  <m:ci>a</m:ci> <m:ci>z</m:ci>
 </m:apply>
 <m:apply><m:plus/>
  <m:msub><m:ci>R</m:ci><m:cn>1</m:cn></m:msub>
  <m:apply><m:times/>
    <m:msub><m:ci>R</m:ci><m:cn>2</m:cn></m:msub>
    <m:apply><m:minus/>
      <m:ci>z</m:ci><m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub>
    </m:apply>
  </m:apply>
  <m:apply><m:times/>
    <m:msub><m:ci>R</m:ci><m:cn>3</m:cn></m:msub>
    <m:apply><m:power/>
        <m:apply><m:minus/>
           <m:ci>z</m:ci><m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub>
        </m:apply>
      <m:cn>2</m:cn>
    </m:apply>
  </m:apply>
  <m:csymbol>...</m:csymbol>
  <m:apply><m:times/>
    <m:msub><m:ci>R</m:ci>
       <m:apply><m:plus/><m:ci>N</m:ci><m:cn>1</m:cn></m:apply></m:msub>
    <m:apply><m:power/>
     <m:apply><m:minus/>
       <m:ci>z</m:ci><m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub>
     </m:apply>       
    <m:ci>N</m:ci>
    </m:apply>
  </m:apply>
 </m:apply>
</m:apply>
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah19">
which is a power series expansion [5] around 
<m:math>
 <m:apply><m:eq/>
   <m:ci>z</m:ci>
   <m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub>
  </m:apply>
</m:math>
with the coefficients 
<m:math><m:msub><m:ci>R</m:ci><m:ci>k</m:ci></m:msub></m:math>
being defined in terms of derivatives evaluated at 
<m:math>
 <m:apply><m:eq/>
   <m:ci>z</m:ci>
   <m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub>
  </m:apply>
</m:math>
.
</para>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="loopsoln">The following program evaluates the function and its first and second derivatives in a very compact single loop solution of the basic first order difference equation without saving the coefficients
<m:math><m:msub><m:ci>b</m:ci><m:ci>k</m:ci></m:msub></m:math>
or
<m:math><m:msub><m:ci>c</m:ci><m:ci>k</m:ci></m:msub></m:math>
.
</para>
<figure xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="prog4">
<code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="block">
m = length(a);              % poly degree + 1
f = 0; fp = 0; fpp = 0;     % initial values
for i = 1:m-2               % Horner's algorithm
    f = z*f + a(i);         % recursive evaluation of f(z)
    fp = z*fp + f;          % recursive evaluation of f'(z)
    fpp = z*fpp + fp;       % recursive evaluation of f''(z)
end
f = z*f + a(m-1);
fp = z*fp + f;
f = z*f + a(m);             % Finish evaluations
fpp = 2*fpp;
</code>
<caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Program 4. Forward Evaluation of Polynomial and Two Derivatives
</caption>
</figure>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para10">
Higher order derivatives can be evaluated by a simple extension of this idea.
</para>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para11">
Describing the algorithm as a flow-graph illustrates the recursion as a feedback path with the feedback parameter being
<m:math><m:ci>z</m:ci></m:math>
and shows the structure of evaluating derivatives.
</para>
<figure xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="figure1"><media xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="application/postscript" src="flowgraph5.eps">
    <media xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="image/png" src="flowgraph1.png">
      <param name="width" value="450"/>
      <param name="height" value="120"/>
    </media>
</media>
<caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/"> Flow Graph for Horner's Algorithm </caption></figure>

</section>

<section xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="sec3"><name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Polynomial Deflation</name>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para1a">If
<m:math><m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub></m:math>
is a zero of the polynomial 
<m:math>
 <m:apply>
  <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
  <m:ci>a</m:ci> <m:ci>z</m:ci>
 </m:apply>
</m:math>
, then 
<m:math><m:apply><m:eq/><m:ci>R</m:ci><m:cn>0</m:cn></m:apply></m:math>
and (5) becomes
</para>
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn14a">
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
  <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
  <m:ci>a</m:ci><m:ci>z</m:ci>
 </m:apply>
 <m:apply><m:times/>
    <m:apply> 
  <m:ci type="fn"><m:msub><m:ci>q</m:ci><m:ci>N-1</m:ci></m:msub></m:ci>
       <m:ci>b</m:ci><m:ci>z</m:ci>
    </m:apply>
    <m:apply><m:minus/>
         <m:ci>z</m:ci>
         <m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub>
    </m:apply>
 </m:apply>
</m:apply>
</m:math>
</equation>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="parah31">
with
<m:math>
  <m:apply><m:ci type="fn"><m:msub><m:ci>q</m:ci><m:ci>N-1</m:ci></m:msub></m:ci></m:apply></m:math>
being the 
<m:math><m:apply><m:minus/><m:ci>N</m:ci><m:cn>1</m:cn></m:apply></m:math>
degree polynomial (6) having the same zeros at 
<m:math><m:msub><m:ci type="fn">f</m:ci><m:ci>N</m:ci></m:msub></m:math>
except for the one at 
<m:math>
 <m:apply><m:eq/>
   <m:ci>z</m:ci>
   <m:msub><m:ci>z</m:ci><m:cn>0</m:cn></m:msub>
  </m:apply>
</m:math>
. In other words, Horner's method can also be used to deflate a polynomial with a known zero. A Matlab program that will deflate 
<m:math>
<m:apply> 
<m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
  <m:ci>a</m:ci><m:ci>z</m:ci>
</m:apply>
</m:math>
is given by:
</para>
<figure xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="prog5">
<code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="block">
m = length(a);               % order = one: N+1
b = zeros(1, m-1);
b(1) = a(1);                 % initial conditions
for k = 1:m-2                % iterative Horner's algorithm 
  b(k+1) = z*b(k) + a(k+1);  % recursive deflation of f(z)
end
</code>
<caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Program 5. Forward Deflation of Polynomial
</caption>
</figure>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="element-456"/><para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para2a">or using the more efficient Matlab "filter" command:
</para>
<figure xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="prog6">
<code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="block">
N = length(a) - 1;
b = filter(1,[1 -z, a);   % Deflation by filter
b = b(1:N);
</code>
<caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Program 6. Forward Deflation of Polynomial using Filter
</caption>
</figure>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="element-621"/><para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para3a">Because multiplication of two polynomials is the same operation as the convolution of their coefficients, one can get the same results by multiplying the discrete Fourier transform (DFT)'s of the polynomial coefficients and taking the inverse DFT of the product. This gives an alternative to Horner's algorithm for deflating polynomials and is the technique used in the Lindsey-Fox polynomial factoring scheme [8, 2].  The use of the FFT for deflation or unfactoring of polynomials has very different error characteristics from Horner's method and is often superior. A Matlab program that deflates a polynomial with coefficients
<m:math><m:msub><m:ci>a</m:ci><m:ci>k</m:ci></m:msub></m:math>
by a divisor with coefficients
<m:math><m:msub><m:ci>d</m:ci><m:ci>k</m:ci></m:msub></m:math>
to give a quotient with coefficients
<m:math><m:msub><m:ci>q</m:ci><m:ci>k</m:ci></m:msub></m:math>
using the FFT is:
</para>
<figure xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="prog7">
<code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="block">
m = length(a); md = length(d);
q = ifft(ifft(a)./fft([d,zeros(1,(m-md))]));
</code>
<caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Program 7. Deflation of Polynomial usng the FFT
</caption>
</figure>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="element-506"/><para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para4a">A more general formulaiton of the deflation problem is of the form:
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn15a">
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
    <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>

  <m:ci>a</m:ci><m:ci>z</m:ci>
 </m:apply>
 <m:apply><m:plus/>
 <m:apply><m:times/>
    <m:apply> 
       <m:ci type="fn"><m:msub><m:ci>q</m:ci><m:ci>N-M</m:ci></m:msub></m:ci>
       <m:ci>b</m:ci><m:ci>z</m:ci>
    </m:apply>
    <m:apply> 
       <m:ci type="fn"><m:msub><m:ci>d</m:ci><m:ci>M</m:ci></m:msub></m:ci>
       <m:ci>c</m:ci><m:ci>z</m:ci>
    </m:apply>
 </m:apply>
 <m:apply> 
    <m:ci type="fn">R</m:ci>
       <m:ci>z</m:ci>
    </m:apply>
 </m:apply>
</m:apply>
</m:math>
</equation>
If the factors of 
<m:math>
<m:apply> 
    <m:ci type="fn"><m:msub><m:ci>d</m:ci><m:ci>M</m:ci></m:msub></m:ci>
    <m:ci>z</m:ci>
</m:apply>
</m:math>
are all roots of 
<m:math>
<m:apply> 
    <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
    <m:ci>z</m:ci>
</m:apply>
</m:math>
, then 
<m:math><m:msub><m:ci>q</m:ci>
   <m:apply><m:minus/><m:ci>N</m:ci><m:ci>M</m:ci></m:apply></m:msub></m:math>
contains the others when 
<m:math>
<m:apply><m:eq/>
 <m:apply> 
    <m:ci type="fn">R</m:ci>
       <m:ci>z</m:ci>
 </m:apply>
 <m:cn>0</m:cn>
</m:apply>
</m:math>.
This allows the easy deflation by quadratic factors or other factors that are already known.
</para>
</section>
<section xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="sec4"><name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Stability</name> 
    <para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para1b">Horner's method is implemented by the recursive equation (9) or (12) which, in this form, is seen to be a linear first order constant coefficient difference equation.  There is considerable literature on the stability of linear differential and difference equations [7],  and an equation of this form is known to be stable [9] for 
<m:math>
<m:apply><m:lt/>
  <m:apply><m:abs/><m:ci>z</m:ci></m:apply>
  <m:cn>1</m:cn>
</m:apply>
</m:math>
and unstable for 
<m:math>
<m:apply><m:gt/>
  <m:apply><m:abs/><m:ci>z</m:ci></m:apply>
  <m:cn>1</m:cn>
</m:apply>
</m:math>
.
</para>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para2b">To reduce error accumulation when 
<m:math>
<m:apply><m:gt/>
  <m:apply><m:abs/><m:ci>z</m:ci></m:apply>
  <m:cn>1</m:cn>
</m:apply>
</m:math>
we nest (1) and (2) in still a different way:
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn16">
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
    <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
    <m:ci>a</m:ci> <m:ci>z</m:ci>
 </m:apply>
 <m:apply><m:times/>
   <m:msup><m:ci>z</m:ci><m:ci>N</m:ci></m:msup>
   <m:apply><m:plus/>
     <m:apply><m:times/> 
       <m:msup><m:ci>z</m:ci><m:cn>-1</m:cn></m:msup>
       <m:apply><m:plus/>
       <m:apply><m:times/>
           <m:csymbol>...</m:csymbol> 
           <m:msup><m:ci>z</m:ci><m:cn>-1</m:cn></m:msup>
           <m:apply><m:plus/>
             <m:apply><m:times/>
                 <m:msup><m:ci>z</m:ci><m:cn>-1</m:cn></m:msup>
                 <m:apply><m:plus/>
                    <m:apply><m:times/>
                        <m:msup><m:ci>z</m:ci><m:cn>-1</m:cn></m:msup>
                        <m:msub><m:ci>a</m:ci><m:cn>0</m:cn></m:msub>
                    </m:apply>
                    <m:msub><m:ci>a</m:ci><m:cn>1</m:cn></m:msub>  
                 </m:apply>
             </m:apply>
             <m:csymbol>...</m:csymbol> 
           </m:apply>
       </m:apply>
       <m:msub><m:ci>a</m:ci><m:apply><m:minus/>
                    <m:ci>N</m:ci><m:cn>1</m:cn></m:apply></m:msub>
       </m:apply>
   </m:apply>
  <m:msub><m:ci>a</m:ci><m:cn>N</m:cn></m:msub>
 </m:apply>
</m:apply>
</m:apply>
</m:math>
</equation>
to give an alternate recursive relationship to (9) which is the following difference equation:
<equation xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="eqn17b">
<m:math>
<m:apply>
  <m:eq/>
     <m:msub><m:ci>x</m:ci>
        <m:apply><m:plus/>
        <m:ci>k</m:ci><m:cn>1</m:cn>
        </m:apply>
     </m:msub>
     <m:apply><m:plus/>
         <m:apply><m:times/>
           <m:msup><m:ci>z</m:ci><m:cn>-1</m:cn></m:msup>
           <m:msub><m:ci>x</m:ci><m:ci>k</m:ci></m:msub>
         </m:apply>
         <m:msub><m:ci>a</m:ci>
                <m:apply><m:minus/><m:ci>k</m:ci><m:cn>1</m:cn></m:apply>
         </m:msub>
     </m:apply>
</m:apply>
<m:mtext>,</m:mtext><m:mspace/> <m:mspace/> <m:mspace/>
<m:apply>
  <m:eq/>
    <m:msub><m:ci>x</m:ci><m:cn>0</m:cn></m:msub>
    <m:msub><m:ci>a</m:ci><m:ci>0</m:ci></m:msub>
</m:apply>
</m:math>
</equation>
for 
<m:math>
<m:apply><m:eq/>
<m:ci>k</m:ci>
<m:mrow>
<m:mn>0</m:mn><m:mo>,</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mo>...</m:mo><m:mo>,</m:mo>
<m:mi>N</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow>
</m:apply>
</m:math>
with the value of the polynomial at 
<m:math><m:ci>z</m:ci></m:math>
given by 
<m:math>
<m:apply>
 <m:eq/>
 <m:apply>
    <m:ci type="fn"><m:msub><m:ci>f</m:ci><m:ci>N</m:ci></m:msub></m:ci>
    <m:ci>a</m:ci> <m:ci>z</m:ci>
 </m:apply>
 <m:apply><m:times/>
   <m:msup><m:ci>z</m:ci><m:ci>N</m:ci></m:msup>
   <m:msub><m:ci>x</m:ci><m:ci>N</m:ci></m:msub>
 </m:apply>
</m:apply>
</m:math>
. This equation is stable [7,9] for 
<m:math>
<m:apply><m:gt/>
  <m:apply><m:abs/><m:ci>z</m:ci></m:apply>
  <m:cn>1</m:cn>
</m:apply>
</m:math>
.
</para>   
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para3b">Again, remembering the Matlab index convention, the program for this form of Horner's algorithm is:
</para>
<figure xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="prog8"><code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="block">
m = length(a);        % N+1
f = a(m);             % initial condition
for k = 1:m-1         % iterative Horner's method 
  f = f/z + a(m-k);   % recursive evaluation of f(z)
end
f = (z^(m-1))*f;      % remove the factor of z^{-m+1}
</code>
<caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Program 8. Backward Evaluation of Polynomial which is stable for |z|&gt;1
</caption>
</figure>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="element-680">The same can be done for deflation.</para><para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para4c">This algorithm is equivalent to reversing the order ("flipping") the polynomial coefficients and applying (9) which will give zeros that are the reciprocal of those of the original polynomial [6,2]. Using the standard Matlab commands, this can be done by:
</para>
<figure xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="prog9">
<code xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="block">
m = length(a);
f = (z^(m-1))*polyval(a(m:-1:1),1/z);
</code>
<caption xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Program 9. Backward Evaluation of Polynomial by using Reversed Order Coefficients
</caption>
</figure>
<para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para5c">
It is easy to see that stability is very important when evaluating or deflating high degee polynomials by considering the effects if the degree is as high as one million [2]. Using this difference equation formulation of Horner's methods allows a more general deflation using a quadratic or higher degree divisor polynomial based on (8) and (15) to be easily analysed for stability.
</para>
</section>
<section xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="sec5"><name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Conclusions</name>
         <para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para1">We have seen that polynomial evaluation and deflation can be done by Horner's approach which is the conversion of the problem into a linear difference equation. Indeed, evaluation and first order deflation are accomplished by the same algorithm and the stability is easily controlled.  Horner's methods are used in several basic <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m15579"> Newton </cnxn> type factoring programs such as <cnxn xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" document="m15574"> "broots".</cnxn>  The alternative use of the DFT (FFT) for deflation should always be considered.
    </para>   
    <para xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="para2">
       Having forwards and backwards algorithms allows one to always use a stable evaluation or deflation scheme [10,11,5,12,6,2,9]. If the magnitude of
<m:math><m:ci>z</m:ci></m:math>
where the polynomial is being evaluated (or where the polynomial is being deflated) is less than one, use (9), if it is greater than one, use (17).
</para>
</section>
    <section xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="id-0285867651533">
      <name xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">References </name>
<list xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" type="enumerated" id="id7714441">
        <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">V. Y. Pan. Solving a polynomial equation: some history and recent progress. <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">SIAM Review</cite>, 39(2):187–220, June 1997. </item>
        <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Gary A. Sitton, C. Sidney Burrus, James W. Fox, and Sven Treitel. Factoring very high degree polynomials. <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">IEEE Signal Processing Magazine</cite>, 20(6):27–42, November 2003. </item>
        <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Donald E. Knuth. <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">The Art of Computer Programming, Vol. 2, Seminumerical Algo­rithms</cite>. Addison-Wesley, Reading, MA, third edition, 1997. </item>
        <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">E. J. Barbeau. <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Polynomials</cite>. Springer-Verlag, New York, 1989. </item>
        <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">N. J. Higham. <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Accuracy and Stability of Numerical Algorithms</cite>. SIAM, 1996. Chap­ter 5 on polynomials. </item>
        <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">W. H. Press, B. P.Flannery, S. A. Teukolsky, and W. T. Vetterling. <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Numerical Recipes in Fortran: The Art of Scientiﬁc Computing</cite>. Cambridge University Press, Cambridge, second edition, 1992. </item>
        <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Saber N. Elaydi.<cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">An Introduction to Di</cite><cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">ﬀ</cite><cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">erence Equations</cite>. Springer-Verlag, New York, second edition, 1999. First edition in 1996. </item>
        <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">J. P. Lindsey and James W. Fox. A method of factoring long z-transform polynomials. <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Computational Methods in Geosciences, SIAM, </cite>78–90, 1992. Reprinted in Seismic Source Signature Estimation and Measurement, edited by Osman Osman and Enders Robinson, <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Society of Exploration Geophysicists</cite>, Geophysics Reprint Series no. 18, 712–724, 1996. </item>
        <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">James W. Fox. Improving the accuracy of polynomial evaluation, deﬂation, and root ﬁnding. <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">draft manuscript,</cite> January 14 2002. </item>
        <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Daniela Calvetti and Lothar Reichel. On the evaluation of polynomial coeﬃcients. <cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Numerical Algorithms,</cite> 33:153–161, 2003. </item>
        <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">J. H. Wilkinson.<cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Rounding Errors in Algebraic Processes.</cite> Prentice-Hall, Englewood Cliﬀs, NJ, 1963. Now published by Dover, 1994. </item>
        <item xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/">Forman S. Acton.<cite xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/"> Numerical Methods that Work.</cite> The Mathematical Association of America, Washington, DC, 1990.</item>
      </list>
    </section>
</content>
  
</document>

