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.

Restricciones de igualdad y desigualdad no lineales

Puede incluir restricciones no lineales escribiendo una función que calcule los valores de restricción de igualdad y desigualdad. Una función de restricción no lineal tiene la sintaxis

[c,ceq] = nonlinconstr(x)

La función representa la restricción.c(x)c(x) <= 0 La función representa la restricción.ceq(x)ceq(x) = 0

Nota

Debe tener la función de restricción no lineal devolver ambos y, incluso si solo tiene un tipo de restricción no lineal.c(x)ceq(x) Si no existe una restricción, tenga la función Return para esa restricción.[]

Por ejemplo, si tiene la restricción de igualdad no lineal x12+x2=1 y la restricción de desigualdad no lineal x1x2 ≥ –10, reescríbelo como

x12+x21=0,x1x2100,

y, a continuación, resuelva el problema con los pasos siguientes.

Para este ejemplo, resuelva el problema

minxf(x)=ex1(4x12+2x22+4x1x2+2x2+1).

sujeto a estas restricciones no lineales.

Paso 1: escribe un archivo objfun. m.

function f = objfun(x) f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);

Paso 2: escriba un archivo confuneq. m para las restricciones no lineales.

function [c,ceq] = confuneq(x) % Nonlinear inequality constraints c = -x(1)*x(2) - 10; % Nonlinear equality constraints ceq = x(1)^2 + x(2) - 1;

Paso 3: invocar la rutina de optimización restringida.

x0 = [-1,1]; % Make a starting guess at the solution options = optimoptions(@fmincon,'Algorithm','sqp'); [x,fval] = fmincon(@objfun,x0,[],[],[],[],[],[],...     @confuneq,options);

Después de 21 evaluaciones de función, la solución producida es

x,fval
x =    -0.7529    0.4332 fval =     1.5093
[c,ceq] = confuneq(x) % Check the constraint values at x

c =    -9.6739  ceq =   -2.2204e-16

Tenga en cuenta que es igual a 0 dentro de la tolerancia predeterminada en las restricciones de y que es menor o igual que 0, como se desee.ceq1.0e-006c

Temas relacionados