[section:polynomials Polynomials]

[h4 Synopsis]

``
#include <boost/math/tools/polynomial.hpp>
``

   namespace boost{ namespace math{ namespace tools{

   template <class T>
   class polynomial
   {
   public:
      // typedefs:
      typedef typename std::vector<T>::value_type value_type;
      typedef typename std::vector<T>::size_type  size_type;

      // construct:
      polynomial(){}
      template <class U>
      polynomial(const U* data, unsigned order);
      template <class U>
      polynomial(const U& point);
      
      // access:
      size_type size()const;
      size_type degree()const;
      value_type& operator[](size_type i);
      const value_type& operator[](size_type i)const;

      // operators:
      template <class U>
      polynomial& operator +=(const U& value);
      template <class U>
      polynomial& operator -=(const U& value);
      template <class U>
      polynomial& operator *=(const U& value);
      template <class U>
      polynomial& operator +=(const polynomial<U>& value);
      template <class U>
      polynomial& operator -=(const polynomial<U>& value);
      template <class U>
      polynomial& operator *=(const polynomial<U>& value);
   };

   template <class T>
   polynomial<T> operator + (const polynomial<T>& a, const polynomial<T>& b);
   template <class T>
   polynomial<T> operator - (const polynomial<T>& a, const polynomial<T>& b);
   template <class T>
   polynomial<T> operator * (const polynomial<T>& a, const polynomial<T>& b);
   
   template <class T, class U>
   polynomial<T> operator + (const polynomial<T>& a, const U& b);
   template <class T, class U>
   polynomial<T> operator - (const polynomial<T>& a, const U& b);
   template <class T, class U>
   polynomial<T> operator * (const polynomial<T>& a, const U& b);
   
   template <class U, class T>
   polynomial<T> operator + (const U& a, const polynomial<T>& b);
   template <class U, class T>
   polynomial<T> operator - (const U& a, const polynomial<T>& b);
   template <class U, class T>
   polynomial<T> operator * (const U& a, const polynomial<T>& b);
   
   template <class charT, class traits, class T>
   std::basic_ostream<charT, traits>& operator << 
      (std::basic_ostream<charT, traits>& os, const polynomial<T>& poly);

   }}} // namespaces

[h4 Description]

This is a fairly trivial class for polynomial manipulation.

Implementation is currently of the "naive" variety, with O(N^2)
multiplication for example.  This class should not be used in
high-performance computing environments: it is intended for the
simple manipulation of small polynomials, typically generated
for special function approximation.

Advanced manipulations: the FFT, division, GCD, factorisation etc are
not currently provided.  Submissions for these are of course welcome :-)

[endsect][/section:polynomials Polynomials]

[/ 
  Copyright 2006 John Maddock and Paul A. Bristow.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  http://www.boost.org/LICENSE_1_0.txt).
]
