Gauss-Newton

Para minimizar problemas donde la función es una suma de cuadrados

f(x) = 1/2 Underoverscript[∑, j = 1, arg3] r_j(x)^2 = 1/2 r(x) . r(x),

es ventajoso aprovecharse de la estructura especial de esta. Se pueden ahorrar tiempo y evaluaciones calculando la función residual r(x), y su derivada, el Jacobiano J(x).
El método de  Gauss-Newton no utiliza la Hessiana en el modelo, utiliza B_k   = J_k^TJ_k en (1), de forma tal que el paso p_k se calcula de la formula

J_k^TJ_k p_k = - ∇f_k = - J_k^Tr_k,

donde J_k = J (x_k) . Note que esto es una aproximación a la Hessiana completa, que es  J^TJ + Underoverscript[∑, j = 1, arg3] r_j∇^2r_j .

Aca tenemos los pasos que utiliza el método gauss-Newton. Como la función no es una suma de cuadrados, el método no puede trabajar

FindMinimumPlot[Cos[x^2 - 3 y] + Sin[x^2 + y^2], {{x, 1}, {y, 1}}, Method->"GaussNewton"]

FindMinimum :: notlm : The objective function for the method LevenbergMarquardt must be in a l ... uares form: Sum[f[i][x]^2,{i,1,n}] or Sum[w[i] f[i][x]^2,{i,1,n}] with positive w[i].  More…

FindMinimum :: notlm : The objective function for the method LevenbergMarquardt must be in a l ... uares form: Sum[f[i][x]^2,{i,1,n}] or Sum[w[i] f[i][x]^2,{i,1,n}] with positive w[i].  More…

FindMinimum :: notlm : The objective function for the method LevenbergMarquardt must be in a l ... uares form: Sum[f[i][x]^2,{i,1,n}] or Sum[w[i] f[i][x]^2,{i,1,n}] with positive w[i].  More…

General :: stop : Further output of FindMinimum :: notlm will be suppressed during this calculation. More…

FindMinimum[Cos[x^2 - 3 y] + Sin[x^2 + y^2], {x, 1}, {y, 1}, {Gradient {Automatic, Eva ... , Optimization`UnconstrainedProblems`Private`all$546}], WorkingPrecisionMachinePrecision}]

opción valor por defecto
Residual Automatic Permite especificar el residual r
EvaluationMonitor Automatic Expresión a evaluar cada vez que se evalue el residuo
Jacobian Automatic Permite especificar el Jacobiano
StepControl TrustRegion Debe ser TrustRegion, pero permite cambiar parámetros
de control vial las opciones del método

Definimos una función

fm[a_, b_, c_, x_] := a If[x > 0, Cos[b x], Exp[c x]]

Ahora se generan datos via la función e incluimos perturbaciones aleatorias

Block[{ϵ = 0.1, a = 1.2, b = 3.4, c = 0.98}, data = Table[{x, fm[a, b, c, x] + ϵ Random[Real, {-.5, .5}]}, {x, -5, 5, .1}]] ;

Encontramos un ajuste nolineal con mínimos cuadrados para el modelo

fit = FindFit[data, fm[a, b, c, x], {{a, 1}, {b, 3}, {c, 1}}, x]

{a1.20038, b3.39968, c0.98449}

Aca tenemos el fit con los puntos

Show[Block[{$DisplayFunction = Identity}, {ListPlot[data], Plot[fm[a, b, c, x] /.fit, {x, -5, 5}, PlotStyleRGBColor[0, 1, 0]]}]] ;

[Graphics:../HTMLFiles/optimizacion_104.gif]

En el ejemplo FindFit, construyo, internamente, una función residual y el Jacobiano; estos se utilizaron por el método de Gauss-Newton para encontrar el mínimo de la suma de cuadrados (ajuste no lineal).


Created by Mathematica  (August 9, 2004)