20.2 Минимизаторы
Часто бывает полезно найти минимальное значение функции, а не только нули, где она пересекает ось x. fminbnd предназначен для более простого, но очень распространённого случая унивариантной функции, где интервал поиска ограничен. Для неограниченной минимизации функции с потенциально многими переменными используйте fminunc или fminsearch. Эти две функции используют разные внутренние алгоритмы, и требуются некоторые знания о целевой функции. Для функций, которые могут быть продифференцированы, fminunc подходит. Для функций с разрывами или для которых поиск градиента потерпит неудачу, используйте fminsearch. См. Оптимизация для минимизации при наличии функций ограничений. Обратите внимание, что поиск максимумов можно выполнить, просто инвертировав целевую функцию (Fto_max = -Fto_min).
- : x = fminbnd (fcn, a, b) ¶
- : x = fminbnd (fcn, a, b, options) ¶
- : [x, fval, info, output] = fminbnd (…) ¶
-
Найти точку минимума унивариантной функции.
fcn — это дескриптор функции, встроенная функция или строка, содержащая имя функции для вычисления.
Начальный интервал задаётся 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.
- : x = fminunc (fcn, x0) ¶
- : x = fminunc (fcn, x0, options) ¶
- : [x, fval] = fminunc (fcn, …) ¶
- : [x, fval, info] = fminunc (fcn, …) ¶
- : [x, fval, info, output] = fminunc (fcn, …) ¶
- : [x, fval, info, output, grad] = fminunc (fcn, …) ¶
- : [x, fval, info, output, grad, hess] = fminunc (fcn, …) ¶
-
Решение задачи безусловной оптимизации, определённой функцией fcn.
fminuncпытается определить вектор x такой, чтоfcn (x)является локальным минимумом.fcn — это дескриптор функции, встроенная функция или строка, содержащая имя функции для вычисления. fcn должен принимать вектор (массив), определяющий неизвестные переменные, и возвращать значение целевой функции, необязательно с градиентом.
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 (fcn, x0) ¶
- : x = fminsearch (fcn, x0, options) ¶
- : x = fminsearch (problem) ¶
- : [x, fval, exitflag, output] = fminsearch (…) ¶
-
Найти значение x, которое минимизирует многомерную функцию fcn.
fcn — это обработчик функции, встроенная функция или строка, содержащая имя функции для вычисления.
Поиск начинается в точке 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(количество вызовов функции fcn),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–2023 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/v8.1.0/Minimizers.html