Подпрограмма: ZF18R (модуль ZF18R_p)
Назначение
Выделение интервала, на котором вещественная функция меняет знак.
Математическое описание
ZF18R определяет границы интервала (A, B), на котором вещественная
функция y = F (x) меняет знак. На входе в
подпрограмму задаются предположительные границы интервала (A, B),
длина которого увеличивается в FACT раз до тех пор, пока не будет
получен интервал (A, B), на котором F (x) меняет знак,
либо пока не будет превзойдено заданное количество итераций.
Использование
procedure ZF18R(F :Func_F1; var A :Real; var B :Real; FACT :Real;
N :Integer; var IERR :Integer);
Параметры
F -
|
имя вещественной подпрограммы - функции вычисления
F (x);
|
A, B -
|
вещественные переменные, содержащие на входе в
подпрограмму предположительные границы интервала, а на
выходе - найденные границы интервала, на котором F (x)
меняет знак;
|
FACT -
|
множитель, определяющий, во сколько раз должен
увеличиваться текущий интервал (A, B) на каждом шаге
итерации, FACT > 1 (тип: вещественный);
|
N -
|
заданное максимальное количество увеличений
первоначального интервала (A, B) (тип: вещественный);
|
IERR -
|
целая переменная, служащая для сообщения об ошибках,
обнаруженных в ходе работы подпрограммы; при этом
|
IERR=65 -
|
когда границы первоначального интервала совпадают;
|
IERR=66 -
|
когда интервал, на котором F (x) меняет
знак, не найден за заданное количество итераций N.
|
Версии
ZF18E -
|
определение интервала, на котором вещественная
функция меняет знак, в режиме вычислений с расширенной (Extended)
точностью. При этом параметры A, B и FACT должны
иметь тип Extended, а подпрограмма - функция
вычисления F (x) должна тоже иметь тип
Extended.
|
Вызываемые подпрограммы
UTZF10 -
|
подпрограмма выдачи диагностических сообщений при
работе подпрограммы ZF18R.
|
UTZF11 -
|
подпрограмма выдачи диагностических сообщений при
работе подпрограммы ZF18E.
|
Замечания по использованию
|
В подпрограммах ZF18R и ZF18E имеется глобальная запись (структура данных)
_ZF18RR с элементом elm1, который полагается равным
выполненному количеству увеличений первоначального интервала
(A, B).
|
Пример использования
Unit TZF18R_p;
interface
uses
SysUtils, Math, LStruct, Lfunc, UtRes_p, FZF18R_p, ZF18R_p;
function TZF18R: String;
implementation
function TZF18R: String;
var
N,IERR :Integer;
FACT,A,B :Real;
begin
Result := '';
FАСТ := 1.1;
N := 50;
A := 1.0;
B := 1.1;
ZF18R(FZF18R,A,B,FACT,N,IERR);
Result := Result + Format('%20.16f %20.16f %5d %5d ',[A,B,_ZF18RR.elm1,IERR]) + #$0D#$0A;
UtRes('TZF18R',Result); //вывод результатов в файл TZF18R.res
exit;
end;
end.
Unit FZF18R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc;
function FZF18R(X :Real): Real;
implementation
function FZF18R(X :Real): Real;
begin
Result := Sin(X);
end;
end.
Результаты:
A = - 0.8448105
B = 1.1
NREAL = 5
IERR = 0