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)

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. '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 структура должна экспортировать проблему из приложения Оптимизации.

Типы данных: 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 может показать медленную сходимость, когда решение находится на контуре интервала.

Алгоритмы

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

Для просмотра документации необходимо авторизоваться на сайте