|
Текст подпрограммы и версий zf10r_p.zip zf10e_p.zip |
Тексты тестовых примеров tzf10r_p.zip tzf10e_p.zip |
Вычисление нуля вещественной функции, меняющей знак на заданном интервале, методом Брента.
ZF10R вычисляет нуль вещественной функции Y = F (X), меняющей знак на заданном интервале (A, B), т.е. F (A) * F (B) < 0, используя метод Брента.
R.P.Brent, An Algorithm with Guaranteed Convergence for Finding a Zero of a Function, The Computer Journal, 14 (4), 1971.
procedure ZF10R(F :Func_F1; var A :Real; var 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 - | целая переменная, значение которой перед началом работы подпрограммы должно быть положено равным максимальному числу итераций, ориентировочно требуемых для обеспечения сходимости; ее значение в результате работы подпрограммы полагается равным действительному числу итераций, потребовавшихся для обеспечения сходимости в соответствии с заданными критериями; |
| ROOT - | вещественная переменная, значение которой в pезультате работы подпрограммы полагается равным вычисленному нулю функции F (X); |
| IERR - | целая переменная, служащая для сообщения об ошибках, обнаружбнных в ходе работы подпрограммы; при этом |
| IERR=65 - | когда нуль функции не может быть посчитан в пределах заданного числа итераций; |
| IERR=66 - | когда функция не меняет знака на заданном интервале. |
Версии
| ZF10E - | вычисление нуля вещественной функции, меняющей знак на заданном интервале, методом Брента с расширенной (Extended) точностью. При этом параметры A, B, EPS и ROOT должны иметь тип Extended, а подпрограмма - функция вычисления F (X) должна тоже иметь тип Extended. |
Вызываемые подпрограммы
| UTZF10 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы ZF10R. |
| UTZF11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы ZF10E. |
Замечания по использованию
|
Пусть Xi - 1 и Xi являются двумя последовательными приближениями к нулю функции F (X). Тогда Xi принимается за искомый нуль, если выполнен один из двух критериев сходимости | F(Xi) | ≤ | EPS | или | Xi -1 - Xi | < | Xi | * 10 (- NDIG ) .При обращении к подпрограмме может быть задан только первый критерий сходимости (тогда NDIG задается равным 0), либо только второй критерий (тогда EPS задается равным 0), либо оба критерия одновременно. |
Unit TZF10R_p;
interface
uses
SysUtils, Math, LStruct, Lfunc, UtRes_p, FZF10R_p, ZF10R_p;
function TZF10R: String;
implementation
function TZF10R: 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;
ZF10R(FZF10R,A,B,EPS,NDIG,ITMAX,ROOT,IERR);
Result := Result + Format(' %20.16f %20.16f %20.16f %10d %10d %20.16f %10d ',[A,B,EPS,NDIG,ITMAX,ROOT,IERR]) + #$0D#$0A;
UtRes('TZF10R',Result); //вывод результатов в файл TZF10R.res
exit;
end;
end.
Unit FZF10R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc;
function FZF10R(X :Real): Real;
implementation
function FZF10R(X :Real): Real;
begin
Result := X*X+2.0*X-6.0;
end;
end.
Результаты: ROOT = 1.64575096 , ITMAX = 7 , IERR = 0