|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/mn_htm_p/mna4r_p.htm
Дата изменения: Mon Nov 16 11:42:33 2015 Дата индексирования: Sun Apr 10 04:08:12 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий mna4r_p.zip , mna4e_p.zip |
Тексты тестовых примеров tmna4r_p.zip , tmna4e_p.zip |
Поиск локального минимума функции одной переменной модифицированным методом Брента (методом обратной параболической интерполяции с вычислением первой производной).
Пусть заданы функция F (X) и три такие точки A, B и C, локализующие минимум функции F (X), что A < B < C, причем F (B) < F (A) и F (B) < F (C).
Подпрограмма MNA4R осуществляет поиск точки XMIN локального минимума функции F (X) на отрезке [A, C] с относительной точностью EPS модифицированным методом Брента (методом обратной параболической интерполяции с вычислением первой производной).
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1979.
procedure MNA4R(F :Func_F1; FD :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); |
| FD - | имя вещественной подпрограммы - функции вычисления первой производной функции 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 - | заданное максимальное количество итераций (тип: целый). |
Версии
| MNA4E - | поиск минимума функции одной переменной методом Брента (методом обратной параболической итерации) в режиме расширенной (Extended) точности. При этом параметры A, B, C, EPS, XMIN и FMIN должны иметь тип Extended, а подпрограммы - функции F и FD должны иметь тип Extended. |
Вызываемые подпрограммы: нет
Замечания по использованию
| В подпрограммах MNA4R и MNA4E имеется глобальная запись (структура данных) _MNA4RR с элементом elm1 ITER. Переменная ITER полагается равной количеству итераций, выполненных при поиске минимума функции. Если IFLAG = 0, то ITER = ITMAX. В этом случае следует либо увеличить ITMAX, либо увеличить EPS. |
Unit TMNA4R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FMNA4R_p, FDMNA4R_p, MNA4R_p;
function TMNA4R: String;
implementation
function TMNA4R: 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;
MNA4R(FMNA4R,FDMNA4R,A,B,C,EPS,XMIN,FMIN,IFLAG,ITMAX);
Result := Result + Format('%20.16f %20.16f ',[XMIN,FMIN]) + #$0D#$0A;
Result := Result + Format('%5d %5d ',[IFLAG,_MNA4RR.elm1]) + #$0D#$0A;
UtRes('TMNA4R',Result); { вывод результатов в файл TMNA4R.res }
exit;
end;
end.
Unit fmna4r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;
function fmna4r(X :Real): Real;
implementation
function fmna4r(X :Real): Real;
begin
{ Result - прототип имени функции fmna4r на FORTRANe }
Result := X*X;
exit;
end;
end.
Unit fdmna4r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;
function fdmna4r(X :Real): Real;
implementation
function fdmna4r(X :Real): Real;
begin
{ Result - прототип имени функции fdmna4r на FORTRANe }
Result := 2.0*X;
exit;
end;
end.
Результаты:
XMIN = 0.0 , FMIN = 0.0
IFLAG = 1 , ITER = 3