Buena pregunta. Primero, recuerde de dónde proviene esta aproximación Dejar ( x i , y i )H≈JTJ(xi,yi) sus puntos de datos, sea su modelo y β sean los parámetros de su modelo. Entonces, la función objetivo del problema de los mínimos cuadrados no lineales es 1f(⋅)βdonderes el vector de los residuos,ri=yi-f(xi,β). El hessiano exacto de la función objetivo esH=JTJ+∑ri∇2ri. Entonces el error en esta aproximación esH12rTrrri=yi−f(xi,β)H=JTJ+∑ri∇2riH−JTJ=∑ri∇2ri. Es una buena aproximación cuando los residuos, en sí mismos, son pequeños; o cuando la segunda derivada de los residuos es pequeña. Los mínimos cuadrados lineales pueden considerarse un caso especial donde la segunda derivada de los residuos es cero.
En cuanto a la aproximación por diferencias finitas, es relativamente barato. Para calcular una diferencia central, deberá evaluar el jacobiano veces (una diferencia hacia adelante le costará n evaluaciones adicionales, por lo que no me molestaría). El error de la aproximación de diferencia central es proporcional a ∇ 4 r y h 22nn∇4rh2 , en donde es el tamaño del paso. El tamaño de paso óptimo es h ∼ ϵ 1h , dondeϵes precisión de la máquina. Entonces, a menos que las derivadas de los residuos estén explotando, está bastante claro que la aproximación de diferencia finita debería ser MUCHO mejor. Debo señalar que, si bien el cálculo es mínimo, la contabilidad no es trivial. Cada diferencia finita en el jacobiano le dará una fila del hessiano por cada residuo. Luego tendrás que volver a montar el Hessian usando la fórmula anterior.h∼ϵ13ϵ
Hay, sin embargo, una tercera opción. Si su solucionador utiliza un método Cuasi-Newton (DFP, BFGS, Bryoden, etc.), ya se está aproximando al Hesse en cada iteración. La aproximación puede ser bastante buena, ya que utiliza la función objetivo y los valores de gradiente de cada iteración. La mayoría de los solucionadores le darán acceso a la estimación final de Hesse (o su inversa). Si esa es una opción para usted, lo usaría como la estimación de Hesse. Ya está calculado y probablemente será una estimación bastante buena.
h_actual = (x + h_desired) - x