function [ n_data, n, a, x, fx ] = gegenbauer_poly_values ( n_data )

%*****************************************************************************80
%
%% gegenbauer_poly_values() returns some values of the Gegenbauer polynomials.
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    06 August 2004
%
%  Author:
%
%    John Burkardt
%
%  Reference:
%
%    Milton Abramowitz and Irene Stegun,
%    Handbook of Mathematical Functions,
%    US Department of Commerce, 1964.
%
%    Stephen Wolfram,
%    The Mathematica Book,
%    Fourth Edition,
%    Wolfram Media / Cambridge University Press, 1999.
%
%  Input:
%
%    integer N_DATA.  The user sets N_DATA to 0 before the first call.
%
%  Output:
%
%    integer N_DATA.  On each call, the routine increments N_DATA by 1, and
%    returns the corresponding data; when there is no more data, the
%    output value of N_DATA will be 0 again.
%
%    integer N, the order parameter of the function.
%
%    real A, the real parameter of the function.
%
%    real X, the argument of the function.
%
%    real FX, the value of the function.
%
  n_max = 38;

  a_vec = [
     0.5E+00,  0.5E+00,  0.5E+00, ...
     0.5E+00,  0.5E+00,  0.5E+00, ...
     0.5E+00,  0.5E+00,  0.5E+00, ...
     0.5E+00,  0.5E+00,  0.0E+00, ...
     1.0E+00,  2.0E+00,  3.0E+00, ...
     4.0E+00,  5.0E+00,  6.0E+00, ...
     7.0E+00,  8.0E+00,  9.0E+00, ...
    10.0E+00,  3.0E+00,  3.0E+00, ...
     3.0E+00,  3.0E+00,  3.0E+00, ...
     3.0E+00,  3.0E+00,  3.0E+00, ...
     3.0E+00,  3.0E+00,  3.0E+00, ...
     3.0E+00,  3.0E+00,  3.0E+00, ...
     3.0E+00,  3.0E+00 ];
  fx_vec = [
    1.0000000000E+00,   0.2000000000E+00,  -0.4400000000E+00, ...
   -0.2800000000E+00,   0.2320000000E+00,   0.3075200000E+00, ...
   -0.0805760000E+00,  -0.2935168000E+00,  -0.0395648000E+00, ...
    0.2459712000E+00,   0.1290720256E+00,   0.0000000000E+00, ...
   -0.3600000000E+00,  -0.0800000000E+00,   0.8400000000E+00, ...
    2.4000000000E+00,   4.6000000000E+00,   7.4400000000E+00, ...
   10.9200000000E+00,  15.0400000000E+00,  19.8000000000E+00, ...
   25.2000000000E+00,  -9.0000000000E+00,  -0.1612800000E+00, ...
   -6.6729600000E+00,  -8.3750400000E+00,  -5.5267200000E+00, ...
    0.0000000000E+00,   5.5267200000E+00,   8.3750400000E+00, ...
    6.6729600000E+00,   0.1612800000E+00,  -9.0000000000E+00, ...
  -15.4252800000E+00,  -9.6969600000E+00,  22.4409600000E+00, ...
  100.8892800000E+00, 252.0000000000E+00 ];
  n_vec = [
     0,  1,  2, ...
     3,  4,  5, ...
     6,  7,  8, ...
     9, 10,  2, ...
     2,  2,  2, ...
     2,  2,  2, ...
     2,  2,  2, ...
     2,  5,  5, ...
     5,  5,  5, ...
     5,  5,  5, ...
     5,  5,  5, ...
     5,  5,  5, ...
     5,  5 ];
  x_vec = [
    0.20E+00,  0.20E+00,  0.20E+00, ...
    0.20E+00,  0.20E+00,  0.20E+00, ...
    0.20E+00,  0.20E+00,  0.20E+00, ...
    0.20E+00,  0.20E+00,  0.40E+00, ...
    0.40E+00,  0.40E+00,  0.40E+00, ...
    0.40E+00,  0.40E+00,  0.40E+00, ...
    0.40E+00,  0.40E+00,  0.40E+00, ...
    0.40E+00, -0.50E+00, -0.40E+00, ...
   -0.30E+00, -0.20E+00, -0.10E+00, ...
    0.00E+00,  0.10E+00,  0.20E+00, ...
    0.30E+00,  0.40E+00,  0.50E+00, ...
    0.60E+00,  0.70E+00,  0.80E+00, ...
    0.90E+00,  1.00E+00 ];

  if ( n_data < 0 )
    n_data = 0;
  end

  n_data = n_data + 1;

  if ( n_max < n_data )
    n_data = 0;
    n = 0;
    a = 0.0;
    x = 0.0;
    fx = 0.0;
  else
    n = n_vec(n_data);
    a = a_vec(n_data);
    x = x_vec(n_data);
    fx = fx_vec(n_data);
  end

  return
end
