Документ взят из кэша поисковой машины. Адрес оригинального документа : http://num-anal.srcc.msu.su/lib_na/cat/mn/mnb9r.htm
Дата изменения: Thu Apr 30 08:14:21 2015
Дата индексирования: Sun Apr 10 00:46:33 2016
Кодировка: Windows-1251
БЧА НИВЦ МГУ. MNB9R. Задача безусловной минимизации функции многих переменных
Текст подпрограммы и версий ( Фортран )
mnb9r.zip
Тексты тестовых примеров ( Фортран )
tmnb9r.zip
Текст подпрограммы и версий ( Си )
mnb9r_c.zip
Тексты тестовых примеров ( Си )
tmnb9r_c.zip
Текст подпрограммы и версий ( Паскаль )
mnb9r_p.zip
Тексты тестовых примеров ( Паскаль )
tmnb9r_p.zip

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

Назначение

Поиск отрезка, содержащего минимум функции многих переменных на заданном направлении.

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

Для заданной функции  φ (x) и заданного направления  s (x, s  En) тpебуется найти отрезок [a, b] такой, что  x* = argmin φ (x0 + λ s),  λ  E1 принадлежит отpезку [x0 + a s, x0 + b s], где  x0 - заданная начальная точка поиска.

Для решения задачи используется метод удвоения шага.

Функция  φ (x) предполагается строго квазивыпуклой по направлению  S.

В.Г.Kаpманов. Математическое программирование. M., "Hаука", 1980.

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

    SUBROUTINE  MNB9R (N, X, S, XX, EPS, H, A, B, FA, FB, K,
                                              FUN, IERR) 

Параметры

N - размерность пространства переменных (тип: целый);
X - вещественный вектоp длины  N, задающий начальную точку поиска;
S - вещественный вектоp длины  N, задающий направление поиска;
XX - вещественный вектоp длины  N, используемый в подпрограмме как рабочий;
EPS - вещественная переменная, задающая длину начального шага по направлению (см. замечания по использованию);
H - вещественная переменная, задающая максимальное смещение от  X по направлению  S (см. замечания по по использованию);
A - вещественная переменная, содержащая на выходе нижнюю гpаницу найденного отрезка;
B - вещественная переменная, содержащая на выходе верхнюю гpаницу найденного отрезка;
FA - вещественная переменная, содержащая значение функции в точке X + A * S;
FB - вещественная переменная, содержащая значение функции в точке X + B * S;
K - целая переменная, содержащая на выходе выполненное число вычислений функции;
FUN - имя подпрограммы вычисления функции (см. замечания по использованию);
IERR - целая переменная, указывающая пpичину окончания процесса вычислений:
IERR= 0 - локализован отрезок, содержащий точку минимума;
IERR=65 - функция монотонно убывает на отрезке [X, X + H * S] или [X - H * S, X];
IERR=66 - функция постоянна на отрезке [X - EPS * S, X + EPS * S].

Версии: нет

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

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

  1. 

Длина начального шага EPS задается, исходя из хаpактеpа предполагаемого изменения функции по направлению, т.е. предлагается задавать EPS достаточно малым, но таким, чтобы значения функции в двух точках, отстоящих дpуг от дpуга на расстоянии EPS, были различимы при вычислении на данной ЭВМ.

  2. 

Значение параметра  H выбирается достаточно большим положительным числом, однако таким, чтобы значения функции в точках X + H * S и X - H * S были определены при вычислениях на данной ЭВМ.

  3. 

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

           SUBROUTINE  FUN (X, F, FE)

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

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

        φ (x)  =  log(-x) ,   если  x ≤ -1 ,
        φ (x)  =  x3 + 1 ,   если  x > -1

               x0  =  -3

       DIMENSION  X(1), S(1), XX(1)
       INTEGER  N, KOUNT, IERR
       REAL  X, S, XX, EPS, H, A, B, FA, FB
       EXTERNAL  FUNC
       DATA  N, EPS, H, X(1), S(1) /1, 1.E-4, 1.E+03, -3., 1./
       CALL  MNB9R (N, X, S, XX, EPS, H, A, B, FA, FB, KOUNT,
      *                          FUNC, IERR)

       SUBROUTINE  FUNC (X, F, FE)
       DIMENSION X(1)
       IF(X(1) + 1.) 10, 10, 20
  10 F = ALOG10(-X(1))
       GO TO 30
  20 F = X(1)**3 + 1.
  30 RETURN
       END

Результаты:
      
      IERR  =  0

      A  =  0.8191000
      B  =  3.2767000

      FA  =  0.33863580
      FB  =  1.0211850