Resolver un problema NLP en Matlab es muy sencillo. Por ejemplo, vamos a calcular el mínimo de la función de Rosenbrock:
z = (1-x)2 + 100(y-x2)2
En primer lugar, definimos la función a minimizar en un archivo .m ("f01.m"):
function z = f01(u)
x = u(1);
y = u(2);
z = (1-x).^2 + 100*(y-x.^2).^2;
A continuación, usamos la función "fminsearch" para encontrar la solución.
La función fminsearch se utiliza para encontrar la solución a un problema NLP sin restricciones. Por ejemplo, en este caso, escribimos:
La función fminsearch se utiliza para encontrar la solución a un problema NLP sin restricciones. Por ejemplo, en este caso, escribimos:
[u,f] = fminsearch(@(u) f01(u),[0 0])
donde u son los valores de "x" e "y" que minimizan la función, mientras que "f" es el valor de la función en ese punto. [0 0] es un vector con los valores iniciales de "x" e "y", con los que Matlab empezará a buscar la solución.
Matlab nos devuelve lo siguiente:
1.0000 1.0000
f =
3.6862e-010
En el caso de que queramos utilizar límites superior e inferior para las variables, podemos usar la función "fmincon". Por ejemplo, si tenemos los siguientes límites en las variables:
0.8 < y < 2.2
Calculamos directamente el mínimo como:
u0 = [0 0]; % valores iniciales
umin = [1.1 0.8]; % valores minimos
umax = [2.0 2.2]; % valores maximos
[u, f] = fmincon(@(u) f01(u),u0,[],[],[],[],umin,umax)
Matlab nos devuelve los siguientes valores:
u =
1.1000 1.2100
f =
0.0100
No hay comentarios:
Publicar un comentario