|
Текст подпрограммы и версий mna1r_p.zip , mna1e_p.zip |
Тексты тестовых примеров tmna1r_p.zip , tmna1e_p.zip |
Локализация минимума функции одной переменной.
Подпрограмма 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