Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

fminbnd

Encuentre la función mínima de una variable en el intervalo fijo

Descripción

es un minimizador unidimensional que encuentra un mínimo para un problema especificado porfminbnd

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

,xx1Yx2 son escalares finitos, y () es una función que devuelve un escalar.fx

ejemplo

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

ejemplo

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

x = fminbnd(problem) encuentra el mínimo para, donde es una estructura.problemproblem

Crear mediante la exportación de un problema desde la aplicación de optimización, como se describe en.problemExportar su trabajo

ejemplo

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

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

ejemplo

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

Ejemplos

contraer todo

Encuentre el punto donde el

<math display="block">
<mrow>
<mi mathvariant="normal">sin</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
función toma su mínimo en el rango
<math display="block">
<mrow>
<mn>0</mn>
<mo><</mo>
<mi>x</mi>
<mo><</mo>
<mn>2</mn>
<mi>π</mi>
</mrow>
</math>
.

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

Para mostrar la precisión, es el mismo que el valor correcto

<math display="block">
<mrow>
<mi>x</mi>
<mo>=</mo>
<mn>3</mn>
<mi>π</mi>
<mo>/</mo>
<mn>2</mn>
</mrow>
</math>
.

3*pi/2
ans = 4.7124 

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

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

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

Encuentre el que minimiza en el intervalo 1 < = < = 3.xscalarobjectivex

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

Minimice una función cuando haya un parámetro adicional. La función

<math display="block">
<mrow>
<mi mathvariant="normal">sin</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo>-</mo>
<mi>a</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
tiene un mínimo que depende del valor del parámetro
<math display="block">
<mrow>
<mi>a</mi>
</mrow>
</math>
. Cree una función anónima de
<math display="block">
<mrow>
<mi>x</mi>
</mrow>
</math>
que incluye el valor del parámetro
<math display="block">
<mrow>
<mi>a</mi>
</mrow>
</math>
. Minimice esta función durante el intervalo
<math display="block">
<mrow>
<mn>0</mn>
<mo><</mo>
<mi>x</mi>
<mo><</mo>
<mn>2</mn>
<mi>π</mi>
</mrow>
</math>
.

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

Esta respuesta es correcta; el valor teórico es

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

Para obtener más información sobre cómo incluir parámetros adicionales, consulte.Parameterizing Functions

Supervise los pasos necesarios para minimizar elfminbnd

<math display="block">
<mrow>
<mi mathvariant="normal">sin</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
función para
<math display="block">
<mrow>
<mn>0</mn>
<mo><</mo>
<mi>x</mi>
<mo><</mo>
<mn>2</mn>
<mi>π</mi>
</mrow>
</math>
.

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

<math display="block">
<mrow>
<mi mathvariant="normal">sin</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
y el valor del mínimo para
<math display="block">
<mrow>
<mn>0</mn>
<mo><</mo>
<mi>x</mi>
<mo><</mo>
<mn>2</mn>
<mi>π</mi>
</mrow>
</math>
.

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

Devuelva toda la información sobre el proceso de solución solicitando todas las salidas.fminbnd Además, supervise el proceso de solución mediante una función de trazado.

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

Argumentos de entrada

contraer todo

Función para minimizar, especificada como un identificador de función o un nombre de función. es una función que acepta un escalar real y devuelve un escalar real (la función objetiva evaluada).funxfx

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

x = fminbnd(@myfun,x1,x2)

donde se encuentra una función comomyfunMATLAB®

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

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

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 devoluciones.optimset Puede utilizar para establecer o cambiar los valores de estos campos en la estructura de opciones.optimset Consulte para obtener información detallada.Opciones de optimización referencia

Display

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

  • (valor predeterminado) muestra la salida sólo si la función no converge.'notify'

  • o no muestra ninguna salida.'off''none'

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

  • muestra sólo la salida final.'final'

FunValCheck

Compruebe si los valores de función objetiva son válidos. El valor predeterminado permite continuar cuando la función objetiva devuelve un valor que es o.'off'fminbndcomplexNaN La configuración produce un error cuando la función objetiva devuelve un valor que es o.'on'complexNaN

MaxFunEvals

Número máximo de evaluaciones de funciones permitidas, un entero positivo. El valor predeterminado es.500 Mira y.Tolerancias y criterios de detenciónIteraciones y recuentos de funciones

MaxIter

Número máximo de iteraciones permitidas, un entero positivo. El valor predeterminado es.500 Mira y.Tolerancias y criterios de detenciónIteraciones y recuentos de funciones

OutputFcn

Especifique una o varias funciones definidas por el usuario que una función de optimización llama en cada iteración, ya sea como un identificador de función o como una matriz de celdas de identificadores de función. El valor predeterminado es None ().[] Ver.Sintaxis de función de salida

PlotFcns

Traza varias medidas de progreso mientras se ejecuta el algoritmo, selecciona entre trazados predefinidos o escribe el tuyo propio. Pasar un identificador de función o una matriz de celdas de identificadores de función. El valor predeterminado es None ().[]

  • traza el punto actual@optimplotx

  • traza el recuento de funciones@optimplotfunccount

  • traza el valor de la función@optimplotfval

Para obtener información sobre cómo escribir una función de trazado personalizada, consulte.Sintaxis de función de trazado

TolX

Tolerancia de terminación activada, un escalar positivo.x El valor predeterminado es.1e-4 Ver.Tolerancias y criterios de detención

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

Tipos de datos: struct

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

Nombre de campoEntrada

Objetivo

Función objetiva

x1

Extremo izquierdo

x2

Extremo derecho

solver

'fminbnd'

Opciones

Estructura de opciones como devuelta poroptimset

La forma más sencilla de obtener una estructura es exportar el problema desde la aplicación de optimización.problem

Tipos de datos: struct

Argumentos de salida

contraer todo

Solución, devuelta como un escalar real. Normalmente, es una solución local para el problema cuando es positivo.xexitflag Para obtener información sobre la calidad de la solución, consulte.Cuando el Solver se ejecuta correctamente

Valor de la función objetiva en la solución, devuelto como un número real. Generalmente, =.fvalfun(x)

Motivo detenido, devuelto como un entero.fminbnd

1

Función convergida a una solución.x

0

Número de iteraciones superada o número de evaluaciones de función superada.options.MaxIteroptions.MaxFunEvals

-1

Detenido por una función de salida o una función de trazado.

-2

Los límites son inconsistentes, significando.x1 > x2

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

iterations

Número de iteraciones tomadas

funcCount

Número de evaluaciones de funciones

algorithm

'golden section search, parabolic interpolation'

message

Mensaje de salida

Limitaciones

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

  • sólo podría dar soluciones locales.fminbnd

  • puede exhibir la convergencia lenta cuando la solución está en un límite del intervalo.fminbnd En tal caso, a menudo da soluciones más rápidas y precisas.fmincon

Algoritmos

es un archivo de función.fminbnd El algoritmo se basa en la búsqueda de sección dorada y la interpolación parabólica. A menos que el extremo izquierdox1 está muy cerca del punto de conexión correctox2, nunca se evalúa en los extremos, por lo que solo se debe definir en el intervalofminbndfunfunxx1 < <xx2.

Si en realidad se produce el mínimo enx1 Ox2, devuelve un punto en el interior del intervalo (fminbndxx1,x2) que está cerca del minimizador. En este caso, la distancia del minimizador es no más de 2 *.x(TolX + 3*abs(x)*sqrt(eps)) Consulte o para obtener más información sobre el algoritmo.[1][2]

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

Introducido antes de R2006a