function [ xx, net ] = xalfa3 ( x, xx, npl, m, maxet, epsln )

%*****************************************************************************80
%
%% XALFA3 computes a Chebyshev series raised to the (-1/M) power.
%
%  Discussion:
%
%    This routine estimates the Chebyshev series for a function raised
%    to the (-1/M) power, given the Chebyshev series for the function,
%    and a starting estimate for the desired series.
%
%    The convergence is of order three.
%
%  Licensing:
%
%    This code is distributed under the GNU LGPL license.
%
%  Modified:
%
%    21 September 2011
%
%  Author:
%
%    Original FORTRAN77 version by Roger Broucke.
%    MATLAB version by John Burkardt.
%
%  Reference:
%
%    Roger Broucke,
%    Algorithm 446:
%    Ten Subroutines for the Manipulation of Chebyshev Series,
%    Communications of the ACM,
%    October 1973, Volume 16, Number 4, pages 254-256.
%
%  Parameters:
%
%    Input, real X(NPL), the Chebyshev series of the function.
%
%    Input/output, real XX(NPL).  On input, an initial
%    approximation to the Chebyshev series of the function raised to the
%    (-1/M) power.  On output, an improved approximation.
%
%    Input, integer NPL, the number of terms in the 
%    Chebyshev series.
%
%    Input, integer M, determines the exponent (-1/M).
%
%    Input, integer MAXET, the maximum number of iterations.
%
%    Input, real EPSLN, the required precision.
%
%    Output, integer NET, the actual number of iterations.
%
  for jx = 1 : maxet

    ww(1:npl) = x(1:npl);

    for k = 1 : m
      w2 = mltply ( ww, xx, npl );
      ww(1:npl) = w2(1:npl);
    end

    s = - 2.0 + sum ( abs ( ww(1:npl) ) );

    ww(1) = ww(1) - 2.0;
    ww(1:npl) = ww(1:npl) / m;

    w2 = mltply ( ww, ww, npl );

    ww(1:npl) = - ww(1:npl);

    w2(1:npl) = w2(1:npl) * ( m + 1 ) / 2;

    ww(1) = ww(1) + 2.0;

    w2(1:npl) = w2(1:npl) + ww(1:npl);

    ww = mltply ( w2, xx, npl );

    xx(1:npl) = ww(1:npl);

    net = jx;

    if ( abs ( s ) < epsln )
      return
    end

  end

  return
end
