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 analítica jacobiana

En este ejemplo se muestra el uso del algoritmo de confianza-región-dogleg predeterminado (consulte).fsolveAlgoritmos a gran escala frente a mediano escala Está pensada para problemas en los que

  • El sistema de ecuaciones no lineales es cuadrado, es decir, el número de ecuaciones equivale al número de desconocidos.

  • Existe una solución quex F(x) = 0.

El ejemplo se utiliza para obtener el mínimo de lafsolve plátano (o Rosenbrock) función derivando y luego resolviendo un sistema equivalente de ecuaciones no lineales. La función Rosenbrock, que tiene un mínimo de F(x) = 0, es un problema de prueba común en la optimización. Tiene un alto grado de no linealidad y converge muy lentamente si se intenta utilizar métodos de tipo de descenso más escarpadas. Se da por

f(x)=100(x2x12)2+(1x1)2.

Primero generalice esta función a una función dimensional, para cualquier valor positivo, incluso de:nn

f(x)=i=1n/2100(x2ix2i12)2+(1x2i1)2.

Esta función se conoce como la función generalizada de Rosenbrock. Consiste en términos cuadrados que implican desconocidos.nn

Antes de poder utilizar para encontrar los valores de tal quefsolvex F(x) = 0, es decir, obtener el mínimo de la función de Rosenbrock generalizada, debe reescribir la función como el siguiente sistema equivalente de ecuaciones no lineales:

F(1)=1x1F(2)=10(x2x12)F(3)=1x3F(4)=10(x4x32)F(n1)=1xn1F(n)=10(xnxn12).

Este sistema es cuadrado, y se puede utilizar para resolverlo.fsolve Como se muestra en el ejemplo, este sistema tiene una solución única dada por xi = 1, i = 1,...,n.

Paso 1: escribe un archivo bananaobj. m para calcular los valores de la función objetiva y el jacobiano.

function [F,J] = bananaobj(x) % Evaluate the vector function and the Jacobian matrix for  % the system of nonlinear equations derived from the general  % n-dimensional Rosenbrock function. % Get the problem size n = length(x);   if n == 0, error('Input vector, x, is empty.'); end if mod(n,2) ~= 0,     error('Input vector, x ,must have an even number of components.'); end % Evaluate the vector function odds  = 1:2:n; evens = 2:2:n; F = zeros(n,1); F(odds,1)  = 1-x(odds); F(evens,1) = 10.*(x(evens)-x(odds).^2);  % Evaluate the Jacobian matrix if nargout > 1 if nargout > 1    c = -ones(n/2,1);    C = sparse(odds,odds,c,n,n);    d = 10*ones(n/2,1);  D = sparse(evens,evens,d,n,n);    e = -20.*x(odds);    E = sparse(evens,odds,e,n,n);    J = C + D + E; end

Paso 2: llame a la rutina de resolución para el sistema de ecuaciones.

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

Utilice el punto de partida x(i) = –1.9 para los índices impares, y x(i) = 2 para los índices incluso. Se establece en para ver el progreso del solucionador.Display'iter' Se establece para utilizar el jacobiano definido en.SpecifyObjectiveGradienttruebananaobj.m La función genera el siguiente resultado:fsolve

                                   Norm of    First-order   Trust-region
Iteration  Func-count   f(x)       step       optimality    radius
    0          1       8563.84                      615               1
    1          2       3093.71           1          329               1
    2          3       225.104         2.5         34.8             2.5
    3          4        212.48        6.25         34.1            6.25
    4          5        212.48        6.25         34.1            6.25
    5          6       102.771      1.5625         6.39            1.56
    6          7       102.771     3.90625         6.39            3.91
    7          8       87.7443    0.976563         2.19           0.977
    8          9       74.1426     2.44141         6.27            2.44
    9         10       74.1426     2.44141         6.27            2.44
   10         11        52.497    0.610352         1.52            0.61
   11         12       41.3297     1.52588         4.63            1.53
   12         13       34.5115     1.52588         6.97            1.53
   13         14       16.9716     1.52588         4.69            1.53
   14         15       8.16797     1.52588         3.77            1.53
   15         16       3.55178     1.52588         3.56            1.53
   16         17       1.38476     1.52588         3.31            1.53
   17         18      0.219553     1.16206         1.66            1.53
   18         19             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.