function cx = hermite_poly_phys ( n, x )

%*****************************************************************************80
%
%% HERMITE_POLY_PHYS evaluates the Hermite physicist polynomials at X.
%
%  Differential equation:
%
%    Y'' - 2 X Y' + 2 N Y = 0
%
%  First terms:
%
%      1
%      2 X
%      4 X^2     -  2
%      8 X^3     - 12 X
%     16 X^4     - 48 X^2     + 12
%     32 X^5    - 160 X^3    + 120 X
%     64 X^6    - 480 X^4    + 720 X^2    - 120
%    128 X^7   - 1344 X^5   + 3360 X^3   - 1680 X
%    256 X^8   - 3584 X^6  + 13440 X^4  - 13440 X^2   + 1680
%    512 X^9   - 9216 X^7  + 48384 X^5  - 80640 X^3  + 30240 X
%   1024 X^10 - 23040 X^8 + 161280 X^6 - 403200 X^4 + 302400 X^2 - 30240
%
%  Recursion:
%
%    H(0,X) = 1,
%    H(1,X) = 2*X,
%    H(N,X) = 2*X * H(N-1,X) - 2*(N-1) * H(N-2,X)
%
%  Norm:
%
%    Integral ( -oo < X < oo ) exp ( - X^2 ) * H(N,X)^2 dX
%    = sqrt ( pi ) * 2^N * N!
%
%  Licensing:
%
%    This code is distributed under the GNU LGPL license.
%
%  Modified:
%
%    26 July 2004
%
%  Author:
%
%    John Burkardt
%
%  Reference:
%
%    Milton Abramowitz and Irene Stegun,
%    Handbook of Mathematical Functions,
%    US Department of Commerce, 1964.
%
%  Parameters:
%
%    Input, integer N, the highest order polynomial to compute.
%    Note that polynomials 0 through N will be computed.
%
%    Input, real X, the point at which the polynomials are to be evaluated.
%
%    Output, real CX(1:N+1,1), the values of the first N+1 Hermite
%    polynomials at the point X.
%
  if ( n < 0 )
    cx = [];
    return
  end

  cx = zeros ( n + 1, 1 );

  cx(1) = 1.0;

  if ( n == 0 )
    return
  end

  cx(2) = 2.0 * x;
 
  for i = 2 : n
    cx(i+1) = 2.0 * x * cx(i) - 2.0 * ( i - 1 ) * cx(i-1);
  end
 
  return
end
