ОБЪЕДИНЕННЫЙ   ИНСТИТУТ   ЯДЕРНЫХ   ИССЛЕДОВАНИЙ
lit
  БИБЛИОТЕКА   ПРОГРАММ   JINRLIB eng

DINT_BODE, QINT_BODE - интегрирование функции одной переменной
по квадратурной формуле Боде

D112

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

Подпрограммы 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.

Литература:

  1. М. Абрамовиц, И. Стиган, Справочник по специальным функциям.
    М., Наука, 1979, стр. 682-683.
Пример:
       . . .
       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 INTEGRA =          3.180923728035784E-001
       ERROR =          4.136690989753333E-013


home up e-mail