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.

fminunc

Encontrar un mínimo de función multivariable no restringida

Solucionador de programación no lineal.

Encuentra el mínimo de un problema especificado por

minxf(x)

donde f(x) es una función que devuelve un escalar.

x es un vector o una matriz; Véase Argumentos de matriz.

Sintaxis

x = fminunc(fun,x0)
x = fminunc(fun,x0,options)
x = fminunc(problem)
[x,fval] = fminunc(___)
[x,fval,exitflag,output] = fminunc(___)
[x,fval,exitflag,output,grad,hessian] = fminunc(___)

Descripción

ejemplo

x = fminunc(fun,x0) comienza en el punto x0 e intenta encontrar un x mínimo local de la función descrita en fun. El punto x0 puede ser un escalar, Vector o matriz.

Nota

Pasar parámetros adicionales explica cómo pasar parámetros adicionales a la función objetiva y a las funciones de restricción no lineales, si es necesario.

fminunc es para problemas no lineales sin restricciones. Si su problema tiene restricciones, generalmente use fmincon. Véase Tabla de decisiones de optimización.

ejemplo

x = fminunc(fun,x0,options) minimiza fun con las opciones de optimización especificadas en options. Utilice optimoptions para establecer estas opciones.

ejemplo

x = fminunc(problem) encuentra el mínimo para problem, donde problem es una estructura descrita en Argumentos de entrada. Cree la estructura problem exportando un problema desde la aplicación de optimización, como se describe en Exportar su trabajo.

ejemplo

[x,fval] = fminunc(___), para cualquier sintaxis, devuelve el valor de la función objetiva fun en la solución x.

ejemplo

[x,fval,exitflag,output] = fminunc(___) Además, devuelve un valor exitflag que describe la condición de salida de fminuncy una estructura output con información sobre el proceso de optimización.

[x,fval,exitflag,output,grad,hessian] = fminunc(___) Además devuelve:

  • grad — Gradiente de fun en la solución x.

  • hessian — Hessian de fun en la solución x. Véase Hessian de fminunc.

Ejemplos

contraer todo

Minimizar la función f(x)=3x12+2x1x2+x224x1+5x2.

Escriba una función anónima que calcule el objetivo.

fun = @(x)3*x(1)^2 + 2*x(1)*x(2) + x(2)^2 - 4*x(1) + 5*x(2);

Llame a fminunc para encontrar un mínimo de fun cerca de [1,1].

x0 = [1,1]; [x,fval] = fminunc(fun,x0);

Después de algunas iteraciones, fminunc devuelve la solución, x, y el valor de la función en x, fval.

x,fval
x =      2.2500   -4.7500   fval =    -16.3750

fminunc puede ser más rápido y más confiable cuando usted proporciona derivados.

Escriba una función objetiva que devuelva el degradado así como el valor de la función. Utilice el formulario condicional descrito en Incluyendo gradientes y hessianos. La función objetiva es la función de Rosenbrock,

f(x)=100(x2x12)2+(1x1)2,

que tiene gradiente

f(x)=[400(x2x12)x12(1x1)200(x2x12)].

function [f,g] = rosenbrockwithgrad(x) % Calculate objective f f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2;  if nargout > 1 % gradient required     g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));         200*(x(2)-x(1)^2)]; end

Guarde este código como un archivo en su ruta de acceso MATLAB® , denominado rosenbrockwithgrad.m.

Cree opciones para utilizar el degradado de la función objetiva. También, defina el algoritmo en 'trust-region'.

options = optimoptions('fminunc','Algorithm','trust-region','SpecifyObjectiveGradient',true);

Establezca el punto inicial en [-1,2]. Entonces llama a fminunc.

x0 = [-1,2]; fun = @rosenbrockwithgrad; x = fminunc(fun,x0,options)
Local minimum found.

Optimization completed because the size of the gradient is less than
the default value of the function tolerance.

<stopping criteria details>


x =

    1.0000    1.0000

Resuelva el mismo problema que en Suministre el gradiente utilizando una estructura de problemas en lugar de argumentos separados.

Escriba una función objetiva que devuelva el degradado así como el valor de la función. Utilice el formulario condicional descrito en Incluyendo gradientes y hessianos. La función objetiva es la función de Rosenbrock,

f(x)=100(x2x12)2+(1x1)2,

que tiene gradiente

f(x)=[400(x2x12)x12(1x1)200(x2x12)].

function [f,g] = rosenbrockwithgrad(x) % Calculate objective f f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2;  if nargout > 1 % gradient required     g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));         200*(x(2)-x(1)^2)]; end

Guarde este código como un archivo en su ruta de acceso MATLAB , denominado rosenbrockwithgrad.m.

Cree opciones para utilizar el degradado de la función objetiva. También, defina el algoritmo en 'trust-region'.

options = optimoptions('fminunc','Algorithm','trust-region','SpecifyObjectiveGradient',true);

Cree una estructura de problemas incluyendo el punto inicial x0 = [-1,2].

problem.options = options; problem.x0 = [-1,2]; problem.objective = @rosenbrockwithgrad; problem.solver = 'fminunc';

Resolver el problema.

x = fminunc(problem)
Local minimum found.

Optimization completed because the size of the gradient is less than
the default value of the function tolerance.

<stopping criteria details>


x =

    1.0000    1.0000

Encuentre la ubicación del mínimo de una función no lineal y el valor de la función en ese mínimo.

La función objetiva es

f(x)=x(1)ex22+x22/20.

fun = @(x)x(1)*exp(-(x(1)^2 + x(2)^2)) + (x(1)^2 + x(2)^2)/20;

Localice la ubicación y el valor de la función objetiva del minimizador comenzando en x0 = [1,2].

x0 = [1,2]; [x,fval] = fminunc(fun,x0)
Local minimum found.  Optimization completed because the size of the gradient is less than the default value of the function tolerance.  <stopping criteria details>   x =     -0.6691    0.0000   fval =     -0.4052

Elija Opciones y salidas de fminunc para examinar el proceso de la solución.

Defina las opciones para obtener la visualización iterativa y utilice el algoritmo 'quasi-newton' .

options = optimoptions(@fminunc,'Display','iter','Algorithm','quasi-newton');

La función objetiva es

fun = @(x)x(1)*exp(-(x(1)^2 + x(2)^2)) + (x(1)^2 + x(2)^2)/20;

Inicie la minimización en x0 = [1,2]y obtenga salidas que le permitan examinar la calidad y el proceso de la solución.

x0 = [1,2]; [x,fval,exitflag,output] = fminunc(fun,x0,options)
                                                        First-order   Iteration  Func-count       f(x)        Step-size       optimality      0           3         0.256738                         0.173      1           6         0.222149              1          0.131        2           9          0.15717              1          0.158        3          18        -0.227902       0.438133          0.386        4          21        -0.299271              1           0.46        5          30        -0.404028       0.102071         0.0458        6          33        -0.404868              1         0.0296        7          36        -0.405236              1        0.00119        8          39        -0.405237              1       0.000252        9          42        -0.405237              1       7.97e-07    Local minimum found.  Optimization completed because the size of the gradient is less than the default value of the optimality tolerance. 
x = 1×2

   -0.6691    0.0000

fval = -0.4052 
exitflag = 1 
output = struct with fields:
       iterations: 9
        funcCount: 42
         stepsize: 2.9343e-04
     lssteplength: 1
    firstorderopt: 7.9721e-07
        algorithm: 'quasi-newton'
          message: 'Local minimum found....'

  • El indicador de salida 1 muestra que la solución es un óptimo local.

  • La estructura output muestra el número de iteraciones, el número de evaluaciones de funciones y otra información.

  • La pantalla iterativa también muestra el número de iteraciones y evaluaciones de funciones.

Argumentos de entrada

contraer todo

Función para minimizar, especificada como identificador de función o nombre de función. fun es una función que acepta un vector o array x y devuelve un fescalar real, la función objetiva evaluada en x.

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

x = fminunc(@myfun,x0)

donde myfun es una función MATLAB como

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

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

x = fminunc(@(x)norm(x)^2,x0);

Si se puede calcular el gradiente de fun Y la opción SpecifyObjectiveGradient se establece en true, como se establece en

options = optimoptions('fminunc','SpecifyObjectiveGradient',true)
, entonces fun debe devolver el g(x) de vector de degradado en el segundo argumento de salida.

Si también puede calcular la matriz de hessian Y la opción HessianFcn está establecida en 'objective' mediante options = optimoptions('fminunc','HessianFcn','objective') Y la opción Algorithm está establecida en 'trust-region', fun debe devolver el valor de hessian H(x), una matriz simétrica, en una tercera salida Argumento. fun puede dar un hessian escaso. Consulte Hessian para fminunc confianza-región o confianza de fmincon-algoritmos región-reflexivos para obtener más información.

El algoritmo trust-region le permite suministrar una función de multiplicación de hessian. Esta función da el resultado de un hessian-tiempo-producto del vector sin el cómputo del hessian directamente. Esto puede ahorrar memoria. Véase Hessian multiplique la función.

Ejemplo: fun = @(x)sin(x(1))*cos(x(2))

Tipos de datos: char | function_handle | string

Punto inicial, especificado como vector real o matriz real. Los solucionadores utilizan el número de elementos en, y el tamaño de, x0 para determinar el número y el tamaño de las variables que fun acepta.

Ejemplo: x0 = [1,2,3,4]

Tipos de datos: double

Opciones de optimización, especificadas como la salida de optimoptions o una estructura como optimset Returns.

Algunas opciones se aplican a todos los algoritmos, y otras son relevantes para los algoritmos particulares. Consulte Referencia de opciones de optimización para obtener información detallada.

Algunas opciones están ausentes de la pantalla optimoptions . Estas opciones se enumeran en cursiva. Para obtener más información, consulte Ver opciones.

Todos los algoritmos

Algorithm

Elija el algoritmo fminunc . Las opciones son 'quasi-newton' (por defecto) o 'trust-region'.

El algoritmo 'trust-region' requiere que proporcione el degradado (consulte la descripción de fun), o bien fminunc utiliza el algoritmo 'quasi-newton' . Para obtener información sobre cómo elegir el algoritmo, consulte Elegir el algoritmo.

CheckGradients

Compare los derivados suministrados por el usuario (gradiente del objetivo) a los derivados finito-comparación. Las opciones son false (por defecto) o true.

Para optimset, el nombre es DerivativeCheck y los valores son 'on' o 'off'. Véase Tablas de nombres de opciones actuales y heredadas.

Diagnostics

Mostrar información de diagnóstico sobre la función a minimizar o resolver. Las opciones son 'off' (por defecto) o 'on'.

DiffMaxChange

Cambio máximo en variables para gradientes de diferencia finita (un escalar positivo). El valor predeterminado es Inf.

DiffMinChange

Cambio mínimo en variables para gradientes de diferencia finita (un escalar positivo). El valor predeterminado es 0.

Display

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

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

  • 'iter' muestra la salida en cada iteración y da el mensaje de salida predeterminado.

  • 'iter-detailed' muestra la salida en cada iteración y da el mensaje de salida técnico.

  • 'notify' muestra la salida sólo si la función no converge y da el mensaje de salida predeterminado.

  • 'notify-detailed' muestra la salida sólo si la función no converge, y da el mensaje de salida técnica.

  • 'final' (por defecto) muestra sólo la salida final y da el mensaje de salida predeterminado.

  • 'final-detailed' muestra sólo la salida final, y da el mensaje de salida técnica.

FiniteDifferenceStepSize

Factor de tamaño de paso escalar o vectorial para diferencias finitas. Cuando se establece FiniteDifferenceStepSize en un vector v, reenviar las diferencias finitas pasos delta son

delta = v.*sign′(x).*max(abs(x),TypicalX);

donde sign′(x) = sign(x) excepto sign′(0) = 1. Las diferencias finitas centrales son

delta = v.*max(abs(x),TypicalX);

Scalar FiniteDifferenceStepSize se expande a un vector. El valor predeterminado es sqrt(eps) para las diferencias de avance finito, y eps^(1/3) para las diferencias finitas centrales.

El algoritmo de la región de confianza utiliza FiniteDifferenceStepSize sólo cuando CheckGradients se establece en true.

Para optimset, el nombre es FinDiffRelStep. Véase Tablas de nombres de opciones actuales y heredadas.

FiniteDifferenceType

Las diferencias finitas, utilizadas para estimar gradientes, son 'forward' (por defecto) o 'central' (centradas). 'central' toma el doble de evaluaciones de funciones, pero debe ser más precisa. El algoritmo de la región de confianza utiliza FiniteDifferenceType sólo cuando CheckGradients se establece en true.

Para optimset, el nombre es FinDiffType. Véase Tablas de nombres de opciones actuales y heredadas.

FunValCheck

Compruebe si los valores de la función objetiva son válidos. La configuración predeterminada, 'off', no realiza una comprobación. La configuración 'on' muestra un error cuando la función objetivo devuelve un valor que es complex, Info NaN.

MaxFunctionEvaluations

Número máximo de evaluaciones de funciones permitidas, un entero positivo. El valor predeterminado es 100*numberOfVariables. Vea Tolerancias y criterios de parada y Iteraciones y conteos de funciones.

Para optimset, el nombre es MaxFunEvals. Véase Tablas de nombres de opciones actuales y heredadas.

MaxIterations

Número máximo de iteraciones permitidas, un entero positivo. El valor predeterminado es 400. Vea Tolerancias y criterios de parada y Iteraciones y conteos de funciones.

Para optimset, el nombre es MaxIter. Véase Tablas de nombres de opciones actuales y heredadas.

OptimalityTolerance

Tolerancia de terminación en la optimalidad de primer orden, un escalar positivo. El valor predeterminado es 1e-6. Véase Medida de optimización de primer orden.

Para optimset, el nombre es TolFun. Véase Tablas de nombres de opciones actuales y heredadas.

OutputFcn

Especifique una o varias funciones definidas por el usuario que una función de optimización llama en cada iteración. Pase un identificador de función o una matriz de celdas de los controles de función. El valor predeterminado es None ([]). Véase Función de salida.

PlotFcn

Traza varias medidas de progreso mientras el algoritmo se ejecuta; Seleccione una de las gráficas predefinidas o escriba la suya. Pase un nombre de función de trazado incorporado, un identificador de función o una matriz de celdas de nombres de función de trazado incorporado o de controladores de función. Para funciones de trazado personalizadas, pase las asas de función. El valor por defecto es None ([]):

  • 'optimplotx' traza el punto actual.

  • 'optimplotfunccount' traza el conteo de funciones.

  • 'optimplotfval' traza el valor de la función.

  • 'optimplotstepsize' traza el tamaño del escalón.

  • 'optimplotfirstorderopt' traza la medida de optimización de primer orden.

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

Para optimset, el nombre es PlotFcns. Véase Tablas de nombres de opciones actuales y heredadas.

SpecifyObjectiveGradient

Gradiente para la función objetiva definida por el usuario. Consulte la descripción de fun para ver cómo definir el degradado en fun. Establecer en true para que fminunc utilice un degradado definido por el usuario de la función objetiva. El false predeterminado hace que fminunc estime los gradientes mediante diferencias finitas. Debe proporcionar el degradado y establecer SpecifyObjectiveGradient en truepara utilizar el algoritmo de la región de confianza. Esta opción no es necesaria para el algoritmo quasi-Newton.

Para optimset, el nombre es GradObj y los valores son 'on' o 'off'. Véase Tablas de nombres de opciones actuales y heredadas.

StepTolerance

Tolerancia de terminación en x, un escalar positivo. El valor predeterminado es 1e-6. Véase Tolerancias y criterios de parada.

Para optimset, el nombre es TolX. Véase Tablas de nombres de opciones actuales y heredadas.

TypicalX

Valores típicos de x . El número de elementos en TypicalX es igual al número de elementos en x0, el punto de partida. El valor predeterminado es ones(numberofvariables,1). fminunc utiliza TypicalX para escalar diferencias finitas para la estimación de gradiente.

El algoritmo trust-region utiliza TypicalX sólo para la opción CheckGradients .

algoritmo trust-region
FunctionTolerance

Tolerancia de terminación en el valor de la función, un escalar positivo. El valor predeterminado es 1e-6. Véase Tolerancias y criterios de parada.

Para optimset, el nombre es TolFun. Véase Tablas de nombres de opciones actuales y heredadas.

HessianFcn

Si se establece en [] (predeterminado), fminunc se aproxima al hessian utilizando diferencias finitas.

Si se establece en 'objective', fminunc utiliza un hessian definido por el usuario para la función objetiva. El hessian es la tercera salida de la función objetiva (véase fun).

Para optimset, el nombre es HessFcn. Véase Tablas de nombres de opciones actuales y heredadas.

HessianMultiplyFcn

El hessian multiplica la función, especificada como manija de la función. Para los problemas estructurados en grande, esta función computa el producto de la matriz del hessian H*Y sin realmente formar H. La función es de la forma

W = hmfun(Hinfo,Y)

donde Hinfo contiene la matriz utilizada para calcular H*Y.

El primer argumento es el mismo que el tercer argumento devuelto por la función objetiva fun, por ejemplo

[f,g,Hinfo] = fun(x)

Y es una matriz que tiene el mismo número de filas que las dimensiones del problema. La matriz W = H*Y, aunque H no se forma explícitamente. fminunc utiliza Hinfo para calcular el precondicionador. Para obtener información sobre cómo suministrar valores para cualquier parámetro adicional hmfun necesidades, consulte Pasar parámetros adicionales.

Nota

Para utilizar la opción HessianMultiplyFcn , HessianFcn debe establecerse en [].

Para obtener un ejemplo, consulte Minimización con el hessian estructurado denso, igualdades lineares.

Para optimset, el nombre es HessMult. Véase Tablas de nombres de opciones actuales y heredadas.

HessPattern

Patrón de la SPARSIS del hessian para comparación finito. Establecer HessPattern(i,j) = 1 cuando se puede tener ∂2fun/∂x(i)x(j) ≠ 0. De lo contrario, establezca HessPattern(i,j) = 0.

Use HessPattern cuando sea inconveniente calcular la matriz de hessian H en fun, pero usted puede determinar (por ejemplo, por inspección) cuando el componente idel gradiente de fun depende de x(j). fminunc puede aproximar H a través de diferencias finitas escasas (del gradiente) si proporciona el estructura de la SPARSIS de H como el valor para HessPattern. En otras palabras, proporcione la ubicación de los no ceros.

Cuando se desconoce la estructura, no establezca HessPattern. El comportamiento predeterminado es como si HessPattern es una matriz densa de unos. A continuación, fminunc computa una aproximación completa de diferencia finita en cada iteración. Este cómputo puede ser costoso para los problemas grandes, así que es generalmente mejor determinar la estructura de la SPARSIS.

MaxPCGIter

Número máximo de iteraciones del gradiente conjugado precondicionado (PCG), un escalar positivo. El valor predeterminado es max(1,floor(numberOfVariables/2)). Para obtener más información, consulte Algoritmo de región de confianza.

PrecondBandWidth

Ancho de banda superior del precondicionador para PCG, un entero no negativo. De forma predeterminada, fminunc utiliza precondicionamiento diagonal (ancho de banda superior de 0). Para algunos problemas, aumentar el ancho de banda reduce el número de iteraciones de PCG. El ajuste de PrecondBandWidth a Inf utiliza una factorización directa (Cholesky) en lugar de los gradientes conjugados (CG). La factorización directa es computacionalmente más costosa que la CG, pero produce un paso de mejor calidad hacia la solución.

SubproblemAlgorithm

Determina cómo se calcula el paso de iteración. El valor predeterminado, 'cg', toma un paso más rápido pero menos preciso que 'factorization'. Véase algoritmo de fminunc trust-region.

TolPCG

Tolerancia de terminación en la iteración PCG, un escalar positivo. El valor predeterminado es 0.1.

algoritmo quasi-newton
HessUpdate

Método para elegir la dirección de búsqueda en el algoritmo quasi-Newton. Las opciones son:

ObjectiveLimit

Una tolerancia (criterio de detención) que es un escalar. Si el valor de la función objetiva en una iteración es menor o igual que ObjectiveLimit, las iteraciones se detienen porque el problema es presumiblemente ilimitado. El valor predeterminado es -1e20.

UseParallel

Cuando true, fminunc estima gradientes en paralelo. Deshabilite estableciendo el valor predeterminado, false. trust-region requiere un gradiente en el objetivo, por lo que UseParallel no se aplica. Véase Cálculo paralelo.

Ejemplo: options = optimoptions('fminunc','SpecifyObjectiveGradient',true)

Estructura de problemas, especificada como una estructura con los siguientes campos:

Nombre de campoEntrada

Objetivo

Función objetiva

x0

Punto inicial para x

solver

'fminunc'

options

Opciones creadas con optimoptions

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

Tipos de datos: struct

Argumentos de salida

contraer todo

Solución, regresó como un vector real o matriz real. El tamaño de x es el mismo que el tamaño de x0. Típicamente, 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 solucionador tiene éxito.

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

Razón fminunc se detuvo, regresó como un entero.

1

La magnitud del gradiente es menor que la tolerancia OptimalityTolerance .

2

El cambio en x era más pequeño que la tolerancia StepTolerance .

3

El cambio en el valor de la función objetiva fue menor que la tolerancia FunctionTolerance .

5

La disminución prevista en la función objetiva fue menor que la tolerancia FunctionTolerance .

0

Número de iteraciones excedidas MaxIterations o número de evaluaciones de función excedidas MaxFunctionEvaluations.

-1

El algoritmo fue terminado por la función de salida.

-3

La función objetiva en la iteración actual fue por debajo de ObjectiveLimit.

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

iterations

Número de iteraciones tomadas

funcCount

Número de evaluaciones de funciones

firstorderopt

Medida de la optimalidad de primer orden

algorithm

Algoritmo de optimización utilizado

cgiterations

Número total de iteraciones PCG (sólo algoritmo'trust-region' )

lssteplength

Tamaño del paso de búsqueda de línea relativo a la dirección de búsqueda (sólo algoritmo'quasi-newton' )

stepsize

Desplazamiento final en x

message

Mensaje de salida

Gradiente en la solución, regresó como un vector real. grad da el gradiente de fun en el punto x(:).

Hessian aproximado, regresó como una matriz real. Para el significado de hessian, vea Hessian.

Algoritmos

contraer todo

Algoritmo quasi-Newton

El algoritmo quasi-newton utiliza el método BFGS quasi-Newton con un procedimiento de búsqueda de línea cúbica. Este método cuasi-Newton utiliza la fórmula BFGS ([1],[5],[8]y [9]) para actualizar la aproximación de la matriz de hessian. Puede seleccionar la fórmula de DFP ([4],[6]y [7]), que se aproxima a la matriz de hessian inversa, estableciendo la opción HessUpdate en 'dfp' (y la opción Algorithm en 'quasi-newton'). Puede seleccionar un método de descenso más pronunciado estableciendo HessUpdate en 'steepdesc' (y Algorithm a 'quasi-newton'), aunque esta configuración suele ser ineficiente. Véase algoritmo de fminunc quasi-newton.

Algoritmo de región de confianza

El algoritmo trust-region requiere que suministre el degradado en fun y establezca SpecifyObjectiveGradient en true mediante optimoptions. Este algoritmo es un método subespacial de la confianza-región y se basa en el método interior-reflexivo del neutonio descrito en [2] y [3]. Cada iteración implica la solución aproximada de un sistema lineal grande utilizando el método de gradientes conjugados precondicionados (PCG). Vea algoritmo de fminunc trust-region, Métodos de la confianza-región para la minimización no lineal y Método de gradiente de conjugado precondicionado.

Referencias

[1] Broyden, C. G. “The Convergence of a Class of Double-Rank Minimization Algorithms.” Journal Inst. Math. Applic., Vol. 6, 1970, pp. 76–90.

[2] Coleman, T. F. and Y. Li. “An Interior, Trust Region Approach for Nonlinear Minimization Subject to Bounds.” SIAM Journal on Optimization, Vol. 6, 1996, pp. 418–445.

[3] Coleman, T. F. and Y. Li. “On the Convergence of Reflective Newton Methods for Large-Scale Nonlinear Minimization Subject to Bounds.” Mathematical Programming, Vol. 67, Number 2, 1994, pp. 189–224.

[4] Davidon, W. C. “Variable Metric Method for Minimization.” A.E.C. Research and Development Report, ANL-5990, 1959.

[5] Fletcher, R. “A New Approach to Variable Metric Algorithms.” Computer Journal, Vol. 13, 1970, pp. 317–322.

[6] Fletcher, R. “Practical Methods of Optimization.” Vol. 1, Unconstrained Optimization, John Wiley and Sons, 1980.

[7] Fletcher, R. and M. J. D. Powell. “A Rapidly Convergent Descent Method for Minimization.” Computer Journal, Vol. 6, 1963, pp. 163–168.

[8] Goldfarb, D. “A Family of Variable Metric Updates Derived by Variational Means.” Mathematics of Computing, Vol. 24, 1970, pp. 23–26.

[9] Shanno, D. F. “Conditioning of Quasi-Newton Methods for Function Minimization.” Mathematics of Computing, Vol. 24, 1970, pp. 647–656.

Introducido antes de R2006a