Текст подпрограммы и версий
mna1r_p.zip , mna1e_p.zip
Тексты тестовых примеров
tmna1r_p.zip , tmna1e_p.zip

Подпрограмма:  MNA1R (модуль MNA1R_p)

Назначение

Локализация минимума функции одной переменной.

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

Подпрограмма MNA1R для заданной функции одной переменной F (X) выполняет поиск трех таких точек A, B и C, что A < B < C, причем F (B) < F (A) и F (B) < F (C).

Если такие три точки A, B и C найдены, то это означает, что минимум функции (локальный или глобальный) находится между ними.

Перед работой подпрограммы должны быть заданы отличные друг от друга начальные значения для A и B и максимальное количество попыток NMAX для локализации минимума.

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

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

procedure MNA1R(F :Func_F1; var A :Real; var B :Real; var C :Real;
                var FA :Real; var FB :Real; var FC :Real;
                var IFLAG :Integer; NMAX :Integer);

Параметры

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

Версии

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

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

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

  В подпрограммах MNA1R и MNA1E имеется глобальная запись (структура данных)  _MNA1RR с элементом elm1, который полагается равным количеству попыток, выполненных для локализации минимума. Если IFLAG = 0, то _MNA1RR.elm1 := NMAX .

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

Unit TMNA1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FMNA1R_p, MNA1R_p;

function TMNA1R: String;

implementation

function TMNA1R: String;
var
NMAX,IFLAG :Integer;
A,B,C,FA,FB,FC :Real;
begin
Result := '';  { результат функции }
A := 2.5;
B := 2.51;
NМАХ := 100;
MNA1R(FMNA1R,A,B,C,FA,FB,FC,IFLAG,NMAX);
Result := Result + Format('%20.16f %20.16f %20.16f  %20.16f  %20.16f  %20.16f ',
 [A,B,C,FA,FB,FC]) + #$0D#$0A;
Result := Result + Format('%5d %5d ',[IFLAG,_MNA1RR.elm1]) + #$0D#$0A;
UtRes('TMNA1R',Result);  { вывод результатов в файл TMNA1R.res }
exit;
end;

end.

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

function fmna1r(X :Real): Real;

implementation

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

end.

Результаты:

     A   =  2.75576 ,        B   =   3.07554 ,      C   =   3.59296 
     FA = - 0.650909 ,    FB = - 0.690265 ,    FC = - 0.540556 
                     
    IFLAG = 1 
    NREAL = 3