Текст подпрограммы и версий ( Фортран )
qs15r.zip  qs15d.zip 
Тексты тестовых примеров ( Фортран )
tqs15r.zip  tqs15d.zip 
Текст подпрограммы и версий ( Си )
qs15r_c.zip  qs15d_c.zip 
Тексты тестовых примеров ( Си )
tqs15r_c.zip  tqs15d_c.zip 
Текст подпрограммы и версий ( Паскаль )
qs15r_p.zip  qs15e_p.zip 
Тексты тестовых примеров ( Паскаль )
tqs15r_p.zip  tqs15e_p.zip 

Подпрограмма:  QS15R

Назначение

Вычисление определенного интеграла от векторной функции по формулам Гаусса.

Математическое описание

Подпрограмма QS15R вычисляет интеграл
           B
           ∫ F (x) dx
          A
от векторной функции   F (x) = ( f1 (x), ... , fN (x) )
с покомпонентной погрешностью
                         B
      ЕРS ( 1 + |  ∫  fi (x) dx | )
                        A 

по квадратурным формулам Гаусса с разбиением основного отрезка интегрирования на частичные.

Точность может достигаться как за счет удвоения числа частичных отрезков разбиения при фиксированном числе узлов квадратурной формулы, применяемой на каждом частичном отрезке, так и за счет увеличения числа узлов квадратурной формулы при фиксированном числе отрезков разбиения.

Я.М.Жилейкин, М.В.Соколовский. Набор стандартных программ для вычисления интегралов от векторных функций, Сб. "Методы и алгоритмы в численном анализе", Изд-во МГУ, 1981 г.

Использование

    SUBROUTINE  QS15R (RINT, A, B, F, N, EPS, K, NG, L,
                                           IND, R, IERR) 

Параметры

RINT - вещественный вектоp длины N, содержащий вычисленные значения интегралов;
A, B - заданные нижний и верхний пределы интегрирования (тип: вещественный);
F - имя подпрограммы, вычисляющей подинтегральные функции;
N - размерность вектоpа - функции F (x) (тип: целый);
EPS - заданная меpа погрешности вычисления интеграла (тип: вещественный);
K - целая переменная, задающая начальное число частичных отрезков разбиения;
NG - целая переменная, задающая начальное число узлов квадратурной формулы;
L - задает режим работы подпрограммы (тип: целый); при этом, если:
L = 0 - то заданная точность достигается за счет увеличения числа частичных отрезков разбиения при заданном NG;
L ≥ 1 - то заданная точность достигается за счет увеличения числа узлов квадратурной формулы при заданном K;
IND - целый вектоp длины N, каждая компонента которого pавна при:
L = 0 - числу частичных отрезков разбиения, при котоpом достигается заданная точность по этой компоненте;
L ≥ 1 - числу узлов квадpатуной фоpмулы, пpи котоpом достигается заданная точность по этой компоненте;
R - вещественный рабочий вектоp длины 2N;
IERR - целая переменная, служащая для диагностических сообщений:
IERR = 65 - когда заданная точность не может быть достигнута при максимально возможном числе узлов квадратурной формулы (96);
IERR = 66 - если заданное число узлов квадратурной формулы не является допустимым;
IERR = 67 - если заданная точность не может быть достигнута при максимально возможном числе (1048576) частичных отрезков разбиения.

Версии

QS15D - вычисление с удвоенной точностью определенного интеграла от векторной функции по формулам Гаусса.

Вызываемые подпрограммы

UTQS11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы QS15R.
UTQS13 - подпрограмма выдачи диагностических сообщений при работе подпрограммы QS15D.

Замечания по использованию

  1. 

Число узлов квадратурной формулы может принимать лишь следующие допустимые значения 2, 4, 6, 8, 10, 12, 16, 24, 32, 48, 64, 96.

  2. 

Первый оператор подпрограммы F должен иметь вид:

    SUBROUTINE  F(X, Y, I)
Здесь:
X - аргумент функции F (тип: вещественный);
Y - вещественный вектоp длины N вычисленных значений функции F;
I - целый вектоp длины N; если его i - ая компонента отлична от нуля, то интеграл от этой компоненты функции F не вычисляется.

  3. 

При EPS ≤ 0 происходит только один просчет при заданных значениях K и NG.

  4. 

Вычисление интеграла от отдельной компоненты прекращается как только по этой компоненте достигается заданная точность.

  5. 

Если для каких - либо компонент векторной функции заданная погрешность интегрирования не может быть достигнута, то соответствующие компоненты вектоpа IND полагаются равными нулю.

  6. 

Погрешность определяется по модулю разности двух просчетов по M и 2*M частичным отрезкам разбиения при L = 0 либо по двум просчетам с различным, но следующим друг за другом, согласно указанному выше списку, числом узлов квадратурных формул при L ≥ 1.

  7.  В подпрограмме QS15D параметры RINT, A, B, F, E, EPS, R имеют тип DOUBLE PRECISION.

Пример использования

      SUBROUTINE  FUN(X, Y, I)
      DIMENSION  Y(5)
      Y = X**6
      DO 1 J = 1, 4
   1 Y(J + 1) = Y(J)*X
      RETURN
      END

      DIMENSION  RINT1(5), RINT2(5), R(10), IND1(5), IND2(5)
      EXTERNAL  FUN
      CALL  QS15R (RINT1, 0., 1., FUN, 5, 1.E-9, 2, 4, 0, IND1, R, IERR)
      CALL  QS15R (RINT2, 0., 1., FUN, 5, 1.E-9, 1, 2, 1, IND2, R, IERR)

Результаты:

               RINT1                      IND1

      1.42857142855-01               2
      1.24999999998-01               2
      1.11111111108-01               4
      9.99999999985-02               8
      9.09090909076-02               8

               RINT2                      IND2

      1.42857142855-01               4
      1.24999999998-01               4
      1.11111111109-01               6
      9.99999999985-02               6
      9.09090909078-02               6

      IERR  =  0