Текст подпрограммы и версий
zf16r_p.zip  zf16e_p.zip 
Тексты тестовых примеров
tzf16r_p.zip  tzf16e_p.zip 

Подпрограмма:  ZF16R (модуль ZF16R_p)

Назначение

Вычисление нуля вещественной функции (трансцендентного уравнения) на заданном интервале методом дихотомии.

Математическое описание

ZF16R вычисляет нуль вещественной функции  y = F (x) на интервале (A, B), на котором  F (x) меняет знак, с заданной точностью EPS методом дихотомии.

И.С.Березин, Н.П.Жидков. Методы вычислений, т.1. Изд - во "Наука", 1966.

Использование

procedure ZF16R(F :Func_F1; A :Real; B :Real; EPS :Real; var ROOT :Real;
                ITMAX :Integer; var IERR :Integer);

Параметры

F - имя вещественной подпрограммы - функции вычисления  F (x) в любой точке интервала (A, B);
A, B - заданные нижняя и верхняя границы интервала, на котором  F (x) меняет знак (тип: вещественный);
EPS - заданная абсолютная погрешность вычисления нуля функции (тип: вещественный);
ROOT - вещественная переменная, значение которой в результате работы подпрограммы полагается равным вычисленному нулю функции  F (x);
ITMAX - целая переменная, значение которой перед началом работы подпрограммы должно быть положено равным максимальному числу операций, ориентировочно требуемых для обеспечения сходимости к нулю функции;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом
IERR=65 - когда нуль функции не может быть посчитан в пределах заданного числа итераций;
IERR=66 - когда функция не меняет знака на заданном интервале.

Версии

ZF16E - вычисление нуля вещественной функции на заданном интервале методом дихотомии в режиме вычислений с расширенной (Extended) точностью. При этом параметры  A, B, EPS и ROOT должны иметь тип Extended, а подпрограмма - функция вычисления  F (x) должна тоже иметь тип Extended.

Вызываемые подпрограммы

UTZF10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы ZF16R.
UTZF11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы ZF16E.

Замечания по использованию

  В подпрограммах ZF16R и ZF16E имеется глобальная запись (структура данных) _ZF16RR с элементм elm1, который полагается равным количеству итераций, выполненных при вычислении нуля функции  F (x).

Пример использования

Unit TZF16R_p;
interface
uses
SysUtils, Math, LStruct, Lfunc, UtRes_p, FZF16R_p, ZF16R_p;

function TZF16R: String; 

implementation

function TZF16R: String;
var
ITMAX,IERR :Integer;
A,B,EPS,RООТ :Real;
begin
Result := '';
A := -2.57;
B := 1.57;
EPS := 1.E-5;
IТМАХ := 30;
ZF16R(FZF16R,A,B,EPS,ROOT,ITMAX,IERR);
Result := Result + Format('%20.16f %5d %5d ',[ROOT,_ZF16RR.elm1,IERR]) + #$0D#$0A;
UtRes('TZF16R',Result);  //вывод результатов в файл TZF16R.res
exit;
end;

end.

Unit FZF16R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc;

function FZF16R(X :Real): Real; 
implementation

function FZF16R(X :Real): Real;
begin
Result := Sin(X);
end;

end.

Результаты:

        ROOT = - 0.000006386669 

        ITER = 19
        IERR = 0