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используется стратегия поиска методом золотого сечения. - Используйте Анонимные функции, чтобы передать дополнительные параметры в fcn. Конкретные примеры такого использования для
fminbndи других функций минимизации см. в разделе Минимизаторы руководства GNU Octave.
См. также: 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), градиент в точке решения x (grad) и приближенную матрицу Гессе в точке решения x (hess).Примечания по применению:
- Если целевая функция представляет собой одно нелинейное уравнение с одной переменной, обычно лучше использовать
fminbnd. - В
fminuncиспользуется алгоритм градиентного поиска, который предполагает дифференцируемость целевой функции. Если функция имеет разрывы, лучше использовать алгоритм без вычисления производных, напримерfminsearch. - Используйте Анонимные функции, чтобы передать дополнительные параметры в fcn. Конкретные примеры такого использования для
fminuncи других функций минимизации см. в разделе Минимизаторы руководства GNU Octave.
См. также: 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. - Использование устаревшего, недокументированного синтаксиса передачи параметров в fcn путем их добавления в список входных аргументов после options не рекомендуется; этот синтаксис будет полностью удален в Octave 10. Предпочтительный, совместимый с разными платформами способ передачи параметров в fcn — использование анонимных функций. Конкретные примеры такого использования для
fminsearchи других функций минимизации см. в разделе Минимизаторы руководства GNU Octave.
Для некоторых операций минимизации функции, F, передаваемой на минимизацию, требуются дополнительные параметры. Например, F = F(x, C). Функции минимизации Octave рассчитаны на передачу в F только одной переменной оптимизации, однако параметры можно передать, определив анонимную функцию, содержащую необходимые параметры. См. пример ниже:
A = 2; B = 3; f = @(x) sin (A*x + B); fminbnd (f, 0, 2) ⇒ 0.8562
Обратите внимание, что анонимные функции сохраняют значения параметров на момент их определения. Изменение значения параметра после определения функции не повлияет на результат ее работы, пока она не будет определена заново:
B = 4; fminbnd (f, 0, 2) ⇒ 0.8562 f = @(x) sin (A*x + B); fminbnd (f, 0, 2) ⇒ 0.3562
Функция 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–2026 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/v9.4.0/Minimizers.html