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.

Ecuaciones no lineales con diferencia finita jacobiana

En el ejemplo, la función evalúa y calcula el jacobiano.Ecuaciones no lineales con analítica jacobianabananaobjFJ ¿Qué pasa si el código para calcular el jacobiano no está disponible? De forma predeterminada, si no indica que el jacobiano se puede calcular en la función objetiva (estableciendo la opción en),, y en su lugar utilizar la diferenciación finita para aproximar el jacobiano.SpecifyObjectiveGradientOpcionestruefsolvelsqnonlinlsqcurvefit Esta es la opción jacobiana predeterminada. Puede seleccionar la diferenciación finita configurando el uso.SpecifyObjectiveGradientfalseoptimoptions

Este ejemplo se utiliza en el ejemplo como la función objetiva, pero se establece para que se aproxima al jacobiano y omite la segunda salida.bananaobjEcuaciones no lineales con analítica jacobianaSpecifyObjectiveGradientfalsefsolvebananaobj

n = 64;   x0(1:n,1) = -1.9;  x0(2:2:n,1) = 2; options = optimoptions(@fsolve,'Display','iter','SpecifyObjectiveGradient',false); [x,F,exitflag,output,JAC] = fsolve(@bananaobj,x0,options);

El ejemplo produce el siguiente resultado:

                                    Norm of    First-order   Trust-region
Iteration  Func-count   f(x)        step       optimality    radius
    0         65       8563.84                       615               1
    1        130       3093.71            1          329               1
    2        195       225.104          2.5         34.8             2.5
    3        260        212.48         6.25         34.1            6.25
    4        261        212.48         6.25         34.1            6.25
    5        326       102.771       1.5625         6.39            1.56
    6        327       102.771      3.90625         6.39            3.91
    7        392       87.7443     0.976562         2.19           0.977
    8        457       74.1426      2.44141         6.27            2.44
    9        458       74.1426      2.44141         6.27            2.44
   10        523        52.497     0.610352         1.52            0.61
   11        588       41.3297      1.52588         4.63            1.53
   12        653       34.5115      1.52588         6.97            1.53
   13        718       16.9716      1.52588         4.69            1.53
   14        783       8.16797      1.52588         3.77            1.53
   15        848       3.55178      1.52588         3.56            1.53
   16        913       1.38476      1.52588         3.31            1.53
   17        978      0.219553      1.16206         1.66            1.53
   18       1043             0    0.0468565            0            1.53

Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

La versión de diferencia finita de este ejemplo requiere el mismo número de iteraciones para converger como la versión jacobiana analítica en el ejemplo anterior. Es generalmente el caso que ambas versiones convergen en aproximadamente la misma tarifa en términos de iteraciones. Sin embargo, la versión de diferencia finita requiere muchas evaluaciones de funciones adicionales. El costo de estas evaluaciones adicionales podría o no ser significativo, dependiendo del problema en particular.