Текст подпрограммы и версий 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