Текст подпрограммы и версий ( Фортран )
mni2r.zip
Тексты тестовых примеров ( Фортран )
tmni2r.zip
Текст подпрограммы и версий ( Си )
mni2r_c.zip
Тексты тестовых примеров ( Си )
tmni2r_c.zip
Текст подпрограммы и версий ( Паскаль )
mni2r_p.zip
Тексты тестовых примеров ( Паскаль )
tmni2r_p.zip

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

Назначение

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

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

Для решения задачи: min  f (x),  x  En , используется квазиньютоновский метод, основанный на приближенном вычислении на каждой итерации матрицы  H, обратной к матрице Гессе функции  f (x). Приведение матрицы  H к диагональному виду осуществляется с использованием метода вращений.

Вычисленная точка  x k  En (k - номеp итерации метода) считается точкой минимума функции  f (x), если  | f (x k) - f (x k - 1) | ≤ EPS , где EPS > 0 - заданная точность вычисления минимума по функционалу.

Пшеничный Б.Н., Редковский H.H., Об одном численном методе минимизации без вычисления производных, ЖВМ и МФ, т.16, 1976.

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

    SUBROUTINE  MNI2R (N, F, EPS, LIM, R1, R2, R3, R4, R5, R6,
                                              R7, R8, X, STEP, FUN) 

Параметры

N - размерность пространства переменных (тип: целый);
F - вещественная переменная, содержащая минимальное значение функции  f (x);
EPS - заданная точность вычисления минимума по функционалу (тип: вещественный);
LIM - заданное максимально допустимое число итераций метода (см. замечания по использованию) (тип: целый);
R1, R2 - вещественные векторы длины  N * N, используемые в подпрограмме как рабочие;
       R3, R4 -
       R5, R6  
       R7, R8  
вещественные векторы длины  N, используемые в подпрограмме как рабочие;
X - вещественный вектоp длины  N; при обращении к подпрограмме содержит заданную начальную точку поиска, на выходе содержит точку минимального вычисленного значения  f (x);
STEP - заданное значение начального шага поиска (тип: вещественный);
FUN - имя подпрограммы вычисления значения функции  f (x) (см. замечания по использованию).

Версии: нет

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

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

 

Используется служебная подпрограмма MNI01.

Если EPS > 0, то подпрограмма выполнит такое количество итераций метода, котоpое необходимо для достижения заданной точности решения, даже если оно больше LIM.

Чтобы число фактически выполненных итераций было не больше LIM, следует задавать EPS = 0.0 .

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

        SUBROUTINE  FUN (X, F, FE)

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

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

В общем случае, значения точности по функционалу EPS и величины начального шага STEP pекомендуется задавать в следующих диапазонах: 1.E - 15 ≤ EPS ≤ 1.E - 4,  0.01 ≤ STEP ≤ 0.2 .

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

    min  f(x) ,   x  E2 .
    f(x)  =  100 ( x12 - x2 )2 + (x1 - 1)2.
    Точка безусловного минимума     x*  =  (1.0, 1.0) ,   f(x*)  =  0.0 .

       EXTERNAL  FUN
       DIMENSION  X(2), R1(2, 2), R2(2, 2), R3(2), R4(2), R5(2), R6(2), 
      *                       R7(2), R8(2)
       DATA  N, EPS, STEP, X(1), X(2) /2, 1.E-12, 0.1, -1.2, 1./
       CALL  MNI2R (N, F, EPS, LIM, R1, R2, R3, R4, R5, R6,
      *                         R7, R8, X, STEP, FUN)


       SUBROUTINE FUN(X, F, FE)
       DIMENSION  X(2)
       F = 100.0*(X(1)**2 - X(2))**2 + (X(1) -1.)**2
       RETURN
       END

Результаты:

      F  =  0.355E-15
      X  =  ( 0.9999999, 0.9999999 )