Текст подпрограммы и версий
qsf8r_p.zip  qsf8e_p.zip 
Тексты тестовых примеров
tqsf8r_p.zip  tqsf8e_p.zip 

Подпрограмма:  QSF8R (модуль QSF8R_p)

Назначение

Вычисление интеграла

             b
             ∫  f (x) sin( wx + φ ) dx
            a 

методом Лонгмана.

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

B случае | w (b - a) | ≥ 2π по квадратурной формуле Гаусса с N узлами вычисляются интегралы по отрезкам [a, xa] и [xb, b], где xa и xb = xa + n0 π /|w| - соответственно наименьший и наибольший из n0 + 1 нулей функции sin (wx + φ) на отрезке [a, b]; затем вычисляются интегралы

                    xa + ( i+1 ) π / | w |
   Vi = (-1)i      ∫   f (x) sin( wx + φ ) dx
                   xa + i π / | w |

( i = 0, 1, ..., K - 1, n0 - K, n0 - K + 1, ..., n0 - 1), и за значение интеграла по отрезку [xa, xb] принимается сумма

           K-1
(1)       ∑ { [ (-1)i Δi V0 + (-1)n0 - 1 Δi Vn0 - i - 1 ] / 2 i + 1 }
           i=0 

B случае | w (b - a) | < 2π интеграл по отрезку [a, b] вычисляется с помощью квадратурной формулы Гаусса с N узлами.

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.

Кукаркин А.Б., Новикова Е.И. O вычислении интегралов от быстроосциллирующих функций методом Лонгмана. - Ж. вычисл.матем. и матем. физ., 1981, т. 21, N 5, 1091-1099.

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

procedure QSF8R(var RINT :Real; A :Real; B :Real; F :Func_F1; W :Real;
                FI :Real; N :Integer; var K :Integer;
                var RA :Array of Real; var RB :Array of Real);

Параметры

RINT - вещественная переменная, содержащая вычисленное значение интеграла;
A, B - заданные нижний и верхний пределы интегрирования соответственно (тип: вещественный);
F - имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x);
W - заданное значение параметра  w (тип: вещественный);
FI - заданное значение параметра  φ (тип: вещественный);
N - заданное число узлов квадратурной формулы Гаусса для вычисления интегралов по отрезкам, внутри которых не содержатся нули функции sin (wx + φ); может принимать только следующие значения: 4, 6, 8, 12, 16, 24 (тип: целый);
K - целая переменная, задающая число членов суммы (1) (K ≥ 2);
RA, RB - вещественные векторы длины N, используемые как рабочие.

Версии

QSF8E - вычисление с расширенной (Extended) точностью интеграла
             b
             ∫  f (x) sin( wx + φ ) dx
            a 
методом Лонгмана.

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

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

 

Если значение K больше n0, где n0 - вычисляемое в подпрограмме число отрезков, концами которых являются соседние нули функции sin (wx + φ), то в (1) K заменяется на n0. При выходе из подпрограммы значение K полагается равным min {K, n0}.

В подпрограмме QSF8E параметры RINT, A, B, F, W, FI, RA, RB имеют тип Extended.

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

Unit TQSF8R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQSF8R_p, QSF8R_p;

function TQSF8R: String;

implementation

function TQSF8R: String;
var
N,K,I :Integer;
A,B,W,FI,RINT :Real;
RA :Array [0..4] of Real;
RB :Array [0..4] of Real;
begin
Result := '';  { результат функции }
A := 0.0;
B := 1.0;
W := 1000.0;
FI := 0.0;
N := 6;
K := 5;
QSF8R(RINT,A,B,FQSF8R,W,FI,N,K,RA,RB);
Result := Result + Format('%s',
 ['    PEЗУЛЬTAT' + #$0D#$0A + '  RINT= ']);
Result := Result + Format('%20.16f ',[RINT]);
Result := Result + Format('%s',['     K= ']);
Result := Result + Format('%2d ',[K]) + #$0D#$0A;
UtRes('TQSF8R',Result);  { вывод результатов в файл TQSF8R.res }
exit;
end;

end.

Unit FQSF8R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;

function FQSF8R(X :Real): Real;

implementation

function FQSF8R(X :Real): Real;
begin
{ Result - прототип имени функции FQSF8R на FORTRANe }
Result := Sin(X);
exit;
end;

end.

Результат:   RINT  =  -0.0004727794