Consider the Fourier transform from begr
to endr of a function defined as a Lagrange
polynomial.
The function through these points is
The integral of f
is
The Integrals are of the form
Define and let so that the integral becomes
Define
So that
The integral is
The code to integrate from the first point to the last in Fortran is in for\AINT.FR
FUNCTION TAINT(XDAT,FDAT,N)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION XDAT(*)
COMPLEX*16 FDAT(*)
C EVALUATES THE INTEGRAL FROM XDAT(1) TO XDAT(N)
C LAGRANGE POLYNOMIAL THROUGH THE
NEAREST 4 POINTS
BEGR=XDAT(1)
ENDR=XDAT(3)
IF(N.LE.4)THEN
IF(N.LT.4)THEN
PRINT*,' AT LEAST 4 POINTS ARE NEEDED
FOR'
PRINT*,' INTERPOLATION'
READ(*,*)ITEST
STOP
ELSE
ENDR=XDAT(4)
ENDIF
ENDIF
TAINT=AINT2(XDAT(1),XDAT(2),XDAT(3),
A XDAT(4),BEGR,ENDR
2 ,FDAT(1),FDAT(2),FDAT(3),FDAT(4))
IF(N.EQ.4)RETURN
DO I=3,N-3
BEGR=XDAT(I)
ENDR=XDAT(I+1)
TAINT=TAINT+
2
AINT2(XDAT(I-1),XDAT(I),XDAT(I+1),XDAT(I+2),BEGR,ENDR,
3 FDAT(I-1),FDAT(I),FDAT(I+1),FDAT(I+2))
ENDDO
BEGR=XDAT(N-2)
ENDR=XDAT(N)
TAINT=TAINT+
2
AINT2(XDAT(N-3),XDAT(N-2),XDAT(N-1),XDAT(N),BEGR,ENDR,
3 FDAT(N-3),FDAT(N-2),FDAT(N-1),FDAT(N))
RETURN
END
FUNCTION
AINT2(SA,SB,SC,SD,BEGR,ENDR,FA,FB,FC,FD)
IMPLICIT REAL*8 (A-H,O-Z)
COMPLEX*16 FA,FB,FC,FD
H=ENDR-BEGR
XMID=(BEGR+ENDR)/2
AINT2=FA*AIHAT2(SB,SC,SD,H,XMID)/((SA-SB)*(SA-SC)*(SA-SD))
2 +FB*AIHAT2(SA,SC,SD,H,XMID)/((SB-SA)*(SB-SC)*(SB-SD))
3 +FC*AIHAT2(SA,SB,SD,H,XMID)/((SC-SA)*(SC-SB)*(SC-SD))
4 +FD*AIHAT2(SA,SB,SC,H,XMID)/((SD-SA)*(SD-SB)*(SD-SC))
RETURN
END
C
FUNCTION AIHAT2(SB,SC,SD,H,XMID)
IMPLICIT REAL*8 (A-H,O-Z)
CAPB=(XMID-SB)
CAPC=(XMID-SC)
CAPD=(XMID-SD)
AIHAT2=H*(CAPB*CAPC*CAPD+H*H*
2(CAPB+CAPC+CAPD)/12)
RETURN
END
In the above let so that
The function G is known on the grid of points found by findfun. In a general integral of the form
make the variable change using a positive definite g
Then