Текст подпрограммы и версий ( Фортран )
mnl1r.zip
Тексты тестовых примеров ( Фортран )
tmnl1r.zip
Текст подпрограммы и версий ( Си )
mnl1r_c.zip
Тексты тестовых примеров ( Си )
tmnl1r_c.zip
Текст подпрограммы и версий ( Паскаль )
mnl1r_p.zip
Тексты тестовых примеров ( Паскаль )
tmnl1r_p.zip

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

Назначение

Минимизация функции многих переменных по заданному направлению на заданном отрезке методом Фибоначчи.

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

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

     min  φ (x0 + λ s) ,   a0 ≤ λ ≤ b0 ,
       λ 

где  x0, s  En,   a0, b0, λ  E1, используется метод Фибоначчи.

Функция  φ предполагается строго квазивыпуклой на отрезке [a0, b0] по направлению  s.

Hа  k - ой итерации метода строится отрезок  [ak, bk] такой, что  [ak, bk [ak - 1, bk - 1 ...  [a0, b0], и значение  λ*k  [ai, bi] для всех  i, где  λ*k - искомая точка минимума  φ (x) по направлению  s.

Значение  λ*k считается найденым, если для некоторого  k выполнено одно из следующих условий:

- длина отрезка  [ak, bk] меньше заданного  ε > 0;

- | φ (x0 + α s) - φ (x0 + β s) | < ε1 max {| φ (x0 + α s)|, | φ (x0 + β s)|},
   где  ak < α < β < bk;

- выполнено максимальное число итераций метода;

- выполнено максимальное число вычислений функции.

В.Г.Карманов. Математическое программирование. M., Изд - во "Наука", 1980.

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

    SUBROUTINE  MNL1R (N, X, XMIN, S, FUN, AA, BB, XE, FE, UP,
                                             RM, IERR) 

Параметры

N - размерность пространства переменных (тип: целый);
X - вещественный вектоp длины  N, задающий начальную точку поиска минимума по направлению;
XMIN - вещественная переменная, содержащая на выходе шаг по направлению до вычисленной точки минимума;
S - вещественный вектоp длины  N, задающий направление одномерной минимизации;
FUN - имя подпрограммы вычисления значения функции (см. замечания по использованию);
AA - вещественная переменная, задающая нижнюю гpаницу исходного отрезка неопределенности;
BB - вещественная переменная, задающая верхнюю границу исходного отрезка неопределенности;
XE - заданная точность  ε вычисления точки минимума по аpгументу - длина конечного отрезка неопределенности (тип: вещественный);
FE - заданная точность  ε1 вычисления точки минимума по функционалу (тип: вещественный);
UP - вещественный вектоp длины 3, содержащий упpавляющие параметры алгоритма (см. замечания по использованию);
RM - вещественный вектоp длины  N, используемый в подпрограмме как рабочий;
IERR - целая переменная, указывающая пpичину окончания процесса:
IERR= 1 - если достигнута точность XE;
IERR= 2 - если достигнута точность FE;
IERR= 4 - если выполнено максимальное число итераций;
IERR= 5 - если выполнено максимальное число вычислений функции;
IERR=65 - если XE ≤ 0;
IERR=66 - если (BB - AA) < 0 или XE > (BB - AA).

Версии: нет

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

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

 

Подпрограмма FUN составляется пользователем. Первый оператор подпрограммы должен иметь вид:

           SUBROUTINE  FUN (X, F, FE)

       Параметры
       X   - точка, в которой вычисляется значение функции;
       F   - вычисленное значение функции;
       FE - точность, с которой вычисляется значение  F. 

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

Вектоp UP должен быть задан следующим образом:

UP (1) - максимальное допустимое число итераций метода;

UP (2) - максимальное допустимое число вычислений функции;

UP (3) - определяет вариант алгоритма, т.е. если UP (3) = 1, то на каждой итерации вычисляется только одна контрольная точка, если UP (3) = 2, то вычисляются обе точки.

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

    min  φ (x) ,   4.2 ≤ x ≤ 4.8
    φ (x)  =  100 e -x + x ,    x*  =  - ln(0.01)

       DIMENSION  X(1), S(1), RM(1), UP(3)
       INTEGER  N, IERR
       REAL  X, XMIN, S, AA, BB, XE, FE, UP, RM
       DATA  N, X(1), S(1) /1, 0., 1./
       DATA  AA, BB, FE, XE /4.2, 4.8, 1.E-16, 1.E-6/
       DATA  UP /100., 100., 1./
       EXTERNAL  FUNC
       CALL  MNL1R (N, X, XMIN, S, FUNC, AA, BB, XE, FE, UP,
      *                          RM, IERR)

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

Результаты:
      
      IERR  =  2
      XMIN  =  4.60517176