20.2 Минимизаторы
Часто бывает полезно найти минимальное значение функции, а не только нули, где она пересекает ось x. fminbnd предназначен для более простого, но очень распространенного случая унивариантной функции, где интервал поиска ограничен. Для неограниченной минимизации функции с потенциально многими переменными используйте fminunc или fminsearch. Эти две функции используют разные внутренние алгоритмы, и требуется некоторое знание целевой функции. Для функций, которые можно дифференцировать, fminunc подходит. Для функций с разрывами или для которых поиск градиента потерпит неудачу, используйте fminsearch. См. Оптимизация для минимизации с наличием функций ограничений. Обратите внимание, что поиск максимумов можно выполнить, просто инвертировав целевую функцию (Fto_max = -Fto_min).
- x = fminbnd (fun, a, b)
- x = fminbnd (fun, a, b, options)
- [x, fval, info, output] = fminbnd (…)
-
Находит точку минимума унивариантной функции.
fun должен быть функцией-обработчиком или именем.
Начальный интервал задается a (левая граница) и b (правая граница). Концы должны быть конечными.
options — структура, определяющая дополнительные параметры, которые управляют алгоритмом. В настоящее время
fminbndраспознает следующие параметры:"Display","FunValCheck","MaxFunEvals","MaxIter","OutputFcn","TolX"."MaxFunEvals"предписывает максимальное количество вычислений функции перед остановкой оптимизации. Значение по умолчанию равно 500. Значение должно быть положительным целым числом."MaxIter"предписывает максимальное количество итераций алгоритма перед остановкой оптимизации. Значение по умолчанию равно 500. Значение должно быть положительным целым числом."TolX"задает толерантность к завершению для решения x. Значение по умолчанию —1e-4.Для описания других параметров см. optimset. Для инициализации структуры параметров со значениями по умолчанию для
fminbndиспользуйтеoptions = optimset ("fminbnd").При выходе функция возвращает x, приближенную точку минимума, и fval, значение функции в точке x.
Третий выходной параметр info сообщает, выполнился ли алгоритм успешно, и может принимать одно из следующих значений:
- 1 Алгоритм сошёлся к решению.
- 0 Превышен предел итераций (либо
MaxIterлибоMaxFunEvals). - -1 Алгоритм был прерван пользователем
OutputFcn.
Примечания по программированию: Поиск минимума ограничен конечным интервалом, заданным a и b. Если у вас есть только одна начальная точка для начала поиска, вам потребуется использовать алгоритм минимизации без ограничений, такой как
fminuncилиfminsearch.fminbndвнутренне использует стратегию поиска золотого сечения.См. также: fzero, fminunc, fminsearch, optimset.
- fminunc (fcn, x0)
- fminunc (fcn, x0, options)
- [x, fval, info, output, grad, hess] = fminunc (fcn, …)
-
Решает задачу оптимизации без ограничений, определённую функцией fcn.
fcn должна принимать вектор (массив), определяющий неизвестные переменные, и возвращать значение целевой функции, необязательно с градиентом.
fminuncпытается определить вектор x такой, чтоfcn (x)является локальным минимумом.x0 определяет начальное приближение. Форма x0 сохраняется во всех вызовах fcn, но в противном случае обрабатывается как столбец.
options — это структура, задающая дополнительные параметры, которые управляют алгоритмом. В настоящее время
fminuncраспознает следующие параметры:"AutoScaling","FinDiffType","FunValCheck","GradObj","MaxFunEvals","MaxIter","OutputFcn","TolFun","TolX","TypicalX".Если
"AutoScaling"равно"on", переменные будут автоматически масштабироваться в соответствии с нормой столбцов (оцененного) якобиана. В результате"TolFun"становится независимым от масштабирования. По умолчанию этот параметр равен"off", поскольку иногда он может давать неожиданные (хотя и математически корректные) результаты.Если
"GradObj"равно"on", это указывает, что fcn — когда вызывается с двумя выходными аргументами — также возвращает матрицу якобиана частичных производных первого порядка в запрошенной точке."MaxFunEvals"предписывает максимальное число вычислений функции до остановки оптимизации. Значение по умолчанию —100 * number_of_variables, то есть100 * length (x0). Значение должно быть положительным целым числом."MaxIter"предписывает максимальное количество итераций алгоритма до остановки оптимизации. Значение по умолчанию — 400. Значение должно быть положительным целым числом."TolX"задаёт толерантность к завершению для неизвестных переменных x, а"TolFun"— толерантность к значению целевой функции fval. По умолчанию оба параметра равны1e-6.Для описания других параметров см.
optimset.При возврате x — это местоположение минимума, а fval содержит значение целевой функции в x.
info может принимать следующие значения:
- 1
-
Сошёлся к точке решения. Относительная ошибка градиента меньше, чем задано в
TolFun. - 2
-
Последний относительный размер шага был меньше, чем
TolX. - 3
-
Последнее относительное изменение значения функции было меньше, чем
TolFun. - 0
-
Превышен предел итераций — либо максимальное количество итераций алгоритма
MaxIter, либо максимальное количество вычислений функцииMaxFunEvals. - -1
-
Алгоритм завершён пользователем
OutputFcn. - -3
Радиус области доверия стал чрезмерно малым.
Необязательно,
fminuncможет вернуть структуру со статистикой сходимости (output), выходной градиент (grad) в точке решения x и приближённую матрицу Гессе (hess) в точке решения x.Примечания по применению: Если целевая функция — это единственное нелинейное уравнение одной переменной, то использование
fminbndобычно является лучшим выбором.Алгоритм, используемый
fminunc, — это поиск по градиенту, который зависит от того, является ли целевая функция дифференцируемой. Если функция имеет разрывы, лучше использовать алгоритм без производных, такой какfminsearch.См. также: fminbnd, fminsearch, optimset.
- x = fminsearch (fun, x0)
- x = fminsearch (fun, x0, options)
- x = fminsearch (problem)
- [x, fval, exitflag, output] = fminsearch (…)
-
Находит значение x, которое минимизирует многомерную функцию fun.
Поиск начинается в точке x0 и выполняется с помощью алгоритма симплекса Нелдера–Мида (метод без производных). Этот алгоритм лучше подходит для функций с разрывами или для которых поиск по градиенту, такой как
fminuncпотерпит неудачу.Параметры поиска предоставляются в параметре options с использованием функции
optimset. В настоящее времяfminsearchпринимает параметры:"Display","FunValCheck","MaxFunEvals","MaxIter","OutputFcn","TolFun","TolX"."MaxFunEvals"предписывает максимальное количество вычислений функции до остановки оптимизации. Значение по умолчанию —200 * number_of_variables, то есть200 * length (x0). Значение должно быть положительным целым числом."MaxIter"предписывает максимальное количество итераций алгоритма до остановки оптимизации. Значение по умолчанию —200 * number_of_variables, то есть200 * length (x0). Значение должно быть положительным целым числом.Для описания других параметров см.
optimset. Для инициализации структуры параметров со значениями по умолчанию дляfminsearchиспользуйтеoptions = optimset ("fminsearch").fminsearchтакже может быть вызван с одним структурированным аргументом со следующими полями:objective-
Целевая функция.
x0-
Начальная точка.
solver-
Должен быть установлен в
"fminsearch". optionsСтруктура, возвращенная из
optimsetили пустая матрица, чтобы указать, что следует использовать значения по умолчанию.
Поле
optionsнеобязательно. Все остальные — обязательны.При выходе функция возвращает x, точку минимума, и fval, значение функции в минимуме.
Третий выходной параметр exitflag сообщает, выполнился ли алгоритм успешно, и может принимать одно из следующих значений:
- 1
-
если алгоритм сошёлся (размер симплекса меньше
TolXИ шаг в значении функции между итерациями меньше, чемTolFun). - 0
-
если превышено максимальное количество итераций или максимальное количество вычислений функции.
- -1
если итерация остановлена пользователем
"OutputFcn".
Четвёртый выходной параметр — структура output содержащая сведения о выполнении алгоритма. Поля в структуре —
funcCount(количество вызовов функции fun),iterations(количество шагов итерации),algorithm(название алгоритма поиска, всегда:"Nelder-Mead simplex direct search") иmessage(сообщение о завершении).Пример:
fminsearch (@(x) (x(1)-5).^2+(x(2)-8).^4, [0;0])
Примечание: Если вам нужно найти минимум функции одной переменной, то использование
fminbndпредпочтительнее.
Функция humps является полезной функцией для тестирования функций поиска нулей и экстремумов.
- y = humps (x)
- [x, y] = humps (x)
-
Вычислить функцию с несколькими минимумами, максимумами и нулевыми пересечениями.
Выход y — вычисление рациональной функции:
1200*x^4 - 2880*x^3 + 2036*x^2 - 348*x - 88 y = - --------------------------------------------- 200*x^4 - 480*x^3 + 406*x^2 - 138*x + 17x может быть скаляром, вектором или массивом. Если x опущено, используется диапазон по умолчанию [0:0.05:1].
При вызове с двумя выходными аргументами [x, y], x будет содержать входные значения, а y — выходные данные от
humps.Примечания по программированию:
humpsимеет два локальных максимума, расположенных около x = 0.300 и 0.893, локальный минимум около x = 0.637 и нули около x = -0.132 и 1.300.humps— полезная функция для тестирования алгоритмов, которые находят нули или локальные минимумы и максимумы.Попробуйте
demo humpsчтобы увидеть график функцииhumps.См. также: fzero, fminbnd, fminunc, fminsearch.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v5.2.0/Minimizers.html