fminbnd

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

Описание

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

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

x, x 1 и x 2 являются конечными скалярами, а 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

Level of display (см. Итеративное отображение):

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

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

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

  • 'final' отображает только окончательный выход.

FunValCheck

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

MaxFunEvals

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

MaxIter

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

OutputFcn

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

PlotFcns

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

  • @optimplotx строит графики текущей точки

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

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

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

TolX

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

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

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

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

Имя поляВход

objective

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

x1

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

x2

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

solver

'fminbnd'

options

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

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

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

свернуть все

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

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

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

1

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

0

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

-1

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

-2

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

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

iterations

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

funcCount

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

algorithm

'golden section search, parabolic interpolation'

message

Выходное сообщение

Ограничения

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

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

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

Алгоритмы

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

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

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

Приложение

Задача Optimize Live Editor обеспечивает визуальный интерфейс для fminbnd.

Ссылки

[1] Форсайт, Г. Э., М. А. Малкольм и К. Б. Молер. Компьютерные методы для математических расчетов. Englewood Cliffs, Нью-Джерси: Prentice Hall, 1976.

[2] Брент, Ричард. P. Алгоритмы минимизации без производных. Englewood Cliffs, Нью-Джерси: Prentice Hall, 1973.

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

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