Текст подпрограммы и версий ( Фортран )
mnb3r.zip
Тексты тестовых примеров ( Фортран )
tmnb3r.zip
Текст подпрограммы и версий ( Си )
mnb3r_c.zip
Тексты тестовых примеров ( Си )
tmnb3r_c.zip
Текст подпрограммы и версий ( Паскаль )
mnb3r_p.zip
Тексты тестовых примеров ( Паскаль )
tmnb3r_p.zip

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

Назначение

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

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

Для решения задачи:  min  f (x) ,  x  En используется метод Флетчера - Ривса. Некоторая вычисленная точка  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.

Использование

    SUBROUTINE  MNB3R (N, M, X1, F, G, EST, EPS, LIMIT, IERR,
                                              H, KOUNT, FUN, GRAD) 

Параметры

N - размерность пространства переменных (тип: целый);
M - целочисленная переменная, равная 2 * N;
X1 - вещественный векто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ом направлении функция  f (x) не имеет минимума;
H - вещественный вектоp длины  M, используемый в подпрограмме как рабочий;
KOUNT - целая переменная, содержащая фактически выполненное число итераций метода;
FUN - имя подпрограммы вычисления значения функции  f (x) (см. замечания по использованию);
GRAD - имя подпрограммы вычисления градиента функции  f (x) (см. замечания по использованию).

Версии: нет

Вызываемые подпрограммы: нет

Замечания по использованию

 

Оценка EST минимального значения функции  f (x) используется в пpоцедуpе одномерной минимизации по направлению. Если приближенное значение минимума можно указать, то это ускоpит процесс минимизации. В противном случае можно положить EST = 0.0 .

Подпрограммы FUN и GRAD составляются пользователем. Первый оператор подпрограммы вычисления функции должен иметь вид:

         SUBROUTINE  FUN (X1, F, FE)

         Параметры       
         X1 - вещественный вектор  N длины задающий точку
                 пространства, в которой  вычисляется значение функции;
          F  - вещественная переменная, содержащая
                 вычисленное значение функции в точке X1;
         FE - заданная точность вычисления значения функции
                 в точке X1 (тип: вещественный);  

Параметр FE не должен переопределяться в теле подпрограммы FUN и может не использоваться для вычисления f (x).

Первый оператор подпрограммы вычисления градиента функции  f (x)должен иметь вид:

         SUBROUTINE  GRAD (X1, G, GE, IO)

         Параметры      
         X1 - вещественный вектор  N длины задающий точку
                 пространства, в которой вычисляется градиент;
          G  - вещественный вектоp длины  N, содержащий
                  вычисленный градиент функции в точке X1;
         GE - заданная точность вычисления компонент
                  градиента (тип: вещественный);
         IO - целочисленная  переменная,  используемая  как рабочая. 

Параметры GE и IO не должны переопределяться в теле подпрограммы GRAD и могут не использоваться для вычисления градиента.

Имена подпрограммы вычисления значения функции  f (x) и ее градиента должны быть определены в вызывающей программе оператором EXTERNAL.

Пример использования

    min  f(x) ,    x  E4 .
    f(x)  =  100 ( x2 - x12 )2 + (1 - x1)2 + 90 (x4 - x3)2 + (1 - x3)2 + 
            + (1 - x3)2 + 10.1 ( (x2 - 1)2 + (x4 - 1)2 ) + 19.8 (x2 - 1) (x4 - 1) .
  Точка абсолютного минимума     x*  =  (1., 1., 1., 1.) ,   f(x*)  =  0.

       DIMENSION  X1(4), G(4), H(8)
       EXTERNAL  FUND06, GRDD06
       DATA  N, LIMIT /4, 100/
       DATA  X1(1), X1(2), X1(3), X1(4) /-3., -1., -3., -1./
       EPS = 0.1E-10
       EST = 0.0
       M = 2*N
       CALL  MNB3R (N, M, X1, F, G, EST, EPS, LIMIT, IERR, H, COUNT,
      *                            FUND06, GRDD06)

       SUBROUTINE  FUND06 (X, F, FE)
       DIMENSION  X(4)
       F = 100.*( X(2) - X(1)**2 )**2 + ( 1. - X(1)**2 + 90.*( X(4) - X(3)**2 )**2
      *   + ( 1. - X(3) )**2 + 10.1*( (X(2) - 1.)**2 + (X(4) - 1.)**2 )
      *   + 19.8*(X(2) - 1.)*(X(4) - 1.)
       RETURN
       END

       SUBROUTINE  GRDD06 (X, G, GE, IO)
       DIMENSION  X(4), G(4)
       G(1) = -400.*X(1)*( X(2) - X(1)**2 ) - 2.*( 1. - X(1) )
       G(2) = 200.*( X(2) - X(1)**2 ) + 20.2*( X(2) - 1. ) + 19.8*( X(4) - 1. )
       G(3) = -360.*X(3)*( X(4) - X(3)**2 ) - 2.*( 1. - X(3) )
       G(4) = 180.*( X(4) - X(3)**2 ) + 20.2*( X(4) - 1. ) + 19.8*( X(2) - 1. )
       RETURN
       END

Результаты:

      IERR  =  -1
      F  =  0.3328214 - 09

      X1(1)  =  1.0000100 + 00
      X1(2)  =  1.0000190 + 00
      X1(3)  =  0.99999060 + 00
      X1(4)  =  0.99998120 + 00

      ИTEPAЦИЙ - 62