f2_abscissas_ab Subroutine

subroutine f2_abscissas_ab(a, b, n, x)

************80

! F2_ABSCISSAS_AB computes Fejer Type 2 abscissas for the interval [A,B].

Licensing:

This code is distributed under the GNU LGPL license.

Modified:

29 December 2007

Author:

John Burkardt

Parameters:

Input, real ( kind = 8 ) A, B, the endpoints of the interval.

Input, integer ( kind = 4 ) N, the order of the rule.

Output, real ( kind = 8 ) X(N), the abscissas.

Arguments

Type IntentOptional Attributes Name
real(kind=8) :: a
real(kind=8) :: b
integer(kind=4) :: n
real(kind=8) :: x(n)

Source Code

subroutine f2_abscissas_ab ( a, b, n, x )

  !*****************************************************************************80
  !
  !! F2_ABSCISSAS_AB computes Fejer Type 2 abscissas for the interval [A,B].
  !
  !  Licensing:
  !
  !    This code is distributed under the GNU LGPL license. 
  !
  !  Modified:
  !
  !    29 December 2007
  !
  !  Author:
  !
  !    John Burkardt
  !
  !  Parameters:
  !
  !    Input, real ( kind = 8 ) A, B, the endpoints of the interval.
  !
  !    Input, integer ( kind = 4 ) N, the order of the rule.
  !
  !    Output, real ( kind = 8 ) X(N), the abscissas.
  !
  implicit none

  integer ( kind = 4 ) n

  real    ( kind = 8 ) a
  real    ( kind = 8 ) b
  integer ( kind = 4 ) i
  real    ( kind = 8 ) :: pi = 3.141592653589793D+00
  real    ( kind = 8 ) theta(n)
  real    ( kind = 8 ) x(n)

  if ( n < 1 ) then
     write ( *, '(a)' ) ' '
     write ( *, '(a)' ) 'F2_ABSCISSAS_AB - Fatal error!'
     write ( *, '(a)' ) '  N < 1.'
     stop
  end if

  do i = 1, n
     theta(i) = real ( n + 1 - i, kind = 8 ) * pi &
          / real ( n + 1,     kind = 8 )
  end do

  x(1:n) = 0.5D+00 * ( ( b + a ) + ( b - a ) * cos ( theta(1:n) ) )

  return
end subroutine f2_abscissas_ab