lsqcurvefit
Resolver problemas de ajuste de curvas (ajuste de datos) no lineales en el sentido de mínimos cuadrados
Sintaxis
Descripción
Solver de mínimos cuadrados no lineales
Encuentre coeficientes x que resuelven el problema
dados los datos de entrada xdata y la salida observada ydata, donde xdata e ydata son matrices o vectores, y F (x, xdata) es una función con valores matriciales o vectoriales del mismo tamaño que ydata.
Opcionalmente, los componentes de x están sujetos a restricciones.
Los argumentos x, lb y ub pueden ser vectores o matrices; consulte Argumentos de matriz.
La función lsqcurvefit
utiliza el mismo algoritmo que lsqnonlin
. lsqcurvefit
simplemente proporciona una interfaz práctica para problemas de ajuste de datos.
En lugar de calcular la suma de cuadrados, lsqcurvefit
requiere que la función que define el usuario calcule la función de valor vectorial
empieza en x
= lsqcurvefit(fun
,x0
,xdata
,ydata
)x0
y encuentra los coeficientes x
que mejor ajustan la función no lineal fun(x,xdata)
a los datos ydata
(en el sentido de mínimos cuadrados). ydata
debe ser del mismo tamaño que el vector (o la matriz) F
que devuelve fun
.
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
= lsqcurvefit(fun
,x0
,xdata
,ydata
,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.
o x
= lsqcurvefit(fun
,x0
,xdata
,ydata
,lb
,ub
,options
)
minimiza con las opciones de optimización especificadas en x
= lsqcurvefit(fun
,x0
,xdata
,ydata
,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,
lsqcurvefit
utiliza el algoritmo Levenberg-Marquardt.lsqcurvefit
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),
lsqcurvefit
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 lsqcurvefit
.
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.