Matlab - Optimización Toolbox

   
Vista:

Optimización Toolbox

Publicado por Juan José juanjose.cd@hotmail.es (60 intervenciones) el 02/06/2014 17:15:21
Buenas chicos,

Me encuentro frente a un problema que no se solucionar. Es un problema de optimización para el tamaño de un equipo, básicamente un cilindro. Os copio los archivos y los subo para quien sea más cómodo:

Función Objetivo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@fobj
 
function [f]=fobj(X)
% FUNCIÓN OBJETIVO OPTIMIZACIÓN DISEÑO REACTOR
% X(1)=R
% X(2)=L
% X(3)=alpha
% X(4)=n
% X(5)=h0
% X(6)=hex/h0
f=pi*X(1)^2*X(2)+0*X(3)+0*X(4)+0*X(5)+0*X(6);
end
 
Nonlinear constraint Function
 
function [c,ceq]=nonlconstr(X)
%%% Restricciones NO LINEALES
%%% Nonlinear constraint inequality
Theta=48.5; % Ángulo dinámico de reposo MSW
Thetarad=toRadians('degrees',Theta);
Xr=toradians('degrees',X(6)); % Transformar hex/h0 en rad para los ángulos de las ecuaciones
tre=45; % Tiempo Residencia Referencia (min) [Rango 45-60 min]
c=[-((X(2)*sin(Thetarad))/((2*pi*X(1)*X(4)*(tan(X(3))+cos(Thetarad)*tan(Xr)))*(cos(Xr))^2))+tre;
    (((1/pi)*(1/cos((X(1)-X(5))/X(1)))-(((X(1)-X(5))*sqrt(2*X(1)*X(5)-(X(5))^2))/(pi*(X(1))^2)))-0.2);
    (-2*X(1)*X(5)+(X(5))^2)];
ro=1.54; % Densidad material compuesto (kg/l) % Referencia Epoxy-Carbono (Libro)
Fmat=1.1478; % Flujo material (11 meses;Lunes-Viernes;24h) %[kg/min]
fre=Fmat/ro; % Flujo referencia. Dato obtenido a partir de las 400 Tn/año [l/min]
ceq=((4/3)*X(4)*pi*(cos(Xr))^2*((tan(X(3))/sin(Thetarad))+cot(Thetarad)*tan(Xr))*(2*X(1)*X(5)-(X(5))^2)^(3/2))-fre;
end

Comando: fmincon
Algoritmo: SQP

Adjunto foto del punto de partida en la optimization toolbox.
El resto de opciones: todas por defecto excepto Display (iter with messages) y stick en Error if user-supplier function is Nan, Inf or complex

El error es el siguiente:

Optimization running.
Error running optimization.
User function 'nonlconstr' returned a complex value when evaluated;
FMINCON cannot continue.

Ya he añadido una restricción para que una de las raices que tiene una ecuación sea >=0, y el problema sigue ocurriendo.

¿Alguien puede ayudarme? ¿Alguien sabe como decirle a matlab a partir de que valores una función obtiene un número complejo?

Correo: juanjose.cd@hotmail.es

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder