Текст подпрограммы и версий qsl1r_p.zip qsl1e_p.zip |
Тексты тестовых примеров tqsl1r_p.zip tqsl1e_p.zip |
Вычисление определенного интеграла по формулам Лобатто.
QSL1R вычисляет интеграл B ∫ f (x) dx A
с заданной абсолютной погрешностью E по формулам Лобатто по семи узлам (формула 11 - й степени точности) с автоматическим выбором шага.
О.В.Брушлинская, Л.Г.Васильева. Набор стандартных программ приближенного вычисления однократных интегралов с автоматическим выбором шага. Сб. "Численный анализ на ФОРТРАНе", вып. 8, Изд-во МГУ, 1974.
procedure QSL1R(var RINT :Real; var A :Real; var B :Real; F :Func_F1; E :Real);
Параметры
RINT - | переменная, содержащая вычисленное значение интеграла (тип: вещественный); |
A, B - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
F - | имя вещественной подпрограммы - функции вычисления подинтегральной функции f (x); |
E - | заданная абсолютная погрешность вычисления интеграла (тип: вещественный). |
Версии
QSL1E - | вычисление с расширенной (Extended) точностью определенного интеграла по формулам Лобатто. |
Вызываемые подпрограммы: нет
Замечания по использованию
Подпрограмма не гарантирует заданную погрешность, хотя в большинстве случаев интегралы будут вычислены с тpебуемой точностью. В подпрограмме QSL1E параметры RINT, A, B, F, E имеют тип Extended. |
Unit TQSL1R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, FQSL1R_p, QSL1R_p; function TQSL1R: String; implementation function TQSL1R: String; var RINT,A,B,E :Real; begin Result := ''; { результат функции } A := 0.0; B := 1.0; E := 0.00000001; QSL1R(RINT,A,B,FQSL1R,E); Result := Result + Format(' %20.16f ',[RINT]) + #$0D#$0A; UtRes('TQSL1R',Result); { вывод результатов в файл TQSL1R.res } exit; ЕND; end. Unit FQSL1R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc; function FQSL1R(X :Real): Real; implementation function FQSL1R(X :Real): Real; label _2,_1,_3; begin { Result - прототип имени функции FQSL1R на FORTRANe } if ( X ) < 0 then goto _1 else if ( X ) > 0 then goto _1 else goto _2; _2: Result := 0.0; goto _3; _1: Result := 1.0/Sqrt(X); _3: exit; end; end. Результат: RINT = 1.9999963224