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 object. The axes object 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. 'on' установка выдает ошибку, когда целевая функция возвращает значение, которое является complex или NaN.

MaxFunEvals

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

MaxIter

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

OutputFcn

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

PlotFcns

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

  • @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 остановленный, возвращенный как целое число.

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] для получения дополнительной информации об алгоритме.

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

Приложение

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

Ссылки

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

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

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

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