lsqnonlin
Resolver problemas de mínimos cuadrados no lineales (ajuste de datos no lineales)
Sintaxis
Descripción
Solver de mínimos cuadrados no lineales
Resuelve problemas de ajuste de curvas de mínimos cuadrados no lineales con el formato
sujeto a las restricciones
x, lb
y ub
pueden ser vectores o matrices; consulte Argumentos de matriz.
No especifique la función objetivo como el valor escalar (la suma de cuadrados). lsqnonlin
requiere que la función objetivo sea una función de valor vectorial
comienza en el punto x
= lsqnonlin(fun
,x0
)x0
y encuentra un mínimo de la suma de cuadrados de las funciones descritas en fun
. La función fun
debería devolver un vector (o arreglo) de valores y no la suma de cuadrados de los valores. (El algoritmo calcula implícitamente la suma de cuadrados de los componentes de fun(x)
).
Nota
Pasar parámetros adicionales explica cómo pasar parámetros adicionales a la función vectorial fun(x)
, si fuera necesario.
define un conjunto de límites inferiores y superiores en las variables de diseño de x
= lsqnonlin(fun
,x0
,lb
,ub
)x
, de modo que la solución siempre se encuentra en el rango lb
≤ x
≤ ub
. Puede fijar el componente de la solución x(i)
especificando lb(i) = ub(i)
.
Nota
Si los límites de entrada especificados para un problema son inconsistentes, la salida x
es x0
y las salidas resnorm
y residual
son []
.
Los componentes de x0
que vulneran los límites lb ≤ x ≤ ub
se restablecen al interior del cuadro definido por los límites. Los componentes que respetan los límites no se cambian.
y x
= lsqnonlin(fun
,x0
,lb
,ub
,options
)
minimizan con las opciones de optimización especificadas en x
= lsqnonlin(fun
,x0
,lb
,ub
,A
,b
,Aeq
,beq
,nonlcon
,options
)options
. Utilice optimoptions
para configurar estas opciones. Pase matrices vacías para lb
y ub
y para otros argumentos de entrada si los argumentos no existen.
Ejemplos
Argumentos de entrada
Argumentos de salida
Limitaciones
El algoritmo trust-region-reflective no resuelve sistemas subdeterminados; requiere que el número de ecuaciones, es decir, la dimensión de fila de F, sea al menos igual que el número de variables. En el caso subdeterminado,
lsqnonlin
utiliza el algoritmo Levenberg-Marquardt.lsqnonlin
puede resolver problemas de valores complejos de forma directa. Tenga en cuenta que las restricciones no tienen sentido para valores complejos, ya que los números complejos no están bien ordenados; preguntar si un valor complejo es mayor o menor que otro valor complejo carece de sentido. Para un problema complejo con límites de restricción, divida las variables en partes reales e imaginarias. No utilice el algoritmo'interior-point'
para datos complejos. Consulte Ajustar un modelo a datos de valores complejos.El cálculo de precondicionador utilizado en la parte del gradiente conjugado precondicionado del método trust-region-reflective forma JTJ (donde J es la matriz jacobiana) antes de calcular el precondicionador. Por lo tanto, una fila de J con muchos elementos distintos de cero, que resulta en un producto JTJ casi denso, puede traducirse en un proceso de resolución costoso para problemas grandes.
Si los componentes de x no tienen límites superiores (o inferiores),
lsqnonlin
prefiere que los correspondientes componentes deub
(olb
) se establezcan eninf
(o-inf
para límites inferiores) en lugar de un número positivo arbitrario, pero muy grande (o negativo para límites inferiores).
Puede utilizar el algoritmo trust-region reflective en lsqnonlin
, lsqcurvefit
y fsolve
con problemas a pequeña o mediana escala sin calcular la matriz jacobiana en fun
o sin proporcionar el patrón de dispersión de la matriz jacobiana. (Esto también se aplica al uso de fmincon
o fminunc
sin calcular la matriz Hessiana o sin proporcionar el patrón de dispersión de la matriz hessiana). ¿Cómo de pequeña es la escala pequeña o mediana? No existe ninguna respuesta absoluta, ya que depende de la cantidad de memoria virtual en la configuración que haya disponible en sistema del ordenador.
Suponga que su problema tiene m
ecuaciones y n
incógnitas. Si el comando J = sparse(ones(m,n))
provoca un error Out of memory
en su equipo, se trata claramente de un problema demasiado grande. Si no provoca un error, es posible que el problema aún sea demasiado grande. Solo puede saberlo ejecutándolo y comprobando si MATLAB se ejecuta dentro de la cantidad de memoria virtual disponible en el sistema.
Algoritmos
Los métodos Levenberg-Marquardt y trust-region-reflective se basan en los algoritmos de mínimos cuadrados no lineales que también se utilizan en fsolve
.
Este algoritmo trust-region-reflective predeterminado es un método de región de confianza de subespacio y se basa en el método de Newton de reflejo de punto interior descrito en [1] y [2]. Cada iteración implica la solución aproximada de un sistema lineal amplio utilizando el método de gradientes conjugados precondicionados (PCG). Consulte Mínimos cuadrados trust-region-reflective.
El método de Levenberg-Marquardt se describe en las referencias [4], [5] y [6]. Consulte Método de Levenberg-Marquardt.
El algoritmo 'interior-point'
utiliza el algoritmo 'interior-point'
de fmincon
con algunas modificaciones. Para obtener más detalles, consulte Algoritmo fmincon modificado para mínimos cuadrados restringidos.
Funcionalidad alternativa
App
La tarea Optimize de Live Editor proporciona una interfaz visual para lsqnonlin
.
Referencias
[1] 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.
[2] 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.
[3] Dennis, J. E. Jr. “Nonlinear Least-Squares.” State of the Art in Numerical Analysis, ed. D. Jacobs, Academic Press, pp. 269–312.
[4] Levenberg, K. “A Method for the Solution of Certain Problems in Least-Squares.” Quarterly Applied Mathematics 2, 1944, pp. 164–168.
[5] Marquardt, D. “An Algorithm for Least-squares Estimation of Nonlinear Parameters.” SIAM Journal Applied Mathematics, Vol. 11, 1963, pp. 431–441.
[6] Moré, J. J. “The Levenberg-Marquardt Algorithm: Implementation and Theory.” Numerical Analysis, ed. G. A. Watson, Lecture Notes in Mathematics 630, Springer Verlag, 1977, pp. 105–116.
[7] Moré, J. J., B. S. Garbow, and K. E. Hillstrom. User Guide for MINPACK 1. Argonne National Laboratory, Rept. ANL–80–74, 1980.
[8] Powell, M. J. D. “A Fortran Subroutine for Solving Systems of Nonlinear Algebraic Equations.” Numerical Methods for Nonlinear Algebraic Equations, P. Rabinowitz, ed., Ch.7, 1970.