|
Текст подпрограммы и версий qsk2r_p.zip qsk2e_p.zip |
Тексты тестовых примеров tqsk2r_p.zip tqsk2e_p.zip |
Вычисление определенного интеграла по обобщенной квадратурной формуле Ньютона - Котеса, точной для многочленов девятой степени.
Подпрограмма QSK2R вычисляет интеграл
B
∫ f (x) dx
A
по обобщенной формуле Ньютона - Котеса с автоматическим выбором шага.
G.E.Forsythe, M.A.Malkolm, C.B.Moler. Computer Methods for Mathematical Computations. 1977 by Prentice - hall, INC.
procedure QSK2R(FUN :Func_F1; A :Real; B :Real; ABSERR :Real;
RELERR :Real; var RESULT_ :Real; var ERREST :Real;
var NOFUN :Integer; var FLAG :Real);
Параметры
| FUN - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
| A, B - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
| ABSERR - | заданная абсолютная погрешность вычисления интеграла (тип: вещественный); |
| RELERR - | заданная относительная погрешность вычисления интеграла (тип: вещественный); |
| RESULT_ - | вещественная переменная, содержащая вычисленное значение интеграла; |
| ERREST - | вещественная переменная, содержащая оценку погрешности вычисленного значения интеграла; |
| NOFUN - | целая переменная, содержащая число вычисленных значений подинтегральной функции, потребовавшихся для получения результата; |
| FLAG - |
вещественная переменная, служащая для
хаpактеристики надежности вычисленного результата;
при этом: если FLAG = 0., то полученный результат с большой вероятностью удовлетворяет заданной погрешности; если FLAG = XXX.YYY, то XXX - число интервалов, на которых не удалось достигнуть заданной точности, а 0.YYY = (B - X0)/(B - A), где X0 - граница отрезка [A, X0], на котоpом был израсходован лимит обращений к подпрограмме - функции. |
Версии
| QSK2E - | вычисление определенного интеграла по обобщенной формуле Ньютона - Котеса, точной для многочленов девятой степени от функции, заданной с расширенной (Extended) точностью. |
Вызываемые подпрограммы: нет
Замечания по использованию
| B подпрограмме QSK2E параметры FUN, A, B, ABSERR, RELERR, RESULT_, ERREST, FLAG имеют тип Extended. |
Unit TQSK2R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQSK2R_p, QSK2R_p;
function TQSK2R: String;
implementation
function TQSK2R: String;
var
NOFUN :Integer;
A,B,ABSERR,RELERR,RESULT_,ERREST,FLAG :Real;
begin
Result := ''; { результат функции }
A := 0.0;
B := 2.0;
RELERR := 1.0E-10;
ABSERR := 0.0;
QSK2R(FQSK2R,A,B,ABSERR,RELERR,RESULT_,ERREST,NOFUN,FLAG);
Result := Result + Format('%s',[' RESULT_=']);
RЕSult := Result + Format('%20.16f ',[RESULT_]);
Result := Result + Format('%s',[' ERREST=']);
Result := Result + Format('%20.16f ',[ERREST]) + #$0D#$0A;
if ( FLAG <> 0.0 )
then begin
Result := Result + Format('%s',[' FLAG = ']);
Result := Result + Format('%20.16f ',[FLAG]) + #$0D#$0A;
end;
Result := Result + Format('%10d ',[NOFUN]) + #$0D#$0A;
UtRes('TQSK2R',Result); { вывод результатов в файл TQSK2R.res }
exit;
end;
end.
Unit fqsk2r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;
function fqsk2r(X :Real): Real;
implementation
function fqsk2r(X :Real): Real;
begin
{ Result - прототип имени функции FUN на FORTRANe }
if ( X = 0.0 )
then Result := 1.0;
if ( X <> 0.0 )
then Result := Sin(X)/X;
exit;
end;
end.
Результаты:
RESULT_ = 1.6054
ERREST = 0.
NOFUN = 33
FLAG = 0.