function value = csevl ( x, a, n )

%*****************************************************************************80
%
%% CSEVL evaluates a Chebyshev series.
%
%  Licensing:
%
%    This code is distributed under the GNU LGPL license.
%
%  Modified:
%
%    25 September 2011
%
%  Author:
%
%    MATLAB version by John Burkardt.
%
%  Reference:
%
%    Roger Broucke,
%    Algorithm 446:
%    Ten Subroutines for the Manipulation of Chebyshev Series,
%    Communications of the ACM,
%    Volume 16, Number 4, April 1973, pages 254-256.
%
%  Parameters:
%
%    Input, real X, the evaluation point.
%
%    Input, real CS(N), the Chebyshev coefficients.
%
%    Input, integer N, the number of Chebyshev coefficients.
%
%    Output, real VALUE, the Chebyshev series evaluated at X.
%
  if ( n < 1 )
    fprintf ( 1, '\n' );
    fprintf ( 1, 'CSEVL - Fatal error!\n' );
    fprintf ( 1, '  Number of terms <= 0.\n' );
    error ( 'CSEVL - Fatal error!' )
  end

  if ( 1000 < n )
    fprintf ( 1, '\n' );
    fprintf ( 1, 'CSEVL - Fatal error!\n' );
    fprintf ( 1, '  Number of terms > 1000.\n' );
    error ( 'CSEVL - Fatal error!' )
  end

  if ( x < -1.1 || 1.1 < x )
    fprintf ( 1, '\n' );
    fprintf ( 1, 'CSEVL - Fatal error!\n' );
    fprintf ( 1, '  X outside (-1,+1)\n' );
    fprintf ( 1, '  X = %g\n', x );
    error ( 'CSEVL - Fatal error!' )
  end

  b1 = 0.0;
  b0 = 0.0;

  for i = n : -1 : 1
    b2 = b1;
    b1 = b0;
    b0 = 2.0 * x * b1 - b2 + a(i);
  end

  value = 0.5 * ( b0 - b2 );

  return
end
