|
Текст подпрограммы и версий qsf1r_p.zip qsf1e_p.zip |
Тексты тестовых примеров tqsf1r_p.zip tqsf1e_p.zip |
Вычисление интегралов вида
B
(1) ∫ f (x) SIN (ρx + φ) dx ,
A
B
(2) ∫ f (x) COS (ρx + φ) dx
A
по формулам интерполяционного типа 5 - й степени точности.
QSF1R вычисляет интегралы (1), (2) или один из них с заданной абсолютной погрешностью E по формулам интерполяционного типа 5 - й степени точности с фиксированным распределением узлов.
Весь отрезок интегрирования A, B разбивается на K равных частичных отрезков; к каждому отрезку применяются формулы интерполяционного типа. Полученные значения интеграла по всем частичным отрезкам суммируются.
Л.Г.Васильева. Набор стандартных программ численного интегрирования с фиксированным распределенем узлов. Сб. "Численный анализ на ФОРТРАНе", вып.8, Изд - во МГУ, 1974.
procedure QSF1R(var RINT1 :Real; var RINT2 :Real; A :Real; B :Real;
F :Func_F1; RO :Real; FI :Real; E :Real; var K :Integer;
L1 :Integer; L2 :Integer; var IERR :Integer);
Параметры
|
RINT1 - RINT2 | вещественные переменные, содержащие вычисленные значения интегралов (1) и (2) соответственно; |
| A, B - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
| F - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
| RO - | заданное значение параметра ρ (тип: вещественный); |
| FI - | заданное значение параметра φ (тип: вещественный); |
| E - | заданная абсолютная погрешность вычисления интегралов (тип: вещественный); |
| K - | целая переменная, задающая число частичных отрезков разбиения; |
| L1, L2 - | задают режим работы подпрограммы (тип: целый); при этом: если |
| L1=1,L2=0 - | вычисляется интеграл (1); |
| L1=0,L2=1 - | вычисляется интеграл (2); |
| L1=1,L2=1 - | вычисляются интегралы (1) и (2); |
| IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
| IERR=65 - | когда заданная точность не может быть достигнута при максимально возможном числе частичных отрезков разбиения; значение K полагается равным 1048576. |
Версии
| QSF1E - | вычисление с расширенной (Extended) точностью интегралов вида (1) и (2) по формулам интерполяционного типа 5 - й степени точности. |
Вызываемые подпрограммы
| UTQS10 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы QSF1R. |
| UTQS12 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы QSF1E. |
Замечания по использованию
|
Проводятся два последовательных просчета интегралов по всему отрезку интегрирования по K и 2 K частичным отрезкам. Если абсолютная величина разности этих двух последовательных просчетов не превосходит E, то счет заканчивается, и за значения интегралов принимаются pезультаты последнего просчета. B противном случае значение K удваивается и процесс повторяется. При E ≤ 0 происходит только один просчет с заданным K. Максимальное значение K, котоpое можно задавать, не должно превосходить 524288. Если заданная точность не может быть достигнута, то K полагается равным 1048576. При выходе из подпрограммы значение K полагается равным числу частичных отрезков разбиения, при котоpом проводился последний просчет интеграла. В подпрограмме QSF1E параметры RINT1, RINT2, A, B, F, RO, FI, E имеют тип Extended. |
Unit TQSF1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQSF1R_p, QSF1R_p;
function TQSF1R: String;
implementation
function TQSF1R: String;
var
K,L1,L2,IERR :Integer;
A,B,RO,FI,E,RINT1,RINT2 :Real;
begin
Result := ''; { результат функции }
A := 0.0;
B := 1.0;
K := 1;
Е := -1.E-7;
L1 := 1;
L2 := 1;
RO := 10.0;
FI := 0.0;
QSF1R(RINT1,RINT2,A,B,FQSF1R,RO,FI,E,K,L1,L2,IERR);
Result := Result + Format('%s',[' RINT1=']);
Result := Result + Format('%20.16f ',[RINT1]);
Result := Result + Format('%s',[' RINT2=']);
Result := Result + Format('%20.16f ',[RINT2]);
Result := Result + Format('%s',[' K=']);
Result := Result + Format('%7d ',[K]);
Result := Result + Format('%s',[' IERR=']);
Result := Result + Format('%5d ',[IERR]) + #$0D#$0A;
UtRes('TQSF1R',Result); { вывод результатов в файл TQSF1R.res }
exit;
end;
end.
Unit FQSF1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;
function FQSF1R(X :Real): Real;
implementation
function FQSF1R(X :Real): Real;
begin
{ Result - прототип имени функции FQSF1R на FORTRANe }
Result := IntPower(X,4);
exit;
end;
end.
Результаты:
RINT1 = 0.053824477954
RINT2 = - 0.079553512319
K = 2
IERR = 0