|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/mn/mnn1r.htm
Дата изменения: Fri May 15 08:42:32 2015 Дата индексирования: Sun Apr 10 01:29:13 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий ( Фортран ) mnn1r.zip |
Тексты тестовых примеров ( Фортран ) tmnn1r.zip |
|
Текст подпрограммы и версий ( Си ) mnn1r_c.zip |
Тексты тестовых примеров ( Си ) tmnn1r_c.zip |
|
Текст подпрограммы и версий ( Паскаль ) mnn1r_p.zip |
Тексты тестовых примеров ( Паскаль ) tmnn1r_p.zip |
Решение задачи минимизации функции многих переменных без вычисления производных при наличии двухсторонних ограничений на переменные методом покоординатного спуска с построением аппроксимирующей параболы с использованием метода Хука - Дживса.
Для решения задачи
min f (x) ,
Q = { x: x ∈ En , aj ≤ xj ≤ bj , aj > - ∞ , bj < ∞ , j = 1, ..., n } ,
используется метод покоординатного спуска с построением аппроксимирующей параболы.
Точка xk ∈ Q считается точкой минимума f (x) на Q, если выполнено хотя бы одно из следующих условий:
| 1. | | xjk - xjk - 1 | ≤ EPSX j для всех j = 1, ..., n, где xk = (x1k, ..., xnk) - точка, полученная на k - ой итерации метода, а EPSX - заданный вектоp точности решения задачи по аргументу; |
| 2. | | f (xk) - f (xk - 1) | ≤ EPSF, где xk - точка, вычисленная на k - ой итерации метода, а EPSF - заданная точность решения задачи по функционалу; |
| 3. | NF > KMAX, где NF - фактически выполненное число вычислений функции, KMAX - заданное максимально допустимое число вычислений функции. |
SUBROUTINE MNN1R (N, X, XE, A, B, FUN, F, FE, UP, I0,
IRM, RM, IERR)
Параметры
| N - | размерность пространства переменных (тип: целый); |
| X - | вещественный вектоp длины N, содержащий на входе заданную начальную точку поиска, на выходе - точку минимума функции f (x); |
| XE - | вещественный вектоp длины N, содержащий заданную абсолютную точность решения задачи по аргументу; |
| A - | вещественный вектоp длины N, задающий ограничения снизу на переменные; |
| B - | вещественный вектоp длины N, задающий ограничения свеpху на переменные; |
| FUN - | имя подпрограммы вычисления функции f (x); |
| F - | вещественная переменная, содержащая вычисленное минимальное значение f (x); |
| FE - | заданная абсолютная точность решения задачи по функционалу; |
| UP - | вещественный вектоp длины 11, задающий управляющие параметры алгоритма: |
| UP(1) - | заданная вещественная константа, участвующая в формировании начальной точности вычисления по аргументу (UP (1) ≥ 1); |
| UP(2) - | заданная вещественная константа, участвующая в формировании начальной точности вычисления по функционалу (UP (2) ≥ 1); |
| UP(3) - | заданная вещественная константа, используемая при сравнении разностных производных (0 < UP (3) < 1); |
| UP(4) - | заданная вещественная константа, участвующая в формировании начального шага (UP (4) > 1); |
| UP(5) - | заданная вещественная константа, используемая для изменения величины шага (константа дробления) (UP (5) > 1); |
| UP(6) - | вещественная константа, участвующая в изменении точности по аргументу, 0 < UP (6) < 1; |
| UP(7) - | вещественная константа, участвующая в изменении точности вычисления по функционалу, 0 < UP (7) < 1; |
| UP(8) - | вещественная константа, используемая в качестве "машинного нуля" (UP (8) ≈ 103 * min, где min - минимально представимое число с плавающей запятой в машине); |
| UP(9) - | вещественная константа, используемая для изменения величины шага (для увеличения шага) (UP > 1); |
| UP(10) - | заданная вещественная константа, указывающая максимальное время работы подпрограммы; |
| UP(11) - | вещественная константа, влияющая на величину шага в подпрограмме MNN09 (0.1 < < UP (11) < 1); |
| I0 - | целый вектоp длины N, задающий фиксированные компоненты вектоpа переменных (если I0 (I)= 0, то X (I) - фиксируется, в противном случае I0 (I) = 1); |
| IRM - | целый вектоp длины N, используемый в подпрограмме как рабочий; |
| RM - |
вещественный вектоp длины 4N; на входе: |
| RM(1) - | заданное максимально допустимое число итераций метода; |
| RM(2) - | заданное максимально допустимое число вычислений функции; |
| на выходе: |
| RM(1) - | выполненное число итераций; |
| RM(2) - | выполненное число вычислений функции; |
| IERR - | целочисленная переменная, указывающая причину окончания счета: |
| IERR= 1 - | если достигнута точность по аргументу; |
| IERR= 2 - | если достигнута точность вычисления функции; |
| IERR= 4 - | если выполнено заданное число вычислений функции; |
| IERR= 5 - | если истекло заданное время вычислений; |
| IERR= 6 - | если произошло замедление счета. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию
|
Подпрограмма FUN составляется пользователем. SUBROUTINE FUN (X, F, FE)
Параметры
X - вещественный вектор длины N, содержащий
текущую точку пространства, в которой
вычисляется значение функции;
F - вещественная переменная, содержащая
вычисленное значение функции в точке X;
FE - вещественная переменная, содержащая заданную
точность вычисления значения функции в точке X.
Имя подпрограммы вычисления значения функции должно быть определено в вызывающей подпрограмме оператором EXTERNAL. Используются служебные подпрограммы MNN02, MNN04, MNN05, MNN06, MNN07, MNN08, MNN09, UTMN05, MMKRIT и СОММОN - блок MMKRIC. |
Найти минимальное значение функции:
f(x) = (x1 - 1)2 + 10(x2 - 1)2 + 100(x3 - 1)2 + 1000(x4 - 1)2
- 4 ≤ x i ≤ 4 , i = 1, ..., 4 ;
начальное приближение
x0 = ( - 1, - 2, - 3, - 4 )
DIMENSION X(4), A(4), B(4), I0(4), UP(11), XE(4), IRM(4), RM(30)
COMMON /MNKRIC/ZF, KR, AKR, DF(15)
REAL X, XE, A, B, UP, RM, FE
EXTERNAL FUNC
DATA X /- 1., - 2., - 3., - 4./
DATA A /4* - 4./, B /4*4./, XE/4*0.1E - 4/, FE /0.1E - 4/
DATA I0 /1, 1, 1, 1/
DATA UP /2*0.1E + 3, 1.E - 1, 0.1E + 2, 2., 2*1.E - 1, 0.1E - 15,
* 0.2E + 1, 0.2E + 2, 0.8/
DATA RM(1), RM(2) /200., 200./
N = 4
CALL MNN1R (N, X, XE, A, B, FUNC, F, FE, UP, I0, IRM, RM, IERR)
STOP
END
SUBROUTINE FUNC (X, F, FE)
REAL X(4), F, FE
F = (X(1) - 1.)**2 + 10.0*(X(2) - 1.0)**2 + 100.*
*(X(3) - 1.0)**2 + 1000.*(X(4) - 1.)**2
RETURN
END
Результаты:
F = 0.00000
FE = 0.000010
X = 1.00000, 1.00000, 1.00000, 1.00000
XE = 0.00001, 0.00001, 0.00001, 0.00001
RM(1) = 10
RM(2) = 60
IERR = 12
UP = 2.0000
Примечание: IERR=12 означает, что выполнено одновременно два критерия останова 1 и 2.