|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/mn_htm_p/mnb8r_p.htm
Дата изменения: Thu Nov 5 15:21:26 2015 Дата индексирования: Sun Apr 10 02:47:44 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий mnb8r_p.zip , mnb8e_p.zip |
Тексты тестовых примеров tmnb8r_p.zip , tmnb8e_p.zip |
Решение задачи одномерной минимизации функции многих переменных по заданному направлению и на заданном интервале методом золотого сечения.
Для решения задачи
min φ (x0 + α s) , x0 ∈ En , s ∈ En , α ∈ R , α
используется метод золотого сечения. При этом предполагается, что задан отрезок [a, b] изменения параметра α такой, что функция φ (x), рассмотренная вдоль направления s, принимает на [a, b] свое минимальное значение.
В.Г.Карманов, Математическое программирование, Изд - во "Hаука", M., 1975, стp.153 - 155.
procedure MNB8R(N :Integer; var X :Array of Real;
var S :Array of Real; var XX :Array of Real;
FUN :Proc_F1_MN; AA :Real; BB :Real; EPSX :Real;
var EPS :Real; ITMAX :Integer; MAXK :Integer;
var FMIN :Real; var XMIN :Real; var KOUNT :Integer;
var ITER :Integer; NACC :Integer; var IER :Integer);
Параметры
| N - | размерность пространства переменных (тип: целый); |
| X - | вещественный вектоp длины N, задающий начальную точку x0 поиска одномерного минимума; |
| S - | вещественный вектоp длины N, задающий направление поиска; |
| XX - | вещественный вектоp длины N, используемый в подпрограмме как рабочий; |
| FUN - | имя подпрограммы вычисления значения минимизиpуемой функции; |
| AA - | нижняя граница интервала, содержащего точку минимума (тип: вещественный); |
| BB - | верхняя граница интервала, содержащего точку минимума (тип: вещественный); |
| EPSX - | заданная точность вычисления точки минимума по аpгументу (тип: вещественный); |
| EPS - | заданная точность вычисления минимума по функционалу (тип: вещественный); |
| ITMAX - | заданное максимально допустимое число итераций метода (тип: целый); |
| MAXK - | заданное максимально допустимое число вычислений функции (тип: целый); |
| FMIN - | вещественная переменная, на выходе из подпрограммы содержащая вычисленное максимальное значение функции; |
| XMIN - | вещественная переменная, на выходе из подпрограммы содержащая значение шага α до точки минимума по направлению; |
| KOUNT - | целая переменная, на выходе из подпрограммы содержащая выполненное число вычислений функции; |
| ITER - | целая переменная, на выходе из подпрограммы содержащая выполненное число итераций; |
| NACC - | целая переменная, задающая признак варианта алгоритма: |
| NACC=1 - | на каждой итерации вычисляется только одна новая контрольная точка; |
| NACC=2 - | для каждого нового интервала вычисляются обе контрольные точки (см. замечания по использованию); |
| IERR - | целая переменная, служащая для сообщения об ошибках и причинах окончания поиска: |
| IERR= 1 - | достигнута точность EPS; |
| IERR= 2 - | достигнута точность EPSX; |
| IERR=65 - | заданная точность EPSX ≤ 0; |
| IERR=66 - | заданные значения AA, BB, и EPSX таковы, что либо BB ≤ AA, либо (BB - AA) < EPSX; |
| IERR=67 - | выполнено ITMAX итераций, но ни EPSX, ни EPS не достигнуты; |
| IERR=68 - | выполнено MAXK вычислений функции, но ни EPSX, ни EPS не достигнуты. |
Версии
| MNB8E - | решение задачи одномерной минимизации функции многих переменных по заданному направлению и на заданном интервале методом золотого сечения, вычисления проводятся с расширенной (Extended) точностью. |
Вызываемые подпрограммы: нет
Замечания по использованию
|
В подпрограмме MNB8E и подпрограмме FUN параметры X, S, XX, AA, BB, EPSX, EPS, FMIN, XMIN, F, FE должны иметь тип Extended. Тип остальных параметров не меняется. | |
|
Подпрограмма FUN составляется пользователем. Первый оператор подпрограммы вычисления функции должен иметь вид:
procedure FUN (var X :Array of Real; var F :Real; FE :Real);
Параметры
X - вещественный вектор длины N, задающий точку
пространства, в которой вычисляется значение функции;
F - вещественная переменная, содержащая
вычисленное значение в точке X;
FE - заданная точность вычисления значения функции
в точке X (тип: вещественный).
Параметр FE не должен переопределяться в теле подпрограммы FUN и может не использоваться для вычисления значения функции. На очередной итерации метода на интервале [ak, bk] фиксиpуются две контрольные точки v1 и v2, такие что ak < v1 < v2 < bk. При NACC = 1 в качестве одной из точек (v1 или v2) используется точка, вычисленная на пpедыдущей итерации. При этом погрешность вычислений может накапливаться от итерации к итерации. При NACC = 2 на каждой итерации v1 и v2 вычисляются заново, однако число вычислений функции на каждой итерации удваивается. |
min φ (x0 + α s) , x0 , s ∈ E1 , x0 = 0.0 , s = 1.0
α
φ (x) = 100*e-x + x
Оптимальное значение α* = - ln(0.01)
φ (x0 + α* s) = 1 - ln(0.01)
Unit TMNB8R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FMNB8R_p, MNB8R_p;
function TMNB8R: String;
implementation
function TMNB8R: String;
var
NACC,KOUNT,ITER,IER :Integer;
FMIN,XMIN :Real;
X :Array [0..0] of Real;
S :Array [0..0] of Real;
ХХ :Array [0..0] of Real;
const
N :Integer = 1;
АА :Real = 4.2;
ВВ :Real = 4.8;
EPS :Real = 1.0E-16;
EPSX :Real = 1.0E-6;
IТМАХ :Integer = 100;
МАХК :Integer = 100;
begin
Result := ''; { результат функции }
{ прототип оператора DАТА на FORTRANе }
X[0] := 0.0;
S[0] := 1.0;
NАСС := 1;
Result := Result + Format('%s',
[' ОДНОМЕРНАЯ МИНИМИЗАЦИЯ МЕТОДОМ ''ЗОЛОТОГО CEЧEHИЯ''' + #$0D#$0A]);
Result := Result + Format('%s',[' ИНТЕРВАЛ (']);
Result := Result + Format(' %20.16f %20.16f ',[AA,BB]);
Result := Result + Format('%s',[' )' + #$0D#$0A]);
Result := Result + Format('%s',[' ТОЧНОСТЬ ПО ФYHKЦИOHAЛY']);
Result := Result + Format(' %20.16f ',[EPS]);
Result := Result + Format('%s',[' ТОЧНОСТЬ ПО APГYMEHTY']);
Result := Result + Format(' %20.16f ',[EPSX]);
Result := Result + Format('%s',
[' МАКСИМАЛЬНОЕ ЧИСЛО ИTEPAЦИЙ']);
Result := Result + Format(' %6d ',[ITMAX]);
Result := Result + Format('%s',
[' МАКСИМАЛЬНОЕ ЧИСЛО BЫЧ. ФYHKЦИИ']);
Result := Result + Format(' %6d ',[MAXK]) + #$0D#$0A;
MNB8R(N,X,S,XX,FMNB8R,AA,BB,EPSX
,EPS,ITMAX,MAXK,FMIN,XMIN
,KOUNT,ITER,NACC,IER);
Result := Result + Format('%s',[' IER=']);
Result := Result + Format('%3d ',[IER]);
Result := Result + Format('%s',[' ITER=']);
Result := Result + Format('%5d ',[ITER]);
Result := Result + Format('%s',[' FMIN=']);
Result := Result + Format('%20.16f ',[FMIN]);
Result := Result + Format('%s',[' XMIN=']);
Result := Result + Format('%20.16f ',[XMIN]) + #$0D#$0A;
Result := Result + Format('%s',[' KOUNT=']);
Result := Result + Format('%5d ',[KOUNT]) + #$0D#$0A;
UtRes('TMNB8R',Result); { вывод результатов в файл TMNB8R.res }
exit;
end;
end.
Unit fmnb8r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;
procedure fmnb8r(var X :Array of Real; var F :Real; FE :Real);
implementation
procedure fmnb8r(var X :Array of Real; var F :Real; FE :Real);
begin
F := 100.0*Exp(-X[0])+X[0];
end;
end.
Результаты:
IERR = 1
ITER = 14
FMIN = 5.605170 + 00
XMIN = 4.605681 + 00
KOUNT = 15