C Using complex discrete Fourier transform, find the approximate Fourier C coefficients to Runge's function on [-1,1] with N=16 and N=17. C REAL WSAVE(150) COMPLEX COEFF(0:16), SQTM1 C C Note 0 subscript, which makes indexing easier, allowed in Fortran 77. 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 SQTM1 = CMPLX(0.0,-1.0) C DO 10 N = 16,17 CALL CFFTI (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 = 0,N-1 C First sample point at -1, last at 1-DEL XJ = (-1.0) + J*DEL COEFF(J) = CMPLX(RUNGE(XJ),0.0) 1 CONTINUE CALL CFFTF (N,COEFF,WSAVE) C Returned coefficients must be divided by N for correct normaliziation. C C Note repetition after N/2 in original coefficients. Scaling because C X0 not at origin destroys this to some extent. C WRITE (*,*) ' CFFTF RESULTS FOR N = ' ,N WRITE (*,*) ' CZERO = ',COEFF(0)/N*2 WRITE (*,*) *' J OUTPUT FROM CFFTF, SCALED COEFFICIENTS' DO 11 J = 1,N-1 WRITE (*,'(I5,2E15.6,5X,2E15.6)') * J, COEFF(J), EXP(-SQTM1*J*F*X0) * COEFF(J)/N *2 11 CONTINUE WRITE (*,*) 10 CONTINUE WRITE (*,*) 'REFERENCE RESULTS (PARTIAL) FROM IBM PC/AT' WRITE (*,*) ' CFFTF RESULTS FOR N = 17' WRITE (*,*) ' CZERO = (0.549161,0.000000)' WRITE (*,*) ' . ' WRITE (*,*) ' . ' WRITE (*,*) ' 10 -0.603455E-01 0.568597E-07 ' WRITE (*,*) ' 11 0.112482E+00 -0.293560E-07 ' WRITE (*,*) ' 12 -0.234573E+00 0.245598E-07 ' WRITE (*,*) ' 13 0.421975E+00 -0.271580E-07 ' WRITE (*,*) ' 14 -0.824417E+00 0.349775E-07 ' WRITE (*,*) ' 15 0.149192E+01 -0.488273E-07 ' WRITE (*,*) ' 16 -0.292606E+01 0.421539E-07 ' STOP END