Spec-Zone.ru › Octave 5

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 предпочтительнее.

См. также: fminbnd, fminunc, optimset.

Функция humps является полезной функцией для тестирования функций поиска нулей и экстремумов.

END_OF_DOCUMENT_MARKER
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 + 17

x может быть скаляром, вектором или массивом. Если 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API