C Using the real discrete Fourier transform, find the approximate 
C Fourier coefficients to Runge's function on [-1,1] with N=16 and 
C N=17. 
C 
       PARAMETER (MCOEF=17)
       REAL      A(MCOEF/2),B(MCOEF/2),R(MCOEF),WSAVE(3*MCOEF+15)
       REAL      DFTA(MCOEF/2),DFTB(MCOEF/2),C(MCOEF/2),S(MCOEF/2) 
C
C Arithmetic statement function for Runge's function. 
       RUNGE(X) = 1.0/(1+25.0*X*X) 
C 
       X0 = -1.0 
       PI = ASIN(1.0)*2.0
C
       DO 10 N = MCOEF-1,MCOEF 
          CALL EZFFTI (N,WSAVE) 
C Function assumed to be periodic on [-1,1], of length 2.
          DEL = 2.0/N 
          F = 2.0*PI/(N*DEL) 
          DO 1 J = 1,N 
C First sample point at -1, last at 1-DEL
              XJ = (-1.0) + (J-1)*DEL 
              R(J) = RUNGE(XJ) 
C Compute sines and cosines to adjust output of EZFFTF to give
C approximate Fourier coefficients.
              IF (J .LE. N/2) THEN 
                  C(J) = COS(J*F*X0) 
                  S(J) = SIN(J*F*X0) 
              END IF 
    1     CONTINUE 
          CALL EZFFTF (N,R,AZERO,A,B,WSAVE) 
C 
C As a convenience this loop can go to N/2. If N is even last B is 
C zero.
          DO 11 J = 1,N/2 
              DFTA(J) = A(J)*C(J) - B(J)*S(J) 
              DFTB(J) = A(J)*S(J) + B(J)*C(J)  
   11     CONTINUE 
          WRITE (*,*) ' EZFFTF RESULTS FOR N= ' ,N, ' AZERO = ',AZERO
          WRITE (*,*) '  J             DFTA(J)              DFTB(J) '
          DO 12 J = 1,N/2
              WRITE(*,*) J, DFTA(J), DFTB(J)
   12     CONTINUE

          M = 101 
C
          WRITE (*,*) 'FOR BREVITY 101 EVALUATION POINTS OMITTED'
          IF (M.GT.0)GOTO 10
C Evaluate interpolant at 101 points on [-1,1]     
          WRITE (*,*) ' RESULTS FOR N= ',N 
          DO 20 K = 1,M 
              X = -1.0 + 2.0*(K-1.0)/(M-1.0) 
              TN = AZERO 
              DO 19 J = 1,N/2 
                  TN = TN + DFTA(J)*COS(J*F*X) + DFTB(J)*SIN(J*F*X) 
   19         CONTINUE 
              ER = TN - RUNGE(X) 
              WRITE (*,*) X,TN,ER 
   20     CONTINUE 
C
          WRITE (*,*)
C
   10  CONTINUE 
       WRITE (*,*)
       WRITE (*,*) 'REFERENCE RESULTS FROM IBM PC/AT'
       WRITE (*,*)
     *  ' EZFFTF RESULTS FOR N=           17 AZERO =    0.274581'    
       WRITE (*,*)'  J             DFTA(J)              DFTB(J) '
       WRITE (*,*)'           1   0.344243      -0.350539E-07'
       WRITE (*,*)'           2   0.175520      -0.364332E-07'
       WRITE (*,*)'           3   0.969902E-01  -0.295525E-07'
       WRITE (*,*)'           4   0.496441E-01  -0.205552E-07'
       WRITE (*,*)'           5   0.275968E-01  -0.149523E-07'
       WRITE (*,*)'           6   0.132331E-01  -0.103949E-07'
       WRITE (*,*)'           7   0.709945E-02  -0.110340E-07'
       WRITE (*,*)'           8   0.141324E-02  -0.116999E-07'
C
       STOP 
       END  
