Текст подпрограммы и версий ( Фортран ) mni2r.zip |
Тексты тестовых примеров ( Фортран ) tmni2r.zip |
Текст подпрограммы и версий ( Си ) mni2r_c.zip |
Тексты тестовых примеров ( Си ) tmni2r_c.zip |
Текст подпрограммы и версий ( Паскаль ) mni2r_p.zip |
Тексты тестовых примеров ( Паскаль ) tmni2r_p.zip |
Решение задачи безусловной минимизации функции многих переменных без вычисления производных квазиньютоновским методом.
Для решения задачи: 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 )