Текст подпрограммы и версий
mna2r_p.zip , mna2e_p.zip
Тексты тестовых примеров
tmna2r_p.zip , tmna2e_p.zip

Подпрограмма:  MNA2R (модуль MNA2R_p)

Назначение

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

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

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

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

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

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

procedure MNA2R(F :Func_F1; A :Real; B :Real; C :Real; EPS :Real;
                var XMIN :Real; var FMIN :Real);

Параметры

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

Версии

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

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

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

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

Unit TMNA2R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FMNA2R_p, MNA2R_p;

function TMNA2R: String;

implementation

function TMNA2R: String;
var
EPS,A,B,C,XMIN,FMIN :Real;
begin
Result := '';  { результат функции }
EPS := 1.E-6;
A := -10.0;
B := -9.9;
C := 11.0;
MNA2R(FMNA2R,A,B,C,EPS,XMIN,FMIN);
Result := Result + Format('%20.16f %20.16f ',[XMIN,FMIN]) + #$0D#$0A;
UtRes('TMNA2R',Result);  { вывод результатов в файл TMNA2R.res }
exit;
end;

end.

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

function fmna2r(X :Real): Real;

implementation

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

end.

Результаты:

         XMIN = 0.374339E - 22 
         FMIN = 0.0