Текст подпрограммы и версий
zf11r_p.zip  zf11e_p.zip 
Тексты тестовых примеров
tzf11r_p.zip  tzf11e_p.zip 

Подпрограмма:  ZF11R (модуль ZF11R_p)

Назначение

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

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

ZF11R вычисляет нуль вещественной функции Y = F (X), меняющей знак на заданном интервале (A, B), т.е.   F (A) * F (B) < 0, используя метод секущих.

И.С.Березин, Н.П.Жидков, Методы вычислений, т.2, M., 1962.

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

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

Параметры

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

Версии

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

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

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

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

 

Пусть  Xi - 1 и  Xi являются двумя последовательными приближениями к нулю функции  F (X). Тогда  Xi принимается за искомый нуль, если выполнен один из двух критериев сходимости

       | F(Xi) | ≤ | EPS |   или   | Xi-1 - Xi | < | Xi | * 10 (- NDIG ) . 
При обращении к подпрограмме может быть задан только первый критерий сходимости (тогда NDIG задается равным 0), либо только второй критерий (тогда EPS задается равным 0), либо оба критерия одновременно.

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

Unit TZF11R_p;
interface
uses
SysUtils, Math, LStruct, Lfunc, UtRes_p, FZF11R_p, ZF11R_p;

function TZF11R: String; 

implementation

function TZF11R: String;
var
NDIG,ITMAX,IERR :Integer;
EPS,A,B,RООТ :Real;
begin
Result := '';
EPS := 0.00001;
NDIG := 6;
A := -3.3;
B := 4.6;
IТМАХ := 20;
ZF11R (FZF11R,A,B,EPS,NDIG,ITMAX,ROOT,IERR);
Result := Result + Format(' %20.16f %20.16f %20.16f %10d %10d %10d %20.16f ',[A,B,EPS,NDIG,ITMAX,IERR,ROOT]) + #$0D#$0A;
UtRes('TZF11R',Result);  //вывод результатов в файл TZF11R.res
exit;
end;

end.

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

function FZF11R(X :Real): Real; 
implementation

function FZF11R(X :Real): Real;
begin
Result := X*X+2.0*X-6.0;
end;

end.

Результаты:    ROOT  = 1.645750595 ,  ITMAX  =  17 ,   IERR  =  0