Текст подпрограммы и версий
mna3r_p.zip , mna3e_p.zip
Тексты тестовых примеров
tmna3r_p.zip , tmna3e_p.zip

Подпрограмма:  MNA3R (модуль MNA3R_p)

Назначение

Поиск локального минимума функции одной переменной методом Брента (метод обратной параболической интерполяции).

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

Пусть зананы функция F (X) и три такие точки A, B и C, локализующие минимум функции F (X), что A < B < C, причем F (B) < F (A) и F (B) < F (C).

Подпрограмма MNA3R осуществляет поиск точки XMIN локального минимума функции F (X) на отрезке [A, C] с относительной точностью EPS методом Брента (методом обратной параболической интерполяции).

Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1979.

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

procedure MNA3R(F :Func_F1; var A :Real; var B :Real; var C :Real;
                EPS :Real; var XMIN :Real; var FMIN :Real;
                var IFLAG :Integer; ITMAX :Integer);

Параметры

F - имя вещественной подпрограммы - функции вычисления F (X);
A, B, C - заданные значения тройки чисел, локализующих минимум функции F (X) (тип: вещественный);
EPS - заданная относительная точность вычисления минимума функции F (X) на отрезке [A, C] (тип: вещественный);
XMIN - вещественная переменная, значение которой полагается равным найденной точке минимума функции F (X) на отрезке [A, C];
FMIN - вещественная переменная, значение которой полагается равным F (XMIN);
IFLAG - целая переменная, служащая для сообщения о том, удалось ли найти минимум функции F (X) на отрезке [A, C] за ITMAX или меньше итераций; при этом:
IFLAG=0 - когда минимум функции F (X) не найден; тогда XMIN содержит последнее приближение к точке минимума, а FMIN - значение F (X) в этой точке;
IFLAG=1 - когда минимум найден с точностью EPS;
ITMAX - заданное максимальное количество итераций (тип: целый).

Версии

MNA3E - поиск минимума функции одной переменной методом Брента (методом обратной параболической итерации) в режиме расширенной (Extended) точности. При этом параметры A, B, C, EPS, XMIN и FMIN должны иметь тип Extended, а подпрограмма - функция F тоже должна иметь тип Extended.

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

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

  В подпрограммах MNA3R и MNA3E имеется глобальная запись (структура данных)  _MNA3RR с элементом elm1, который полагается равным количеству итераций, выполненных при поиске минимума функции. Если IFLAG = 0, то _MNA3RR.elm1 := ITMAX. В этом случае следует либо увеличить ITMAX, либо увеличить EPS.

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

Unit TMNA3R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FMNA3R_p, MNA3R_p;

function TMNA3R: String;

implementation

function TMNA3R: String;
var
ITMAX,IFLAG :Integer;
A,B,C,EPS,XMIN,FMIN :Real;
begin
Result := '';  { результат функции }
A := -10.0;
B := -9.999;
C := 11.0;
EPS := 1.E-6;
IТМАХ := 100;
MNA3R(FMNA3R,A,B,C,EPS,XMIN,FMIN,IFLAG,ITMAX);
Result := Result + Format('%16.7f %16.7f ',[XMIN,FMIN]) + #$0D#$0A;
Result := Result + Format('%5d %5d ',[IFLAG,_MNA3RR.elm1]) + #$0D#$0A;
UtRes('TMNA3R',Result);  { вывод результатов в файл TMNA3R.res }
exit;
end;

end.

Unit fmna3r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;

function fmna3r(X :Real): Real;

implementation

function fmna3r(X :Real): Real;
begin
{ Result - прототип имени функции fmna3r на FORTRANe }
Result := X*X;
exit;
end;

end.

Результаты:

        XMIN  = 0.0 ,    FMIN = 0.0 
        IFLAG = 1 ,       ITER   = 10