|
DINT_BODE Library "JINRLIB" D112
QINT_BODE
Author: O.Chuluunbaatar
Language: Fortran
INTEGRATION OF THE ONE VARIABLE FUNCTION
BY THE BODE QUADRATURE FORMULA
The subroutines DINT_BODE and QINT_BODE calculate
integrals of the one independent variable function
by the Bode quadrature formula with a given order
(from 2 up to 12) by steps h on a uniform grid.
Structure:
----------
Type: FUNCTION
User Entry Names: DINT_BODE QINT_BODE
External References: FUNC - user-supplied function
Usage:
------
S=DINT_BODE (FUNC, A, B, NN, IPOINTS) double precision
S=QINT_BODE (FUNC, A, B, NN, IPOINTS) quadruple precision
where:
A, B - are limits of integration;
NN - is number of auxiliary subintervals;
IPOINTS - is number of nodes of the Bode quadrature formula;
IPOINTS can accept values from 2 up to 11,
for double precision calculation - up to 6;
FUNC - is name of the subprogram-function, constituent users
for calculation of integrand function. The name FUNC
- should be declared EXTERNAL in the calling subroutine.
NN,IPOINTS - are of the type INTEGER;
A,B,FUNC,S - are for DINT_BODE - REAL*8, for QINT_BODE - REAL*16.
Method:
-------
The Bode quadrature formulas will be used. The calculation accuracy
by step h up to O (h ^ (2 [(IPOINTS+1) /2]).
Notes:
------
The version of the program with quadruple precision
QINT_BODE exists only for the operating system UNIX.
References:
-----------
1. M. Abramowitz and I. Stegun, Handbook of mathematical
functions, National Bureau of Standarts, NY, 1964.
Example:
--------
. . .
MPLICIT REAL*8 (A-H,O-Z)
DIMENSION DINTVAL(3)
EXTERNAL FUNC
A=1.D0
B=3.D0
NN=2
IPOINTS=6
WRITE(*,*) 'INTERVAL',' ','[',A,B,']'
WRITE(*,*) 'NUMBER OF POINTS QUADRATURE RULE OF BODE=',IPOINTS
DO I=1,3
DINTVAL(I)=DINT_BODE(FUNC,A,B,NN,IPOINTS)
WRITE(*,*) 'NN=',NN,' ','INTVAL=',DINTVAL(I)
NN=NN*2
ENDDO
SIGMA=(DINTVAL(1)-DINTVAL(2))/(DINTVAL(2)-DINTVAL(3))
EXVAL=(DINTVAL(1)-SIGMA*DINTVAL(2))/(1.D0-SIGMA)
WRITE(*,*) 'RUNGE COEFFICIENT=',SIGMA
WRITE(*,*) 'EXTRAPOLATION OF INTEGRAL=',EXVAL
EXACT=DEXP(-A)-DEXP(-B)
WRITE(*,*) 'EXACT OF INTEGRAL= ',EXACT
WRITE(*,*) 'ERROR= ',EXACT-EXVAL
. . .
FUNCTION FUNC(X)
IMPLICIT REAL*8 (A-H,O-Z)
FUNC=DEXP(-X)
RETURN
END
Result:
-------
INTERVAL [ 1.000000000000000 3.000000000000000]
NUMBER OF POINTS QUADRATURE RULE OF BODE= 6
NN= 2 INTVAL= 3.180924625011772E-001
NN= 4 INTVAL= 3.180923742385016E-001
NN= 8 INTVAL= 3.180923728261328E-001
RUNGE COEFFICIENT= 62.492653158681330
EXTRAPOLATION OF INTEGRAL= 3.180923728031647E-001
EXACT OF INTEGRAL= 3.180923728035784E-001
ERROR= 4.136690989753333E-013
|