|
Текст подпрограммы и версий qs12r_p.zip |
Тексты тестовых примеров tqs12r_p.zip |
Вычисление определенного интеграла по квадратурной формуле Гаусса.
QS12R вычисляет интеграл с заданной абсолютной погрешностью на отрезке интегрирования по формуле
B
∫ f (x) dx ≈
A
N
≈ (B-A) ∑ Ci f ( (B-A) yi / 2 + (A+B) / 2 ) / 2 ,
i=1
где yi и Ci соответственно узлы и веса Гаусса для отрезка [ - 1, 1].
Л.Г.Васильева. Набор стандартных программ численного интегрирования с фиксированным распределением узлов. Сб."Численный анализ на ФОРТРАНе", вып. 8, Изд-во МГУ, 1974.
procedure QS12R(var RINT :Real; A :Real; B :Real; F :Func_F1; E :Real;
var N :Integer; var IERR :Integer);
Параметры
| RINT - | вещественная переменная, содержащая вычисленное значение интеграла; |
| A, B - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
| F - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
| E - | заданная абсолютная погрешность вычисления интеграла (тип: вещественный); |
| N - | целая переменная, задающая число узлов интегрирования; |
| IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
| IERR = 65 - | когда заданная точность не может быть достигнута при максимально возможном числе узлов интегрирования; значение N полагается равным - 1; |
| IERR = 66 - | когда заданное число узлов интегрирования не принадлежит списку возможных узлов. |
Версии: нет
Вызываемые подпрограммы
| UTQS10 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы QS12R. |
Замечания по использованию
|
B процессе вычисления число узлов интегрирования N может принимать только следующие значения: (1) 2, 4, 6, 8, 10, 12, 16, 24, 32, 48, 64, 96. Проводится несколько последовательных просчетов, причем для каждого последующего просчета берется очередное число узлов из списка (1). Если абсолютная величина разности двух последовательных просчетов интеграла не превосходит E, то счет заканчивается, и за значение интеграла принимается результат последнего просчета. Если список (1) исчерпан и заданная точность не достигнута, то N полагается равным - 1. При E ≤ 0 происходит только один просчет с заданным N. |
Unit TQS12R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FQS12R_p, QS12R_p;
function TQS12R: String;
implementation
function TQS12R: String;
var
N,IERR :Integer;
RINT,A,B,E :Real;
begin
Result := ''; { результат функции }
A := 1.0;
B := IntPower(2.718281828459,3);
E := 0.00001;
N := 2;
QS12R(RINT,A,B,FQS12R,E,N,IERR);
Result := Result + Format(' %20.16f %10d ',[RINT,N]) + #$0D#$0A;
UtRes('TQS12R',Result); { вывод результатов в файл TQS12R.res }
exit;
end;
end.
Unit FQS12R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;
function FQS12R(X :Real): Real;
implementation
function FQS12R(X :Real): Real;
begin
{ Result - прототип имени функции FQS12R на FORTRANe }
Result := 1.0/(X*Sqrt(1.0+Ln(X)));
exit;
end;
end.
Результаты:
RINT = 1.9999999999 ;
N = 32