Текст подпрограммы и версий ( Фортран )
mnb1r.zip
Тексты тестовых примеров ( Фортран )
tmnb1r.zip
Текст подпрограммы и версий ( Си )
mnb1r_c.zip
Тексты тестовых примеров ( Си )
tmnb1r_c.zip
Текст подпрограммы и версий ( Паскаль )
mnb1r_p.zip
Тексты тестовых примеров ( Паскаль )
tmnb1r_p.zip

Подпрограмма:  MNB1R

Назначение

Решение задачи безусловной минимизации функции многих переменных методом Розенброка.

Математическое описание

Для решения задачи:  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