fminbnd

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

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

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

x, x 1, и x 2 является конечными скалярами, и f (x) является функцией, которая возвращает скаляр.

Синтаксис

x = fminbnd(fun,x1,x2)
x = fminbnd(fun,x1,x2,options)
x = fminbnd(problem)
[x,fval] = fminbnd(___)
[x,fval,exitflag] = fminbnd(___)
[x,fval,exitflag,output] = fminbnd(___)

Описание

пример

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

пример

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

x = fminbnd(problem) находит минимум для 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

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

Контролируйте шаги, которые 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)

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

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

PlotFcns

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

  • @optimplotx строит текущую точку

  • @optimplotfunccount строит функциональное количество

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

Для получения информации о записи пользовательской функции построения графика смотрите Синтаксис Функции построения графика.

TolX

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

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

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

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

Имя поляЗапись

objective

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

x1

Оставленная конечная точка

x2

Правильная конечная точка

solver

'fminbnd'

options

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

Самым простым способом получить структуру problem является экспорт задачи из Optimization app.

Типы данных: 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 является файлом функции. Алгоритм основан на золотом разделе поисковая и параболическая интерполяция. Если левая конечная точка, 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] для получения дополнительной информации об алгоритме.

Ссылки

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

[2] Брент, Ричард. P. Алгоритмы для минимизации без производных. Englewood Cliffs, NJ: Prentice Hall, 1973.

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

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