Main Content

fminbnd

Encontrar el mínimo de una función de una única variable en un intervalo fijo

Descripción

fminbnd es un minimizador de una dimensión que encuentra un mínimo para un problema especificado por

minxf(x) such that x1<x<x2.

x, x1 y x2 son escalares finitos, y f(x) es una función que devuelve un escalar.

ejemplo

x = fminbnd(fun,x1,x2) devuelve un valor x que es un minimizador local de la función de valor de escalar que se describe en fun en el intervalo x1 < x < x2.

ejemplo

x = fminbnd(fun,x1,x2,options) minimiza con las opciones de optimización especificadas en options. Utilice optimset para configurar estas opciones.

x = fminbnd(problem) encuentra el mínimo para problem, una estructura descrita en problem.

ejemplo

[x,fval] = fminbnd(___), para cualquier argumento de entrada, devuelve el valor de la función objetivo calculado en fun en la solución x.

[x,fval,exitflag] = fminbnd(___) devuelve adicionalmente un valor exitflag que describe la condición de salida.

ejemplo

[x,fval,exitflag,output] = fminbnd(___) devuelve adicionalmente una estructura output que contiene información sobre la optimización.

Ejemplos

contraer todo

Encuentre el punto en el que la función sin(x) toma su mínimo en el rango 0<x<2π.

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

Para mostrar la precisión, este es el mismo que el valor correcto x=3π/2.

3*pi/2
ans = 4.7124

Minimice una función especificada por un archivo de función separado. Una función acepta un punto x y devuelve un escalar real que representa el valor de la función objetivo en x.

Escriba la siguiente función como un archivo y guarde el archivo como scalarobjective.m en la ruta de MATLAB®.

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

Encuentre la x que minimiza scalarobjective en el intervalo 1 <= x <= 3.

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

    2.0061

Minimice una función cuando hay un parámetro adicional. La función sin(x-a) tiene un mínimo que depende del valor del parámetro a. Cree una función anónima de x que incluya el valor del parámetro a. Minimice esta función sobre el intervalo 0<x<2π.

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

La respuesta es correcta; el valor teórico es

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

Para obtener más información sobre incluir parámetros adicionales, consulte Parametrizar funciones.

Monitorice los pasos que necesita fminbnd para minimizar la función sin(x) para 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

Encuentre la ubicación del mínimo de sin(x) y el valor del mínimo para 0<x<2π.

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

Devuelva toda la información sobre el proceso de resolución de fminbnd solicitando todas las salidas. Asimismo, monitorice el proceso de resolución utilizando una función de gráfica.

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, xlabel Iteration, ylabel Function value contains an object of type scatter.

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:...'

Argumentos de entrada

contraer todo

Función que desea minimizar, especificada como un identificador de función o un nombre de función. fun es una función que acepta un escalar real x y devuelve un escalar real f (con la función objetivo evaluada en x).

Especifique fun como un identificador de función para un archivo:

x = fminbnd(@myfun,x1,x2)

donde myfun es una función de MATLAB® como

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

También puede especificar fun como un identificador de función para una función anónima:

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

Ejemplo: fun = @(x)-x*exp(-3*x)

Tipos de datos: char | function_handle | string

Límite inferior, especificado como un escalar real finito.

Ejemplo: x1 = -3

Tipos de datos: double

Límite superior, especificado como un escalar real finito.

Ejemplo: x2 = 5

Tipos de datos: double

Opciones de optimización, especificadas como una estructura como la que devuelve optimset. Puede utilizar optimset para establecer o cambiar los valores de estos campos en la estructura de las opciones. Consulte Referencia de opciones de optimización para ver información detallada.

Display

Nivel de visualización (consulte Visualización iterativa):

  • 'notify' (predeterminado) solo muestra salidas si la función no converge.

  • 'off' o 'none' no muestran salida alguna.

  • 'iter' muestra la salida en cada iteración.

  • 'final' solo muestra la salida final.

FunValCheck

Compruebe si los valores de la función objetivo son válidos. El valor predeterminado 'off' permite a fminbnd proceder cuando la función objetivo devuelve un valor que es complex o NaN. El ajuste 'on' genera un error cuando la función objetivo devuelve un valor que es complex o NaN.

MaxFunEvals

Número máximo de evaluaciones de función permitidas, un entero positivo. La opción predeterminada es 500. Consulte Tolerancias y criterios de detención y Iteraciones y recuentos de la función.

MaxIter

Número máximo de iteraciones permitidas, un entero positivo. La opción predeterminada es 500. Consulte Tolerancias y criterios de detención y Iteraciones y recuentos de la función.

OutputFcn

Especifica una o varias funciones definidas por el usuario a las que una función de optimización llama en cada iteración, ya sea como un identificador de función o como un arreglo de celdas de identificadores de función. La opción predeterminada es ninguno ([]). Consulte Sintaxis de función de salida y función de gráfica.

PlotFcns

Representa varias medidas de progreso mientras el algoritmo se ejecuta. Seleccione una de las gráficas predefinidas o escriba la suya propia. Pase un nombre de función, un identificador de función o un arreglo de celdas de nombres o identificadores de función. La opción predeterminada es ninguno ([]):

  • @optimplotx representa el punto actual

  • @optimplotfunccount representa el recuento de la función

  • @optimplotfval representa el valor de la función

Las funciones de gráfica personalizadas utilizan la misma sintaxis que las funciones de salida. Consulte Funciones de salida para Optimization Toolbox y Sintaxis de función de salida y función de gráfica.

TolX

Tolerancia de terminación en x, un escalar positivo. La opción predeterminada es 1e-4. Consulte Tolerancias y criterios de detención.

Ejemplo: options = optimset('Display','iter')

Tipos de datos: struct

Estructura de problema, especificada como una estructura con los siguientes campos.

Nombre de campoEntrada

objective

Función objetivo

x1

Extremo de línea izquierdo

x2

Extremo de línea derecho

solver

'fminbnd'

options

Estructura de las opciones como la que devuelve optimset

Tipos de datos: struct

Argumentos de salida

contraer todo

Solución, devuelta como un escalar real. Habitualmente, x es una solución local al problema cuando exitflag es positivo. Para obtener información sobre la calidad de la solución, consulte Cuando el solver tiene éxito.

Valor de la función objetivo en la solución, devuelto como un número real. Por lo general, fval = fun(x).

Razón por la que fminbnd se ha detenido, devuelta como un entero.

1

La función ha convergido a una solución x.

0

El número de iteraciones ha sobrepasado options.MaxIter o el número de evaluaciones de función ha sobrepasado options.MaxFunEvals.

-1

Detenido por una función de salida o una función de gráfica.

-2

Los límites son inconsistentes, es decir, x1 > x2.

Información sobre el proceso de optimización, devuelta como estructura con campos:

iterations

Número de iteraciones realizadas

funcCount

Número de evaluaciones de función

algorithm

'golden section search, parabolic interpolation'

message

Mensaje de salida

Limitaciones

  • La función que se desea minimizar debe ser continua.

  • Es posible que fminbnd solo ofrezca soluciones locales.

  • fminbnd puede mostrar convergencia lenta cuando la solución está en un límite del intervalo. En ese caso, fmincon ofrece con frecuencia soluciones más rápidas y precisas.

Algoritmos

fminbnd es un archivo de función. El algoritmo se basa en la búsqueda de la sección áurea y en la interpolación parabólica. A menos que el extremo de línea izquierdo x1 esté muy cerca del extremo de línea derecho x2, fminbnd nunca evalúa fun en los extremos de línea, así que solo es necesario definir fun para x en el intervalo x1 <x <x2.

Si el mínimo se produce realmente en x1 o en x2, fminbnd devuelve un punto x en el interior del intervalo (x1,x2) que está cerca del minimizador. En este caso, la distancia de x desde el minimizador no es mayor que 2*(TolX + 3*abs(x)*sqrt(eps)). Consulte [1] o [2] para obtener detalles sobre el algoritmo.

Funcionalidad alternativa

App

La tarea Optimize de Live Editor proporciona una interfaz visual para fminbnd.

Referencias

[1] Forsythe, G. E., M. A. Malcolm, and C. B. Moler. Computer Methods for Mathematical Computations. Englewood Cliffs, NJ: Prentice Hall, 1976.

[2] Brent, Richard. P. Algorithms for Minimization without Derivatives. Englewood Cliffs, NJ: Prentice-Hall, 1973.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a