Текст подпрограммы и версий ( Фортран ) 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 вычисляет интеграл 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 должен иметь вид: | |
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