Текст подпрограммы и версий mna2r_p.zip , mna2e_p.zip |
Тексты тестовых примеров tmna2r_p.zip , tmna2e_p.zip |
Поиск локального минимума функции одной переменной методом золотого сечения.
Пусть заданы функция F (X) и три такие точки A, B и C, локализующие минимум функции F (X), что A < B < C, причем F (B) < F (A) и F (B) < F (C).
Подпрограмма MNA2R осуществляет поиск точки XMIN минимума функции F (X) на отрезке [A, C] с относительной точностью EPS методом золотого сечения.
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1979.
procedure MNA2R(F :Func_F1; A :Real; B :Real; C :Real; EPS :Real; var XMIN :Real; var FMIN :Real);
Параметры
F - | имя вещественной подпрограммы - функции вычисления F (X); |
A, B, C - | заданные значения тройки чисел, локализующих минимум функции F (X) (тип: вещественный); |
EPS - | заданная относительная точность вычисления минимума функции F (X) на отрезке [A, C] (тип: вещественный); |
XMIN - | вещественная переменная, значение которой полагается равным найденной точке минимума функции F (X) на отрезке [A, C]; |
FMIN - | вещественная переменная, значение которой полагается равным F (XMIN). |
Версии
MNA2E - | поиск минимума функции одной переменной в режиме расширенной (Extended) точности. При этом параметры A, B, C, EPS, XMIN, и FMIN должны иметь тип Extended, а подпрограмма - функция F тоже должна иметь тип Extended. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit TMNA2R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, FMNA2R_p, MNA2R_p; function TMNA2R: String; implementation function TMNA2R: String; var EPS,A,B,C,XMIN,FMIN :Real; begin Result := ''; { результат функции } EPS := 1.E-6; A := -10.0; B := -9.9; C := 11.0; MNA2R(FMNA2R,A,B,C,EPS,XMIN,FMIN); Result := Result + Format('%20.16f %20.16f ',[XMIN,FMIN]) + #$0D#$0A; UtRes('TMNA2R',Result); { вывод результатов в файл TMNA2R.res } exit; end; end. Unit fmna2r_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc; function fmna2r(X :Real): Real; implementation function fmna2r(X :Real): Real; begin { Result - прототип имени функции fmna2r на FORTRANe } Result := X*X; exit; end; end. Результаты: XMIN = 0.374339E - 22 FMIN = 0.0