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.

Sistemas no lineales con restricciones

Resuelve ecuaciones con restricciones de desigualdad

resuelve sistemas de ecuaciones no lineales.fsolve Sin embargo, no permite incluir restricciones, ni siquiera restricciones enlazadas. La pregunta es, ¿cómo puede resolver sistemas de ecuaciones no lineales cuando tiene restricciones?

La respuesta corta es que no hay garantías de que exista una solución que satisfaga sus limitaciones. No hay ninguna garantía de que exista ninguna solución, incluso una que no satisfaga sus limitaciones. Sin embargo, existen técnicas que pueden ayudarle a buscar soluciones que satisfagan sus limitaciones.

Para ilustrar las técnicas, considere cómo resolver las ecuaciones

F1(x)=(x1+1)(10x1)1+x221+x22+x2F2(x)=(x2+2)(20x2)1+x121+x12+x1,(1)

donde los componentes de deben ser no negativos.x Claramente, hay cuatro soluciones a las ecuaciones:

= (– 1, – 2) = (10, – 2), = (– 1, 20), = (10, 20).x
x
x
x

Sólo hay una solución que satisface las limitaciones, a saber, x = (10,20).

Para resolver las ecuaciones numéricamente, primero Introduzca el código para calcular ().Fx

function F = fbnd(x)  F(1) = (x(1)+1)*(10-x(1))*(1+x(2)^2)/(1+x(2)^2+x(2)); F(2) = (x(2)+2)*(20-x(2))*(1+x(1)^2)/(1+x(1)^2+x(1));

Guarde este código como el archivo en la ruta de acceso.fbnd.mMATLAB®

Utilice diferentes puntos de inicio

Generalmente, un sistema de ecuaciones en variables tiene soluciones aisladas, lo que significa que cada solución no tiene vecinos cercanos que también sean soluciones.NN Así que una manera de buscar una solución que satisfaga algunas restricciones es generar un número de puntos iniciales, y ejecutar a partir de cada uno.x0fsolvex0

Para este ejemplo, para buscar una solución, tome 10 puntos aleatorios que normalmente se distribuyen con la media 0 y la desviación estándar 100.Ecuación 1

rng default % for reproducibility N = 10; % try 10 random start points pts = 100*randn(N,2); % initial points are rows in pts soln = zeros(N,2); % allocate solution opts = optimoptions('fsolve','Display','off'); for k = 1:N     soln(k,:) = fsolve(@fbnd,pts(k,:),opts); % find solutions end

Examine las soluciones y encontrará varias que satisfacen las restricciones.soln

Utilice diferentes algoritmos

Hay tres algoritmos.fsolve Cada uno puede conducir a diferentes soluciones.

Para este ejemplo, tome y examine la solución que devuelve cada algoritmo.x0 = [1,9]

x0 = [1,9]; opts = optimoptions(@fsolve,'Display','off',...     'Algorithm','trust-region-dogleg'); x1 = fsolve(@fbnd,x0,opts)
x1 =     -1.0000   -2.0000
opts.Algorithm = 'trust-region'; x2 = fsolve(@fbnd,x0,opts)
x2 =     -1.0000   20.0000
opts.Algorithm = 'levenberg-marquardt'; x3 = fsolve(@fbnd,x0,opts)
x3 =      0.9523    8.9941

Aquí, los tres algoritmos encuentran diferentes soluciones para el mismo punto inicial. De hecho, ni siquiera es una solución, sino que es simplemente un punto estacionario localmente.x3

Utilice lsqnonlin con Bounds

intenta minimizar la suma de los cuadrados de los componentes de una función vectorial ().lsqnonlinFx Por lo tanto, intenta resolver la ecuación F(x) = 0. Además, acepta restricciones enlazadas.lsqnonlin

Formule el problema de ejemplo para resolverlo.lsqnonlin

lb = [0,0]; rng default x0 = 100*randn(2,1); [x,res] = lsqnonlin(@fbnd,x0,lb)
x =     10.0000    20.0000   res =     2.4783e-25

Puede utilizar con ellsqnonlin Global Optimization Toolbox Solucionador para buscar en muchos puntos iniciales automáticamente.MultiStart Ver.MultiStart Using lsqcurvefit or lsqnonlin (Global Optimization Toolbox)

Establezca ecuaciones y desigualdades como restricciones de fmincon

Puede reformular el problema y utilizarlo de la siguiente manera:fmincon

  • Dar una función objetiva constante, tal como, que se evalúa para cada uno.@(x)00x

  • Establezca la función objetiva como las restricciones de igualdad no lineal en.fsolvefmincon

  • Dar cualquier otra restricción en la sintaxis habitual.fmincon

Para este ejemplo, escriba un archivo de función para la restricción de desigualdad no lineal.

function [c,ceq] = fminconstr(x)  c = []; % no nonlinear inequality ceq = fbnd(x); % the fsolve objective is fmincon constraints

Guarde este código como el archivo en la ruta de acceso.fminconstr.mMATLAB

Resuelva el problema restringido.

lb = [0,0]; % lower bound constraint rng default % reproducible initial point x0 = 100*randn(2,1); opts = optimoptions(@fmincon,'Algorithm','interior-point','Display','off'); x = fmincon(@(x)0,x0,[],[],[],[],lb,[],@fminconstr,opts)
x =     10.0000    20.0000

Consulte también

| |

Temas relacionados