Текст подпрограммы и версий mna3r_p.zip , mna3e_p.zip |
Тексты тестовых примеров tmna3r_p.zip , tmna3e_p.zip |
Поиск локального минимума функции одной переменной методом Брента (метод обратной параболической интерполяции).
Пусть зананы функция 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