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.
fminuncпытается определить вектор x такой, чтоfcn (x)является локальным минимумом.fun — это дескриптор функции, встроенная функция или строка, содержащая имя функции для вычисления. 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 (fun, x0)
- : x = fminsearch (fun, x0, options)
- : x = fminsearch (problem)
- : [x, fval, exitflag, output] = fminsearch (…)
-
Найти значение x, минимизирующее многомерную функцию fun.
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/v6.4.0/Minimizers.html