Текст подпрограммы и версий qsl3r_p.zip qsl3e_p.zip |
Тексты тестовых примеров tqsl3r_p.zip tqsl3e_p.zip |
Вычисление определенного интеграла по формулам Лобатто 11 - ой степени с гарантированной точностью.
QSL3R вычисляет определенный интеграл B ∫ f (x) dx A с погрешностью B E ( 1 + | ∫ f (x) dx | ) , A
где E задается пользователем, по формулам Лобатто, точным для полиномов 11 - ой степени, с автоматическим выбором шага.
О.В.Брушлинская, Л.Г.Васильева. Набор стандартных программ приближенного вычисления однократных интегралов с автоматическим выбором шага. Сб. "Численный анализ на ФОРТРАНе", вып. 8, Изд-во МГУ, 1974 .
procedure QSL3R(var RINT :Real; var A :Real; var B :Real; F :Func_F1; E :Real; var XA :Real);
Параметры
RINT - | вещественная переменная, содержащая вычисленное значение интеграла; |
A, B - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
F - | имя вещественной подпрограммы - функции, вычисляющей поинтегральную функцию f (x); |
E - | заданная точность вычисления интеграла (тип: вещественный); |
XA - | вещественная переменная, значение которой на выходе из подпрограммы pавно либо B, если заданная точность достигнута, либо значению точки "особенности" подинтегральной функции. |
Версии: нет
Вызываемые подпрограммы
UTQS11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы QSL3R. |
Замечания по использованию
Могут встречатся случаи, когда подинтегральная функция имеет особенность, в окрестности которой шаг интегрирования становится недопустимо малым. Тогда значение XA полагается равным координате такой "особенности", подпрограмма UTQS11 выдает диагностическое сообщение: "заданная точность не может быть достигнута" и печатает значение XA; значение RINT приближенно pавно значению интегралаXA ∫ f (x) dx . A |
Unit TQSL3R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, FQSL3R_p, QSL3R_p; function TQSL3R: String; implementation function TQSL3R: String; var RINT,A,B,E,ХА :Real; begin Result := ''; { результат функции } A := 0.0; B := 1.0; E := 1.E-6; QSL3R(RINT,A,B,FQSL3R,E,XA); Result := Result + Format(' %20.16f %20.16f %20.16f ', [RINT,XA,B]) + #$0D#$0A; UtRes('TQSL3R',Result); { вывод результатов в файл TQSL3R.res } exit; end; end. Unit FQSL3R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc; function FQSL3R(X :Real): Real; implementation function FQSL3R(X :Real): Real; label _2,_1,_4,_3; begin { Result - прототип имени функции FQSL3R на FORTRANe } if ( X-0.5 ) < 0 then goto _2 else if ( X-0.5 ) > 0 then goto _4 else goto _1; _2: Result := 1.0/Sqrt(0.5-X); goto _3; _1: Result := 0.0; goto _3; _4: Result := 1.0/Sqrt(X-0.5); _3: exit; end; end. Результаты: Заданная точность не может быть достигнута RINT = 1.414213499 ; XA = 0.49999994703