Текст подпрограммы и версий
qsj2r_p.zip 
Тексты тестовых примеров
tqsj2r_p.zip 

Подпрограмма:  QSJ2R (модуль QSJ2R_p)

Назначение

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

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

 Подпрограмма QSJ2R вычисляет определенный интеграл
            B
           ∫  ( 1 - x )α ( 1 + x ) β  f (x) dx 
         A 

с заданной абсолютной погрешностью по квадратурной формуле Гаусса - Якоби.

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

procedure QSJ2R(var RINT :Real; var A :Real; var B :Real;
                var ALF :Real; var BTA :Real; F :Func_F1;
                var N :Integer; EPS :Real; var IERR :Integer);

Параметры

RINT - вещественная переменная, содержащая вычисленное значение интеграла;
A, B - заданные нижний и верхний пределы интегрирования, соответственно (тип: вещественный);
ALF,BTA - заданные параметры  α и  β соответственно, в весовом множителе (1 - x)α (1 + x) β (тип: вещественный);
F - имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию  f (x);
N - целая переменная, задающая число узлов интегрирования (2 ≤ N ≤ 512);
EPS - заданная абсолютная погрешность вычисления интеграла (тип: вещественный);
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IERR=0 - когда заданная точность EPS достигнута,  N при этом полагается равным числу узлов интегрирования, при котором достигнута заданная точность и вычислено значение интеграла;
IERR=1 - когда заданная точность не может быть достигнута при максимально возможном числе узлов интегрирования (N ≤ 512).

Версии: нет

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

QSJAC - подпрограмма, вычисляющая узлы и веса квадратурной формулы Гаусса - Якоби.
UTQSJ2 - подпрограмма выдачи диагностических сообщений.

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

 

Перед началом работы подпрограммы число узлов интегрирования  N должно быть задано как целое из интервала 2 ≤ N ≤ 256.

  Если интеграл не может быть вычислен с заданной абсолютной погрешностью EPS, выдается диагностическое сообщение:
Подпрограмма QSJ2R: заданная точность не может быть достигнута.

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

Unit TQSJ2R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQSJ2R_p, QSJ2R_p;

function TQSJ2R: String;

implementation

function TQSJ2R: String;
var
N,IERR :Integer;
ALF,BTA,A,B,EPS,RINT :Real;
X :Array [0..511] of Real;
W :Array [0..511] of Real;
begin
Result := '';  { результат функции }
ALF := 1.0;
ВТА := ALF;
A := -1.0;
B := 1.0;
EPS := 1.E-5;
N := 2;
QSJ2R(RINT,A,B,ALF,BTA,FQSJ2R,N,EPS,IERR);
Result := Result +
Format('%20.16f %20.16f %20.16f %20.16f %20.16f %20.16f %5d %5d ',
 [A,B,ALF,BTA,EPS,RINT,N,IERR]) + #$0D#$0A;
UtRes('TQSJ2R',Result);  { вывод результатов в файл TQSJ2R.res }
exit;
end;

end.

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

function FQSJ2R(X :Real): Real;

implementation

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

end.

Результаты:

       RINT  = 0.0000000000
       N        =  8
       IERR   =  0