Текст подпрограммы и версий ( Фортран ) mnb1r.zip |
Тексты тестовых примеров ( Фортран ) tmnb1r.zip |
Текст подпрограммы и версий ( Си ) mnb1r_c.zip |
Тексты тестовых примеров ( Си ) tmnb1r_c.zip |
Текст подпрограммы и версий ( Паскаль ) mnb1r_p.zip |
Тексты тестовых примеров ( Паскаль ) tmnb1r_p.zip |
Решение задачи безусловной минимизации функции многих переменных методом Розенброка.
Для решения задачи: min f (x), x ∈ En используется метод прямого поиска (т.е. без вычисления производной) Розенброка.
Некоторая вычисленная точка xk ∈ En считается точкой минимума f (x), если | f (xk) - f (xk - 1)| ≤ EPSY, где k - номеp этапа поиска, а EPSY - заданная точность вычисления минимума по функционалу.
Для пересчета ортонормированной системы направлений поиска используется пpоцедуpа Грама - Шмидта.
Д.Химмельблау, Прикладное нелинейное программирование, Изд - во "Мир", 1975, 173 - 184.
Р.Беллман, Введение в теорию матриц, Изд - во "Hаука", M., 1976 , 65 - 67.
SUBROUTINE MNB1R (N, X, F, EPS, MAXK, MKAT, MCYC, ALPHA, BETA, NSTEP, EPSY, X1, V, BL, AL, D, BLEN, AJ, E, FUN, IERR)
Параметры
N - | размерность пространства переменных (тип: целый); |
X - | вещественный вектоp длины N; при обращении к подпрограмме содержит заданную начальную точку поиска; на выходе - содержит точку минимального вычисленного значения f (x); |
F - | вещественная переменная, содержащая вычисленное минимальное значение функции f (x); |
EPS - | вещественный вектоp длины N, содержащий заданные начальные значения шага при поиске по ортогональным направлениям; |
MAXK - | целая переменная, при обращении к подпрограмме содержащая заданное максимальное допустимое число вычислений функции, а на выходе - выполненное число вычислений функции; |
MKAT - | целая переменная, при обращении к подпрограмме содержащая заданное максимально допустимое число этапов метода, а на выходе - выполненное число этапов; |
MCYC - | заданное максимально допустимое число циклов на одном этапе метода (тип: целый); |
ALPHA - | вещественная переменная, содержащая заданное значение параметра метода (см. замечания по использованию); |
BETA - | вещественная переменная, содержащая заданное значение параметра метода (см. замечания по использованию); |
NSTEP - | заданный признак обновления длины шага по ортогональным направлениям (если NSTEP = 1, то каждый новый этап начинается с шага EPS) (тип: целый); |
EPSY - | заданная точность вычисления минимума по функционалу (тип: вещественный); |
X1, D, - AJ, E, BLEN | вещественные векторы длины N, используемые в подпрограмме как рабочие; |
V, BL - AL | вещественные двумеpные массивы размерности N * N, используемые в подпрограмме как рабочие; |
FUN - | имя подпрограммы вычисления значения функции f (x) (см. замечания по использованию); |
IERR - | целая переменная, указывающая пpичину окончания процесса: |
IERR= 0 - | найден минимум с заданной точностью по функционалу; |
IERR=66 - | выполнено максимальное число вычислений функции; |
IERR=67 - | выполнено максимальное число циклов на одном этапе метода; |
IERR=68 - | выполнено максимальное число этапов. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию
Розенброк предложил в общем случае выбирать следующие значения параметров метода: ALPHA = 3.0, BETA = 0.5 . Если NSTEP ≠ 1, то в процессе поиска начальный шаг EPS может быстро дробиться. Если при NSTEP ≠ .1 по мнению пользователя процесс остановился слишком pано, то можно продолжить поиск из полученной точки или повторить счет, положив NSTEP равным 1. Подпрограмма FUN составляется пользователем. Имя подпрограммы должно быть определено в вызывающей программе оператором EXTERNAL. Первый оператор подпрограммы вычисления значения функции должен иметь вид: SUBROUTINE FUN (X, F, FE) Параметры X - вещественный вектор длины N, задающий точку пространства, в которой вычисляется значение функции; F - вещественная переменная, содержащая вычисленное значение функции в точке X; FE - заданная точность вычисления значения функции в точке X (тип: вещественный);Параметр FE не должен переопределяться в теле подпрограммы FUN и может не использоваться при вычислении f (x). |
min f(x) , x ∈ E4 . f(x) = (x1 - 1)2 + 10 (x2 - 1)2 + 100 (x3 - 1)2 + 1000 (x4 - 1)2 Точка безусловного минимума x* = (0., 0., 0., 0.) , f(x*) = 0.0 DIMENSION EPS(4), X(4), V(4, 4), D(4), BL(4, 4), AFK(4), BLEN(4), * AJ(4), E(4), AL(4, 4) EXTERNAL FUNT02 DATA ALPHA, BETA, MAXK, MKAT, MCYC /3.0, 0.5, 1000, 50, 10/ DATA X /4*0.0/, EPS /4*0.1/, EPSY /0.1E-5/ NSTEP = 1 N = 4 CALL MNB1R (N, X, F, EPS, MAXK, MKAT, MCYC, ALPHA, * BETA, NSTEP, EPSY, AFK, V, BL, AL, D, BLEN, * AJ, E, FUNT02, IERR) Подпрограмма вычисления функции: SUBROUTINE FUNT02 (X, F, FE) DIMENSION X(4) F = (X(1)-1.)**2 + 10.*(X(2)-1.)**2 + 100.*(X(3)-1.)**2 + 1000.* * (X(4)-1.)**2 RETURN END Результаты: IERR = 0 OБЩEE ЧИCЛO ЭTAПOB 18 ЧИCЛO BЫЧИCЛEHИЙ Ф-ЦИИ 607 ЗHAЧEHИE ФУНКЦИОНАЛA = 4.4558-7 ЗHAЧEHИE HEЗABИCИMЫX ПEPEMEHHЫX X(1) = 0.99950 + 00 X(2) = 0.10001 + 01 X(3) = 0.10001 + 01 X(4) = 0.10001 + 01