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