exponenta event banner

fminbnd

Найти минимум однопараметрической функции на фиксированном интервале

Описание

fminbnd является одномерным минимизатором, который находит минимум для задачи, указанной в

minxf (x ) , так что x1 < x < x2.

x, x1 и x2 - конечные скаляры, а f (x) - функция, возвращающая скаляр.

пример

x = fminbnd(fun,x1,x2) возвращает значение x это локальный минимизатор скалярной функции, которая описана в fun в интервале x1 < x < x2.

пример

x = fminbnd(fun,x1,x2,options) минимизирует с помощью опций оптимизации, указанных в options. Использовать optimset для установки этих параметров.

x = fminbnd(problem) находит минимальное значение для problem, структура, описанная в problem.

пример

[x,fval] = fminbnd(___), для любых входных аргументов возвращает значение целевой функции, вычисленное в fun на решении x.

[x,fval,exitflag] = fminbnd(___) дополнительно возвращает значение exitflag описывает условие выхода.

пример

[x,fval,exitflag,output] = fminbnd(___) дополнительно возвращает структуру output содержит информацию об оптимизации.

Примеры

свернуть все

Найдите точку, в которой функция sin (x) принимает свой минимум в диапазоне 0 < x < 2δ.

fun = @sin;
x1 = 0;
x2 = 2*pi;
x = fminbnd(fun,x1,x2)
x = 4.7124

Для отображения точности это то же самое, что и правильное значение x = 3δ/2.

3*pi/2
ans = 4.7124

Сверните функцию, заданную отдельным файлом функции. Функция принимает точку x и возвращает действительный скаляр, представляющий значение целевой функции в x.

Запишите следующую функцию как файл и сохраните файл как scalarobjective.m на пути MATLAB ®.

function f = scalarobjective(x)
f = 0;
for k = -10:10
    f = f + (k+1)^2*cos(k*x)*exp(-k^2/2);
end

Найти x что сводит к минимуму scalarobjective на интервале 1 < =x <= 3.

x = fminbnd(@scalarobjective,1,3)
x =

    2.0061

Сверните функцию при наличии дополнительного параметра. Функция sin (x-a) имеет минимум, который зависит от значения параметра a. Создайте анонимную функцию x, которая включает в себя значение параметра a. Минимизируйте эту функцию на интервале 0 < x < 2δ.

a = 9/7;
fun = @(x)sin(x-a);
x = fminbnd(fun,1,2*pi)
x = 5.9981

Этот ответ верен; теоретическое значение равно

3*pi/2 + 9/7
ans = 5.9981

Дополнительные сведения о включении дополнительных параметров см. в разделе Параметризация функций.

Контролировать шаги fminbnd принимает, чтобы минимизировать функцию sin (x) для 0 < x < 2δ.

fun = @sin;
x1 = 0;
x2 = 2*pi;
options = optimset('Display','iter');
x = fminbnd(fun,x1,x2,options)
 
 Func-count     x          f(x)         Procedure
    1        2.39996      0.67549        initial
    2        3.88322     -0.67549        golden
    3        4.79993    -0.996171        golden
    4        5.08984    -0.929607        parabolic
    5        4.70582    -0.999978        parabolic
    6         4.7118           -1        parabolic
    7        4.71239           -1        parabolic
    8        4.71236           -1        parabolic
    9        4.71242           -1        parabolic
 
Optimization terminated:
 the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 
x = 4.7124

Найдите расположение минимума sin (x) и значения минимума для 0 < x < 2δ.

fun = @sin;
[x,fval] = fminbnd(fun,1,2*pi)
x = 4.7124
fval = -1.0000

Возврат всей информации о fminbnd процесс решения путем запроса всех выходных данных. Кроме того, контролируйте процесс решения с помощью функции графика.

fun = @sin;
x1 = 0;
x2 = 2*pi;
options = optimset('PlotFcns',@optimplotfval);
[x,fval,exitflag,output] = fminbnd(fun,x1,x2,options)

Figure Optimization Plot Function contains an axes. The axes with title Current Function Value: -1 contains an object of type line.

x = 4.7124
fval = -1.0000
exitflag = 1
output = struct with fields:
    iterations: 8
     funcCount: 9
     algorithm: 'golden section search, parabolic interpolation'
       message: 'Optimization terminated:...'

Входные аргументы

свернуть все

Функция для минимизации, заданная как дескриптор функции или имя функции. fun - функция, принимающая действительный скаляр x и возвращает действительный скаляр f (целевая функция, оцененная в x).

Определить fun как дескриптор функции для файла:

x = fminbnd(@myfun,x1,x2)

где myfun является функцией MATLAB ®, такой как

function f = myfun(x)
f = ...            % Compute function value at x

Можно также указать fun как дескриптор функции для анонимной функции:

x = fminbnd(@(x)norm(x)^2,x1,x2);

Пример: fun = @(x)-x*exp(-3*x)

Типы данных: char | function_handle | string

Нижняя граница, заданная как конечный вещественный скаляр.

Пример: x1 = -3

Типы данных: double

Верхняя граница, заданная как конечный вещественный скаляр.

Пример: x2 = 5

Типы данных: double

Опции оптимизации, указанные как структура, например optimset возвращает. Вы можете использовать optimset для установки или изменения значений этих полей в структуре опций. Дополнительные сведения см. в разделе Справочник по опциям оптимизации.

Display

Уровень отображения (см. Итерационный просмотр):

  • 'notify' (по умолчанию) вывод отображается только в том случае, если функция не сходится.

  • 'off' или 'none' не отображает выходные данные.

  • 'iter' отображает выходные данные в каждой итерации.

  • 'final' отображает только окончательный результат.

FunValCheck

Проверьте допустимость значений целевой функции. Дефолт 'off' позволяет fminbnd чтобы продолжить, когда целевая функция возвращает значение, которое complex или NaN. 'on' установка выдает ошибку, когда целевая функция возвращает значение, complex или NaN.

MaxFunEvals

Максимально допустимое число оценок функций, положительное целое число. Значение по умолчанию: 500. См. раздел Допуски и критерии остановки, итерации и подсчеты функций.

MaxIter

Максимальное допустимое число итераций, положительное целое число. Значение по умолчанию: 500. См. раздел Допуски и критерии остановки, итерации и подсчеты функций.

OutputFcn

Укажите одну или несколько пользовательских функций, которые функция оптимизации вызывает в каждой итерации, либо как дескриптор функции, либо как массив ячеек дескрипторов функции. Значение по умолчанию - нет ([]). См. раздел Функция вывода и синтаксис функции печати.

PlotFcns

Строит графики различных показателей прогресса во время выполнения алгоритма, выбирает из предопределенных графиков или записывает свои собственные. Передача дескриптора функции или массива ячеек дескрипторов функции. Значение по умолчанию - нет ([]).

  • @optimplotx выводит на график текущую точку

  • @optimplotfunccount строит график подсчета функций

  • @optimplotfval строит график значения функции

Пользовательские функции печати используют тот же синтаксис, что и функции вывода. См. раздел Функции вывода для оптимизации Toolbox™ и Функция вывода и синтаксис функции печати.

TolX

Допуск окончания на x, положительный скаляр. Значение по умолчанию: 1e-4. См. раздел Допуски и критерии остановки.

Пример: options = optimset('Display','iter')

Типы данных: struct

Структура проблемы, заданная как структура со следующими полями.

Имя поляВход

objective

Целевая функция

x1

Левая конечная точка

x2

Правая конечная точка

solver

'fminbnd'

options

Структура опций, например, возвращенная optimset

Типы данных: struct

Выходные аргументы

свернуть все

Решение, возвращенное как действительный скаляр. Как правило, x является локальным решением проблемы, когда exitflag является положительным. Сведения о качестве решения см. в разделе Когда решатель добьется успеха.

Значение целевой функции в решении, возвращаемое как вещественное число. Как правило, fval = fun(x).

Причина fminbnd остановлено, возвращено как целое число.

1

Функция, сходящаяся к решению x.

0

Превышено число итераций options.MaxIter или количество превышенных оценок функций options.MaxFunEvals.

-1

Останавливается функцией вывода или функцией графика.

-2

Границы противоречивы, что означает x1 > x2.

Информация о процессе оптимизации, возвращенная в виде структуры с полями:

iterations

Количество выполненных итераций

funcCount

Количество оценок функций

algorithm

'golden section search, parabolic interpolation'

message

Выйти из сообщения

Ограничения

  • Функция, подлежащая минимизации, должна быть непрерывной.

  • fminbnd может дать только локальные решения.

  • fminbnd может проявлять медленную сходимость, когда решение находится на границе интервала. В таком случае, fmincon часто дает более быстрые и точные решения.

Алгоритмы

fminbnd является файлом функции. Алгоритм основан на поиске золотого сечения и параболической интерполяции. Если левая конечная точка x1 не находится очень близко к правой конечной точке x2, fminbnd никогда не оценивает fun на конечных точках, так что fun необходимо определить только для x в интервале x1 < x < x2.

Если минимальное значение фактически имеет значение x1 или x2, fminbnd возвращает точку x внутри интервала (x1, x2), близкого к минимизатору. В этом случае расстояние x от минимизатора не более 2 *(TolX + 3*abs(x)*sqrt(eps)). Для получения подробной информации об алгоритме см. [1] или [2].

Альтернативная функциональность

Приложение

Задача «Оптимизировать интерактивный редактор» обеспечивает визуальный интерфейс для fminbnd.

Ссылки

[1] Форсайт, Г. Э., М. А. Малкольм и К. Б. Молер. Компьютерные методы математических вычислений. Энглвуд Клиффс, Нью-Джерси: Прентис Холл, 1976.

[2] Брент, Ричард. P. Алгоритмы минимизации без производных. Энглвуд Клиффс, Нью-Джерси: Прентис-Холл, 1973.

Расширенные возможности

.
Представлен до R2006a