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/v7.2.0/Minimizers.html