Optimizacion matlab
Enviado por josefinambv • 10 de Diciembre de 2017 • Apuntes • 282 Palabras (2 Páginas) • 131 Visitas
Resolver problemas no lineales
Con la función fmincon
Definir la función objetivo en un archivo a parte
Fmincon(llama la función objetivo
MATLAB
Crear una función script
Function z = funcionobj (x)
Z=x(1)*x(2)+((x(1)).^2)*log(x(2))
end
*X1 primero coordenada vector
*X2 segunda
Otro script:
Función [c, ceq] = nlrest (x) *restricciones no lineaes
Ceq=[];
C=x(1)+(x(2)-1)^2; * tiene que estar despejado a cero
End
Ceq * restricciones de igualdad, no toma valores pq no hay igualdad
- Las restr lineales de desigualdades va en en otra parte
Otro script para resolver el problema:
A=[-1 0; 0 -1]
B=[0, -1]; *vector asociado a restricciones meno o igual
Aeq=[]; asociada a igualdades, en este caso no hay valores
Beq=[];
Lb= [] ; cotas inferiores, en este caso es vacio
Ub=[]; cotas superiores
X0=[0,5];
[xmin,fmin,f]=fmincon(@funcionobj,x0,A,b,Aeq,beq,lb,ub,@nlrest)
Vector optimo = xmin
F es para saber que si esta bien el valor o no: valores exitflag
1: funciona bien
0 supero num max iteraciones
-2 infactible
2 el cambio en x fue menor que opciones
FMIN: 1.64 e-17
- Ahora vamos a darle las derivadas
gradientes
Otro archivo script:
Function [z, gradz]= gradfunobj(x)
Z=x(1)*x(2)+((x(1)).^2)*log(x(2))
Gradz= [x(2)+2*log(x(2))*x(1) ; x(1)+(x(1)^2)*1/x(2)] * vector igual al num de variables derivada cn respecto a una variables, después x2 * debe ser columna
End
otro script con restricciones
function [c,ceq,gradc, gradceq]=gradnlrest(x)
Ceq=[];
C=x(1)+(x(2)-1)^2; * tiene que estar despejado a cero
Gradc=[1;2*(x(2))-1];
end
otro archivo para solucionar el problema..
comando
optimoptions(‘fmincomn’)
sale toooo se puede modificar
gradconst * hay que poner on
grandobj
archivo resolver…:
options = optimoptons (‘fmincon’,’grandconst’,’on’,grandob’,’on’); * en el mismo orden, función que queremos cambiar y por que
A=[-1 0; 0 -1]
B=[0, -1]; *vector asociado a restricciones meno o igual
Aeq=[]; asociada a igualdades, en este caso no hay valores
Beq=[];
Lb= [] ; cotas inferiores, en este caso es vacio
Ub=[]; cotas superiores
X0=[0,5];
[xmin,fmin,f]=fmincon(@fgrandfunob,x0,A,b,Aeq,beq,lb,ub,@gradnlrest,options)
Xmin oo 1
Fmin 2.1 e-18
F 2
El segundo es mas rápido
...