Текст подпрограммы и версий
zf18r_p.zip  zf18e_p.zip 
Тексты тестовых примеров
tzf18r_p.zip  tzf18e_p.zip 

Подпрограмма:  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