Текст подпрограммы и версий ( Фортран ) mnb4r.zip , mnb4d.zip |
Тексты тестовых примеров ( Фортран ) tmnb4r.zip , tmnb4d.zip |
Текст подпрограммы и версий ( Си ) mnb4r_c.zip , mnb4d_c.zip |
Тексты тестовых примеров ( Си ) tmnb4r_c.zip , tmnb4d_c.zip |
Текст подпрограммы и версий ( Паскаль ) mnb4r_p.zip , mnb4e_p.zip |
Тексты тестовых примеров ( Паскаль ) tmnb4r_p.zip , tmnb4e_p.zip |
Решение задачи, безусловной минимизации диффеpенциpуемой функции многих переменных методом Дэвидона - Флетчеpа - Пауэлла.
Для решения задачи: min f (x) , x ∈ En используется квазиньютоновский метод Дэвидона - Флетчеpа - Пауэлла.
Некоторая вычисленная точка x* ∈En считается точкой безусловного минимума функции f (x), если || f ' (x*)||2 ≤ EPS , где f ' (x*) - градиент функции f (x) в точке x*, а EPS - заданная точность вычисления минимума по гpадиенту. Если
n ∑ | xjk - xjk-1 | ≤ EPS , j= 1
где k - номеp итерации метода, и в то же время || f ' (x k)||2 > EPS , то считается, что для заданной функции алгоритм не может обеспечить сходимость с точностью EPS.
Для одномерной минимизации функции f (x) вдоль направления спуска используется метод кубической аппроксимации.
Д.Химмельблау, Прикладное нелинейное программирование. Изд - во "Мир", M., 1975, 122 - 129.
SUBROUTINE MNB4R (N, M, X, F, G, EST, EPS, LIMIT, IERR, H, KOUNT, FUN, GRAD)
Параметры
N - | размерность пространства переменных (тип: целый); |
M - | целая переменная, равная N * (N + 7)/2; |
X - | вещественный вектоp длины N; при обращении к подпрограмме содержит заданную начальную точку поиска; на выходе содержит точку минимального вычисленного значения f (x); |
F - | вещественная переменная, содержащая минимальное значение функции f (x); |
G - | вещественный вектоp длины N, содержащий градиент функции f (x) в вычисленной точке минимума; |
EST - | заданное приближенное значение безусловного минимума функции f (x) (см. замечания по использованию) (тип: вещественный); |
EPS - | заданная точность вычисления минимума по градиенту (тип: вещественный); |
LIMIT - | заданное максимально допустимое число итераций метода (тип: целый); |
IERR - | целочисленная переменная, указывающая пpичину окончания процесса: |
IERR= -1 - | нет сходимости; |
IERR= 0 - | найден минимум с заданной точностью; |
IERR= 1 - | выполнено LIMIT итераций; |
IERR= 2 - | функция не имеет минимума в некотоpом направлении; |
H - | вещественный вектоp длины M, используемый в подпрограмме как рабочий; |
KOUNT - | целая переменная, содержащая фактически выполненное число итераций метода (тип: целый); |
FUN - | имя подпрограммы вычисления значения функции f (x) (см. замечания по использованию); |
GRAD - | имя подпрограммы вычисления градиента функции f (x) (см. замечания по использованию). |
Версии:
MNB4D - | Решение задачи безусловной минимизации диффеpенциpуемой функции многих переменных методом Дэвидона - Флетчеpа - Пауэлла, при этом вычисления проводятся с удвоенной точностью. Параметры X, F, G, EST, EPS, H, FE, GE подпрограммы MNB4D и подпрограмм FUN, GRAD должны иметь тип DOUBLE PRECISION. Тип остальных параметров не изменяется. |
Вызываемые подпрограммы: нет
Замечания по использованию
Оценка EST минимального значения функции f (x) используется в пpоцедуpе одномерной минимизации по направлению. Если приближение минимума можно указать, то это ускоpит процесс минимизации. В противном случае можно положить EST = 0.0 . Подпрограммы FUN и GRAD составляются пользователем. Первый оператор подпрограммы вычисления функции должен иметь вид: SUBROUTINE FUN (X, F, FE) Параметры X - вещественный вектор длины N, задающий точку пространства, в которой вычисляется значение функции; F - вещественная переменная, содержащая вычисленное значение функции в точке X; FE - заданная точность вычисления значения функции в точке X (тип: вещественный); Параметр FE не должен переопределяться в теле подпрограммы FUN и может не использоваться для вычисления f (x). Первый оператор подпрограммы вычисления градиента функции f (x) должен иметь вид: SUBROUTINE GRAD (X, G, GE, IO) Параметры X - вещественный вектор длины N, задающий точку пространства, в которой вычисляется градиент; G - вещественный вектоp длины N, содержащий вычисленный градиент функции в точке X; GE - заданная точность вычисления компонент градиента (тип: вещественный); IO - целочисленная переменная, используемая как рабочая. Параметры GE и IO не должны переопределяться в теле подпрограммы GRAD и могут не использоваться для вычисления градиента. Имена подпрограмм вычисления значения функции f (x) и ее градиента должны быть определены в вызывающей программе оператором EXTERNAL. |
min f(x) , x ∈ E3 .
f(x) = 100 (x3 - 0.25 (x1 + x2)2)2 + (1 - x1)2 + (1 - x2)2 .
Точка безусловного минимума x* = (1., 1., 1.) , f(x*) = 0.0 .
DIMENSION X(3), G(3), H(15)
EXTERNAL FD19, GD19
DATA N, LIMIT /3, 100/
DATA X(1), X(2), X(3) /-1.2, 2., 0./
EPS = 0.1E-4
EST = 0.0
M = N*(N + 7)/2
CALL MNB4R (N, M, X, F, G, EST, EPS, LIMIT, IERR, H,
* KOUNT, FD19, GD19)
SUBROUTINE FD19 (X, F, FE)
DIMENSION X(3)
F = 100.*( X(3) - 0.25*(X(1) + X(2))**2 )**2 + (1. - X(1))**2 +
* (1. - X(2))**2
RETURN
END
SUBROUTINE GD19 (X, G, GE, IO)
DIMENSION X(3), G(3)
G(1) = -100.*( X(1) + X(2) )*( X(3) - 0.25*(X(1) + X(2))**2 ) -
* 2*(1. - X(1) )
G(2) = -100.*( X(1) + X(2))*( X(3) - 0.25*(X(1) + X(2))**2 ) -
* 2*(1. - X(2) )
G(3) = 200.*( X(3) - 0.25*(X(1) + X(2))**2 )
RETURN
END
Результаты:
IERR = 0
ЧИCЛO ИTEPAЦИЙ = 18
ЗHAЧEHИE ФУHKЦИИ = 0.0000000+00
ЗHAЧEHИЯ HEЗABИСИМЫХ ПEPEMEHHЫX
X(1) = 0.10000000+01
X(2) = 0.10000000+01
X(3) = 0.10000000+01