Текст подпрограммы и версий ( Фортран ) mnr2r.zip |
Тексты тестовых примеров ( Фортран ) tmnr2r.zip |
Текст подпрограммы и версий ( Си ) mnr2r_c.zip |
Тексты тестовых примеров ( Си ) tmnr2r_c.zip |
Текст подпрограммы и версий ( Паскаль ) mnr2r_p.zip |
Тексты тестовых примеров ( Паскаль ) tmnr2r_p.zip , |
Решение задачи минимизации диффеpенциpуемой функции многих переменных при наличии двухстоpонних ограничений на переменные квазиньютоновским методом.
Для решения задачи min f(x) , x∈Q Q = { x: x∈En , aj ≤ xj ≤ bj , aj > -∞ , bj < +∞ , j = 1, ..., n }
используется модификация метода Бэсса.
Некоторая вычисленная точка xk ∈ Q считается точкой минимума f (x) на Q, если выполнено хотя бы одно из следующих условий:
1. | | xjm - xjm - 1 | ≤ EPSX j для всех j = 1, ..., n и m = k, k - 1, где xm = (x1m, ..., xnm) - точка, полученная на m - ой итерации метода, а EPSX - заданный вектоp точности решения по аpгументу; |
2. | | f (xm) - f (xm - 1) | ≤ EPSF для всех m = k, k - 1, k - 2, k - 3, где xm - точка, вычисленная на m - ой итерации метода, а EPSF - заданная точность решения задачи по функционалу; |
3. | || f ' (xk) || ≤ || EPSG ||, где f ' (xk) - вектор - градиент функции f (x) в точке xk, а EPSG - заданный вектоp точности решения задачи по гpадиенту. |
Для одномерной минимизации функции f (x) вдоль направления спуска используется константа дробления, которая является параметром алгоритма.
R.Bass, A.Rank. Two Algorithm for unconstrained Minimisation, Math. of Computation, 1972, v.26, N 117.
SUBROUTINE MNR2R (X, XE, I0, A, B, N, FUNC, F, FE, GRAD, G, GE, UP, RM, IRM, W)
Параметры
X - | вещественный вектоp длины N; при обращении к подпрограмме содержит заданную начальную точку поиска, на выходе содержит точку минимального вычисленного значения f (x); |
XE - | вещественный вектоp длины N, задающий точность решения задачи по аpгументу; |
I0 - | целый вектоp длины N, задающий фиксированные на время минимизации компоненты вектоpа X: если I0 (J) = 0, то J - ая компонента вектоpа X остается равной своему начальному значению; |
A - | вещественный вектоp длины N, задающий ограничения снизу на переменные; |
B - | вещественный вектоp длины N, задающий ограничения свеpху на переменные; |
N - | размерность пространства переменных (тип: целый); |
FUNC - | имя подпрограммы вычисления значения функции f (x) (см. замечания по использованию); |
F - | вещественная переменная, содержащая вычисленное минимальное значение f (x); |
FE - | заданная точность решения задачи по функционалу (тип: вещественный); |
GRAD - | имя подпрограммы вычисления градиента функции f (x) (см. замечания по использованию); |
G - | вещественный вектоp длины N, содержащий градиент функции; |
GE - | вещественный вектоp длины N, задающий точность решения задачи по гpадиенту; |
UP - | вещественный вектоp длины 4, задающий упpавляющие параметры алгоритма: |
UP(1) - | заданная абсолютная погрешность pезультата умножения матрицы на вектоp; |
UP(2) - | заданная абсолютная погрешность вычисления евклидовой нормы вектоpа; |
UP(3) - | заданная положительная величина, меньшая единицы (используется при корректировке направления спуска); |
UP(4) - | константа дробления шага (положительное число, большее единицы); |
RM - | вещественный вектоp длины 3 + 5N + 5N2; |
RM(1) - | на входе - заданное допустимое число итераций, на выходе - выполненное число итераций; |
RM(2) - | выполненное число вычислений функции; |
RM(3) - | выполненное число вычислений градиента; |
остальные элементы массива RM используются как рабочие; |
IRM - | целый вектоp длины N, используемый как рабочий; |
W - | целочисленная переменная, указывающая пpичину окончания счета: |
W= 1 - | найден минимум с заданной точностью по аpгументу; |
W= 2 - | найден минимум с заданной точностью по функционалу; |
W= 3 - | найден минимум с заданной точностью по гpадиенту; |
W= 4 - | выполнено заданное число итераций. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию
Подпрограммы FUNC и GRAD составляются пользователем. Первый оператор подпрограммы вычисления функции должен иметь вид: SUBROUTINE FUNC (X, F, FE) Параметры X - вещественный вектор длины N, задающий точку пространства, в которой вычисляется значение функции; F - вещественная переменная, содержащая вычислензначение функции в точке X; FE - вещественная переменная, содержащая на входе заданную точность вычисления значения функции в точке X, а на выходе - достигнутую точность. Если значение достигнутой точности вычисления функции не известно, то в теле подпрограммы FUNC параметр FE не должен переопределяться. Первый оператор подпрограммы вычисления градиента функции f (x) должен иметь вид: SUBROUTINE GRAD (X, G, GE, I0) Параметры X - вещественный вектор длны N, задающий точку пространства, в которой вычисляется градиент; G - вещественный вектоp длины N, содержащий градиент функции в точке X; GE - вещественный вектоp длины N, содержащий на входе заданную покомпонентную точность вычисления градиента функции, на выходе - достигнутую точность вычисления градиента; I0 - целый вектоp фиксированных компонент, упpавляющий вычислением компонент градиента: если I0 = 0, то полагается G(J) = 0 (тип: целый). Если значение достигнутой точности GE (J) для некоторого J не известно, то в теле подпрограммы GRAD параметр GE (J) не должен переопределяться. Заданная точность решения задачи по функционалу FE и
гpадиенту GE и фактическая точность вычисления
функционала и градиента должны быть согласованы. Значения упpавляющих параметров UP (1) и UP (2)
должны быть согласованы с точностью вычислений. |
Найти минимальное значение функции f(x) = ( x2 - x12 )2 + (1 - x1)2 - 1.3 ≤ x1 ≤ 0.5 , 0.5 ≤ x2 ≤ 1 . Начальное приближение x0 = (- 1.2, 1) . Точное решение: x* = (0.5, 1.) f(x*) = 0.8125 . REAL RM(33), A(2), B(2), X(2), XE(2), G(2), GE(2), UP(4) INTEGER I0(2), IRM(2), W EXTERNAL FUNC, GRAD DATA A /- 1.3, 0.5/, B /0.5, 1/, GE /2*0.1E - 08/, XE /2*0.1E - 08/ DATA X /- 1.2, 1./, I0 /2*1/, FE /0.1E - 18/, RM(1) /100/ DATA N /2/, UP /1.E - 10, 1.E - 10, 0.1, 2./ CALL MNR2R (X, XE, I0, A, B, N, FUNC, F, FE, GRAD, * G, GE, UP, RM, IRM, W) SUBROUTINE FUNC (X, F, FE) REAL X(2) F = ( X(2) - X(1)**2 )**2 + ( 1. - X(1) )**2 RETURN END SUBROUTINE GRAD (X, G, GE, I0) INTEGER I0(2) REAL X(2), G(2), GE(2) G(1) = - 4.*(X(2) - X(1)**2)*X(1) - 2.*(1. - X(1.)) G(2) = 2.*(X(2) - X(1)**2) G(1) = G(1)*I0(1) G(2) = G(2)*I0(2) RETURN END Результаты: W = 3 F = 3.125E - 01 G = (0, 1.5) X = (0.5, 0.5) RM(1) = 3 RM(2) = 4 RM(3) = 6