function y = r8vec_sct ( n, x )

%*****************************************************************************80
%
%% R8VEC_SCT computes a forward or backward "slow" cosine transform of an R8VEC.
%
%  Discussion:
%
%    This routine is provided for illustration and testing.  It is inefficient
%    relative to optimized routines that use fast Fourier techniques.
%
%      Y(1) = Sum ( 1 <= J <= N ) X(J)
%
%      For 2 <= I <= N-1:
%
%        Y(I) = 2 * Sum ( 1 <= J <= N ) X(J)
%          * cos ( PI * ( I - 1 ) * ( J - 1 ) / ( N - 1 ) )
%
%      Y(N) = Sum ( X(1:N:2) ) - Sum ( X(2:N:2) )
%
%    Applying the routine twice in succession should yield the original data,
%    multiplied by 2 * ( N + 1 ).  This is a good check for correctness
%    and accuracy.
%
%  Licensing:
%
%    This code is distributed under the GNU LGPL license.
%
%  Modified:
%
%    27 February 2010
%
%  Author:
%
%    John Burkardt
%
%  Parameters:
%
%    Input, integer N, the number of data values.
%
%    Input, real X(N), the data sequence.
%
%    Output, real Y(N), the transformed data.
%
  for i = 1 : n

    y(i) = x(1) / 2.0;

    for j = 2 : n - 1
      angle = pi * mod ( ( i - 1 ) * ( j - 1 ), 2 * ( n - 1 ) ) / ( n - 1 );
      y(i) = y(i) + x(j) * cos ( angle );
    end

    j = n;

    angle = pi * mod ( ( i - 1 ) * ( j - 1 ), 2 * ( n - 1 ) ) / ( n - 1 );

    y(i) = y(i) + x(n) * cos ( angle ) / 2.0;

  end

  y(1:n) = 2.0 * y(1:n) * sqrt ( n / ( n - 1 ) );

  return
end
