Source: Poly
Keywords: source: poly source

| Prev | Next |  |  |  |  |  | poly.hpp | Headings

Source: Poly
`# ifndef CPPAD_POLY_HPP `
` # define CPPAD_POLY_HPP

    # include <cstddef>  // used to defined size_t
    # include <cppad/utility/check_simple_vector.hpp>

    namespace CppAD {    // BEGIN CppAD namespace

    template <class Type, class Vector>
    Type Poly(size_t k, const Vector &a, const Type &z)
    {	size_t i;
    	size_t d = a.size() - 1;

    	Type tmp;

    	// check Vector is Simple Vector class with Type elements
    	CheckSimpleVector<Type, Vector>();

    	// case where derivative order greater than degree of polynomial
    	if( k > d )
    	{	tmp = 0;
    		return tmp;
    	}
    	// case where we are evaluating a derivative
    	if( k > 0 )
    	{	// initialize factor as (k-1) !
    		size_t factor = 1;
    		for(i = 2; i < k; i++)
    			factor *= i;

    		// set b to coefficient vector corresponding to derivative
    		Vector b(d - k + 1);
    		for(i = k; i <= d; i++)
    		{	factor   *= i;
    			tmp       = factor;
    			b[i - k]  = a[i] * tmp;
    			factor   /= (i - k + 1);
    		}
    		// value of derivative polynomial
    		return Poly(0, b, z);
    	}
    	// case where we are evaluating the original polynomial
    	Type sum = a[d];
    	i        = d;
    	while(i > 0)
    	{	sum *= z;
    		sum += a[--i];
    	}
    	return sum;
    }
    } // END CppAD namespace

# endif`

Input File: omh/poly_hpp.omh