Текст подпрограммы и версий ( Фортран )
mnb5r.zip
Тексты тестовых примеров ( Фортран )
tmnb5r.zip
Текст подпрограммы и версий ( Си )
mnb5r_c.zip
Тексты тестовых примеров ( Си )
tmnb5r_c.zip
Текст подпрограммы и версий ( Паскаль )
mnb5r_p.zip
Тексты тестовых примеров ( Паскаль )
tmnb5r_p.zip

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

Назначение

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

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

Для решения задачи:

 min  f(x0 + λ s0) ,   -∞ < λ < ∞ ,   x0En ,   s0En ,
   λ 

x0 и  s0 заданы, используется метод квадратичной аппроксимации Пауэлла.

Для определения отрезка вдоль направления  s0, содержащего точку минимума функции  f (x), используется алгоритм Девиса - Свена - Кемпи.

Минимум  f (x) по направлению  s0 считается найденным, если выполнено хотя бы одно из следующих условий:

1. 
min  | xi - xi | ≤ XLIM ,
  i 

где  xi = x0 + λi s0 - три точки ( i = 1, 2, 3), по которым строится аппpоксимиpующая парабола,  x = x0 + λ s0 - точка минимума параболы, а  XLIM - заданная точность решения задачи по аpгументу;

2.  | f (xk) - f (xk+1)| ≤ EPS, где  xk = x0 + λk s0 - точка минимума аппpоксимиpующей параболы на  k - ой итерации алгоритма Пауэлла, а EPS - заданная точность решения задачи по функционалу.

Д.Химмельблау, Прикладное нелинейное программирование. Изд - во "Мир", M., 1975, 54 - 55.

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

    SUBROUTINE  MNB5R (N, X, S, XX, DELX, EPS, XLIM, XMIN,
                                             YMIN, KOUNT, IERR, FUN) 

Параметры

N - размерность пространства переменных (тип: целый);
X - вещественный вектоp длины  N, задающий начальную точку  x0 поиска минимума  f (x) по направлению;
S - вещественный вектоp длины  N, задающий направление  s0 одномерной минимизации;
XX - вещественный вектоp длины  N, используемый в подпрограмме как рабочий;
DELX - заданный начальный шаг одномерного поиска (тип: вещественный);
EPS - заданная точность вычисления одномерного минимума по функционалу (тип: вещественный);
XLIM - заданная точность вычисления одномерного минимума по аpгументу (тип: вещественный);
XMIN - вещественная переменная, содержащая расстояние до точки минимума  f (x) вдоль  s0, т.е.  x* = x0 + XMIN * S0;
YMIN - вещественная переменная, содержащая вычисленное минимальное значение функции  f (x) вдоль направления  s0, т.е.  YMIN = f (x*);
KOUNT - целая переменная, содержащая фактически выполненное число вычислений функции  f (x) в процессе одномерной минимизации;
IERR - целочисленная переменная, указывающая пpичину окончания процесса:
IERR= 0 - найден минимум с заданной точностью;
IERR= 1 - установлено, что минимум  f (x) вдоль направления  s0 из заданной точки  x0 не существует;
FUN - имя подпрограммы вычисления значения функции  f (x) (см. замечания по использованию).

Версии: нет

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

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

 

Подпрограмма FUN составляется пользователем.

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

        SUBROUTINE  FUN (X, F, FE)

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

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

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

    min  f(x) ,    x  E1 ,   x0 = 0.0 ,   s0 = 1.0 ,   f(x) = 100 * e-x + x .

    Точка минимума  f(x)  вдоль  s  pавна  
          xk = - ln (0.01) ,   f(xk) = i - ln (0.01)

       DIMENSION  X(1), S(1), XX(1)
       EXTERNAL  FUNC
       DATA  N, XLIM, DELX, EPS, X(1), S(1) /1, 1.E-6, 0.5, 1.E-7, 0., 1./
       CALL  MNB5R (N, X, S, XX, DELX, EPS, XLIM, XMIN,
      *                          YMIN, KOUNT, IERR, FUNC)

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

       SUBROUTINE  FUNC (X, F, FE)
       DIMENSION  X(1)
       F = 100.*EXP(-X(1)) + X(1)
       RETURN
       END

Результаты:

      IERR  =  0
      KOUNT  =  15

      XMIN  =  4.6057000 + 00
      YMIN  =  5.6051700 + 00