DINT_BODE           Библиотека "JINRLIB"               D112      
    QINT_BODE

    Автор: О.Чулуунбаатар
    Язык: Фортран

    ИНТЕГРИРОВАНИЕ ФУНКЦИИ ОДНОЙ ПЕРЕМЕННОЙ ПО КВАДРАТУРНОЙ ФОРМУЛЕ БОДЕ

    Подпрограммы DINT_BODE и QINT_BODE вычисляют интегралы от функции одной 
    независимой переменной по квадратурной формуле Боде заданного (от 2 до 12)
    порядка точности по шагу на равномерной сетке.

    Структура:
    ----------
       Тип:                              FUNCTION
       Имена входа для пользователя:     DINT_BODE QINT_BODE
       Используемые внешние программы:   FUNC - п/п-функция пользователя

    Обращение:
    ----------
    S=DINT_BODE(FUNC,A,B,NN,IPOINTS) двойная точность
    S=QINT_BODE(FUNC,A,B,NN,IPOINTS) четверная точность, где:
       A,B      - границы области интегрирования;
       NN       - число вспомогательных подинтервалов;
       IPOINTS  - количество узлов квадратурной формулы Боде; 
                  IPOINTS может принимать значения от 2 до 11,
                  для вычислений с двойной точностью - до 6;
       FUNC     - имя пoдпpoгpaммы-функции, cocтaвляемoй пoльзoвaтелем
                  для вычиcления знaчений пoдинтегpaльнoй функции.
                  Имя FUNC должно быть описано оператором EXTERNAL
                  в вызывающей подпрограмме.
       NN,IPOINTS имеют тип INTEGER;
       A,B,FUNC,S для DINT_BODE - REAL*8, для QINT_BODE - REAL*16.

    Метод:
    ------
    Используются квадратурные формулы Боде. Точность вычислений по шагу h 
    до O(h^(2[(IPOINTS+1)/2]).

    Замечание:
    ----------
    Вариант программы с четверной точностью QINT_BODE существует только 
    для ОС UNIX. 

    Литepaтуpa:
    -----------
    1. М. Абрамовиц, И. Стиган, Справочник по специальным функциям. 
       М., Наука, 1979, стр. 682-683.

    Пpимеp:
    -------
       . . .
       IMPLICIT 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

    Результат:
    ----------
       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