Текст подпрограммы и версий qs18r_p.zip qs18e_p.zip |
Тексты тестовых примеров tqs18r_p.zip tqs18e_p.zip |
Вычисление интеграла
B ∫ f (x) sin ( w x + φ ) dx A
с заданной абсолютной погрешностью методом Лонгмана.
Пусть отрезку [A, B] принадлежат n0 + 1 нулей xA, xA + π/ | w |, ..., xA + n0 π/ | w | = xB функции sin (w x + φ). В случае n0 ≥ 2 по квадратурной формуле Гаусса с 32 узлами вычисляются интегралы по отрезкам [A, xA] и [xB, B], затем вычисляются интегралы
B1 Vi = (- 1)i ∫ f(x) sin(w x + φ) dx , A1 где A1 = xA + i π/ | w | , B1 = xA + ( i + 1) π/ | w | , ( i = 0, 1, ..., k - 1, n0 - k, n0 - k + 1, ... , n0 - 1 ) ,
и за значение интеграла по отрезку [xA, xB] принимается сумма
k-1 (1) ∑ [(- 1)i Di V0 + (- 1)n0 -1 Δi Vn0 - i -1] / 2i +1 , i =0
где n0 = n0, а значение k выбирается подпрограммой в соответствии с заданной величиной абсолютной погрешности Е. B случае n0 ≤ 1 или при отсутствии на отрезке [A, B] нулей функции sin (w x + φ) интеграл по отрезку [A, B] вычисляется с помощью квадратурной формулы Гаусса с 32 узлами.
Longman I.M. A Method for the Numerical Evaluation of Finite Integrals of Oscillatory Functions. - Math. Comput., 1960, Vol.14, N 69, p.53 - 59.
Жилейкин Я.М., Кукаркин А.Б. Приближенное вычисление интегралов от быстроосциллирующих функций - М.: Изд - во Моск. ун - та, 1987.
procedure QS18R(var RINT :Real; A :Real; B :Real; F :Func_F1; W :Real; FI :Real; E :Real; L :Integer; var RA :Array of Real; var RB :Array of Real; var IERR :Integer);
Параметры
RINT - | вещественная переменная, содержащая вычисленное значение интеграла; |
A, B - | заданные нижний и верхний пределы интегрирования соответственно (тип: вещественный); |
F - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
W - | заданное значение параметра w (тип: вещественный); |
FI - | заданное значение параметра φ (тип: вещественный); |
E - | заданная абсолютная погрешность вычисления интеграла (тип: вещественный); |
L - | параметр, равный m + 1, где m - определяемое пользователем максимально допустимое число членов суммы (1), L ≥ 3 (тип: целый); |
RA, RB - | вещественные одномерные массивы длины L, используемые как рабочие; |
IERR - | целая переменная для диагностических сообщений; при этом: |
IERR=65 - | если заданная точность не может быть достигнута при заданном L. |
Версии
QS18E - |
вычисление с расширенной (Extended) точностью интеграла B ∫ f (x) sin ( w x + φ ) dx A с заданной абсолютной погрешностью методом Лонгмана. |
Вызываемые подпрограммы
UTQS11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы QS18R. |
UTQS13 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы QS18E. |
Замечания по использованию
Параметр L пользователь может задавать достаточно произвольно; чем больше L, тем больше шансов, что заданная точность будет достигнута, но и тем больше места будет занято программой в памяти машины. | |
В подпрограмме QS18E параметры RINT, A, B, F, W, FI, E, RA, RB имеют тип Extended. |
Unit TQS18R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, FQS18R_p, QS18R_p; function TQS18R: String; implementation function TQS18R: String; var L,IERR :Integer; A,B,W,FI,E,RINT :Real; RA :Array [0..19] of Real; RB :Array [0..19] of Real; begin Result := ''; { результат функции } A := -100.0; В := 100.0; W := 10.0; FI := 0.0; E := 1.E-6; L := 20; QS18R(RINT,A,B,FQS18R,W,FI,E,L,RA,RB,IERR); Result := Result + Format('%20.7f %10d ',[RINT,IERR]) + #$0D#$0A; UtRes('TQS18R',Result); { вывод результатов в файл TQS18R.res } exit; end; end. Unit FQS18R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc; function FQS18R(X :Real): Real; implementation function FQS18R(X :Real): Real; begin { Result - прототип имени функции FQS18R на FORTRANe } Result := X; exit; end; end. Результаты: RINT = - 11.2310439229 , IERR = 0