Post on 19-Sep-2018
ANEXOS
107
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
ANEXOS
ANEXO I: NEWTON-RAPHSON
Para entender el funcionamiento del programa, es necesario introducir los
fundamentos matemáticos del método de Newton Raphson, ya que para resolver las
ecuaciones del modelo de ventilación, ha sido necesario recurrir a dicho método para
sistemas de ecuaciones no lineales.
Las ecuaciones de nuestro sistema se pueden definir como una función
donde m=n. Si se supone que , y en un punto de un proceso iterativo
tendente a resolver ( ) se aproxima la función mediante el modelo ( ), que
define el desarrollo en la serie de Taylor alrededor de ese punto, truncándolo a partir
de los términos de segundo orden, se tiene que
( ) ( ) ( )( )
Donde ( ) es la matriz Jacobiana del sistema en :
( )
[ ( )
( )
( )
( )
]
Si se utiliza esa aproximación lineal de la función y se resuelve el sistema de
ecuaciones lineales que define
( ) ( )( )
Donde su solución determinará un nuevo punto del proceso iterativo:
( ) ( )
La relación de recurrencia del método de Newton-Raphson para sistemas de
ecuaciones no lineales es pues
( ) ( )
Dado que no nos interesa conocer ni calcular la expresión analítica de la matriz
Jacobiana, esta se remplaza por su aproximación en diferencias finitas:
( )
( ) ( )
ANEXOS
108
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
En el siguiente diagrama se muestra el algoritmo del método de Newton Raphson
usado para resolver el sistema de ecuaciones:
Diagrama de flujo 1: Método de Newton Raphson.
Definir solución inicial
‖ ( )‖
NO
es la solución del sistema
SI
Resolución del sistema ( )( ) ( )
ANEXOS
109
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
ANEXO II: PROGRAMA EN MATLAB DE LA ESTRATEGIA EM/SM
A) Escenario base con caudal de aire constante
clc; hold on ocup=[0 0 0 0 0 0 0 3 20 20 20 17 17 17 18 18 12 5 3 6 6 6 3 0 0 0]; ocuph=[]; for i=1:24
for k=1:6 B(k)=ocup(i)+(ocup(i+1)-ocup(i))/6*(k-1); end
ocuph=[ocuph B]; end ocuph(length(ocuph)+1)=ocup(24);
M=length(ocuph);
Csup=400*1.8; %Concentración de CO2 en
aire impulsión (ppm) V=270; %Volumen de aire en la
habitación (m^3) Cida=0*1.8; %Concentración inicial de
CO2 (ppm)
K=1; q_me=9.07*ocuph; %CO2 emitido por persona
(mg/s) q_vsup=133.57*[1 1 1]/1000; %Caudal de aire de
impulsión por persona (12.5l/(s*persona))
for ii=1:length(q_vsup)
q_vsupp=q_vsup(ii); C_CO2=[];
for i=1:144
for t=0:599
y(t+1)=Cida*exp(-q_vsupp*t/V)+q_me(i)/q_vsupp*(1-exp(-
q_vsupp*t/V));
end Cida=y(600); C_CO2=[C_CO2 y]; end
C_CO2=C_CO2+Csup;
plot(C_CO2/1.8) end
legend('q_vsup para ocup = 20','q_vsup para ocup = 27','q_vsup para
ocup = 35') xlabel('Tiempo (s)'),
ANEXOS
110
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
ylabel('Concentración de CO2 (ppm)') grid
B) Control por ocupación
clc; hold on ocup=[1.35 1.35 1.35 1.35 1.35 1.35 1.35 2.7 3.24 24.3 24.3 24.3 21.6
21.6 21.6 21.6 14 6 2.7 7.56 7.56 7.56 2.7 1.35 1.35]; ocuph=[]; for i=1:24
for k=1:6 B(k)=ocup(i)+(ocup(i+1)-ocup(i))/6*(k-1); end
ocuph=[ocuph B]; end ocuph(length(ocuph)+1)=ocup(24);
M=length(ocuph);
Csup=400*1.8; %Concentración de CO2 en
aire impulsión (ppm) V=270; %Volumen de aire en la
habitación (m^3) Cida=0*1.8; %Concentración inicial de
CO2 (ppm)
K=1; q_me=9.07*ocuph; %CO2 emitido por persona
(mg/m^3) q_vsup=17.6/1000*K*ocuph; %Caudal de aire de impulsión
por persona (12.5l/(s*persona))
C_CO2=[];
for i=1:144
for t=0:599
y(t+1)=Cida*exp(-q_vsup(i)*t/V)+q_me(i)/q_vsup(i)*(1-exp(-
q_vsup(i)*t/V));
end Cida=y(600); C_CO2=[C_CO2 y]; end
C_CO2=C_CO2+Csup;
plot(C_CO2,'r') xlabel('Tiempo (s)'), ylabel('Concentración de CO2 (mg/m^3)') grid
figure bar(q_vsup)
ANEXOS
111
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
figure bar(12.5*ocup)
C) Control por ocupación con retraso
clc; hold on ocup=[1.35 1.35 1.35 1.35 1.35 1.35 1.35 2.7 3.24 24.3 24.3 24.3 21.6
21.6 21.6 21.6 14 6 2.7 7.56 7.56 7.56 2.7 1.35 1.35]; ocuph=[]; for i=1:24
for k=1:6 B(k)=ocup(i)+(ocup(i+1)-ocup(i))/6*(k-1); end
ocuph=[ocuph B]; end ocuph(length(ocuph)+1)=ocup(24);
M=length(ocuph);
Csup=400*1.8; %Concentración de CO2 en
aire impulsión (ppm) V=270; %Volumen de aire en la
habitación (m^3) Cida=0*1.8; %Concentración inicial de
CO2 (ppm)
K=1; q_me=9.07*ocuph; %CO2 emitido por persona
(mg/s) q_vsup=12.5/1000*K*ocuph; %Caudal de aire de impulsión
por persona (12.5l/(s*persona))
C_CO2=[];
for i=1:144
for t=0:599
y(t+1)=Cida*exp(-q_vsup(i)*t/V)+q_me(i+1)/q_vsup(i)*(1-exp(-
q_vsup(i)*t/V));
end Cida=y(600); C_CO2=[C_CO2 y]; end
C_CO2=C_CO2+Csup;
plot(C_CO2,'k') xlabel('Tiempo (s)'), ylabel('Concentración de CO2 (mg/m^3)') legend('12.5 l/s') grid
ANEXOS
112
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
%%%% ocup=[1.35 1.35 1.35 1.35 1.35 1.35 1.35 2.7 3.24 24.3 24.3 24.3 21.6
21.6 21.6 21.6 14 6 2.7 7.56 7.56 7.56 2.7 1.35 1.35]; ocuph=[]; for i=1:24
for k=1:6 B(k)=ocup(i)+(ocup(i+1)-ocup(i))/6*(k-1); end
ocuph=[ocuph B]; end ocuph(length(ocuph)+1)=ocup(24);
M=length(ocuph);
Csup=400*1.8; %Concentración de CO2 en
aire impulsión (ppm) V=270; %Volumen de aire en la
habitación (m^3) Cida=0*1.8; %Concentración inicial de
CO2 (ppm)
K=1; q_me=9.07*ocuph; %CO2 emitido por persona
(mg/s) q_vsup=10.2/1000*K*ocuph; %Caudal de aire de impulsión
por persona (12.5l/(s*persona))
C_CO2=[];
for i=1:144
for t=0:599
y(t+1)=Cida*exp(-q_vsup(i)*t/V)+q_me(i+1)/q_vsup(i)*(1-exp(-
q_vsup(i)*t/V));
end Cida=y(600); C_CO2=[C_CO2 y]; end
C_CO2=C_CO2+Csup; hold on plot(C_CO2,'b') xlabel('Tiempo (s)'), ylabel('Concentración de CO2 (mg/m^3)') legend('12.5 l/s', '10.2 l/s')
D) Control por ocupación con retraso sin picos
clc; hold on
ANEXOS
113
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
ocup=[1.35 1.35 1.35 1.35 1.35 1.35 1.35 2.7 3.24 24.3 24.3 24.3 21.6
21.6 21.6 21.6 14 6 2.7 2.56 7.56 7.56 2.7 1.35 1.35]; ocuph=[]; for i=1:24
for k=1:6 B(k)=ocup(i)+(ocup(i+1)-ocup(i))/6*(k-1); end
ocuph=[ocuph B]; end ocuph(length(ocuph)+1)=ocup(24);
M=length(ocuph);
Csup=400*1.8; %Concentración de CO2 en
aire impulsión (ppm) V=270; %Volumen de aire en la
habitación (m^3) Cida=0*1.8; %Concentración inicial de
CO2 (ppm)
K=1; q_me=9.07*ocuph; %CO2 emitido por persona
(mg/s) q_vsup=12.5/1000*K*ocuph; %Caudal de aire de impulsión
por persona (12.5l/(s*persona))
C_CO2=[];
for i=1:144
for t=0:599
if (q_me(i+1)>q_me(i)) q_vsupp=q_vsup(i+1); else q_vsupp=q_vsup(i); end
y(t+1)=Cida*exp(-q_vsupp*t/V)+q_me(i+1)/q_vsupp*(1-exp(-
q_vsupp*t/V));
end Cida=y(600); C_CO2=[C_CO2 y]; end
C_CO2=C_CO2+Csup;
plot(C_CO2,'k') xlabel('Tiempo (s)'), ylabel('Concentración de CO2 (mg/m^3)') grid
E) Control por CO2
ANEXOS
114
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
clc; hold on ocup=[1.35 1.35 1.35 1.35 1.35 1.35 1.35 2.7 3.24 24.3 24.3 24.3 21.6
21.6 21.6 21.6 14 6 2.7 7.56 7.56 7.56 2.7 1.35 1.35]; ocuph=[]; for i=1:24
for k=1:6 B(k)=ocup(i)+(ocup(i+1)-ocup(i))/6*(k-1); end
ocuph=[ocuph B]; end ocuph(length(ocuph)+1)=ocup(24);
M=length(ocuph);
Csup=400*1.8; %Concentración de CO2 en
aire impulsión (ppm) V=270; %Volumen de aire en la
habitación (m^3) Cida=0*1.8; %Concentración inicial de
CO2 (ppm)
K=1; q_me=9.07*ocuph; %CO2 emitido por persona
(mg/s) q_vsup=[168.75 337.5 675]/1000; %Caudal de aire de
impulsión por persona (12.5l/(s*persona))
C_CO2=[]; q_vsupp=q_vsup(1); for i=1:144
for t=0:599
y(t+1)=Cida*exp(-q_vsupp*t/V)+q_me(i)/q_vsupp*(1-exp(-
q_vsupp*t/V)); if (y(t+1)<=1050-Csup) q_vsupp=q_vsup(1); end if (y(t+1)>1050-Csup && y(t+1)<=1350-Csup) q_vsupp=q_vsup(2); end if (y(t+1)>1350-Csup) q_vsupp=q_vsup(3); end
end Cida=y(600); C_CO2=[C_CO2 y]; end
C_CO2=C_CO2+Csup;
plot(C_CO2,'r') xlabel('Tiempo (s)'),
ANEXOS
115
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
ylabel('Concentración de CO2 (mg/m^3)') grid
F) Control por humedad
clc; hold on ocup=[1.35 1.35 1.35 1.35 1.35 1.35 1.35 2.7 3.24 24.3 24.3 24.3 21.6
21.6 21.6 21.6 14 6 2.7 7.56 7.56 7.56 2.7 1.35 1.35]; ocuph=[]; for i=1:24
for k=1:6 B(k)=ocup(i)+(ocup(i+1)-ocup(i))/6*(k-1); end
ocuph=[ocuph B]; end ocuph(length(ocuph)+1)=ocup(24);
M=length(ocuph);
Csup=5*1.2; %Concentración de H20 en aire
impulsión (g/m^3) V=270; %Volumen de aire en la habitación
(m^3) Cida=0*1.8; %Concentración inicial de CO2
(g/m^3)
K=1; q_me=50/3600*ocuph; %H20 emitido por persona (g/s) q_vsup=[168.75 337.5 675]/1000; %Caudal de aire de
impulsión por persona (12.5l/(s*persona))
H_H2O=[]; q_vsupp=q_vsup(1); for i=1:144
for t=0:599
y(t+1)=Cida*exp(-q_vsupp*t/V)+q_me(i)/q_vsupp*(1-exp(-
q_vsupp*t/V)); if (y(t+1)<=6.5-Csup) q_vsupp=q_vsup(1); end if (y(t+1)>6.5-Csup && y(t+1)<=6.9-Csup) q_vsupp=q_vsup(2); end if (y(t+1)>6.9-Csup) q_vsupp=q_vsup(3); end
end Cida=y(600);
ANEXOS
116
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
H_H2O=[H_H2O y]; end
H_H2O=H_H2O+Csup;
plot(H_H2O) xlabel('Tiempo (s)'), ylabel('Concentración H_20 (g H_20/m^3)') grid
ANEXOS
118
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
ANEXO III: PROGRAMA EN FORTRAN DE LA ESTRATEGIA EN/SM
Diagrama de flujo 2: Interpolación de la velocidad del viento
ihora=1
imin=1
índice=1
ihora>24
imin>6
Ihora=24
( )
( ( )
( ))
(*) De igual manera se hace Tª exterior, Tª interior, horario, humedad exterior
( )
(*)
RESUELVE ECUACIONES MEDIANTE NEWTON RAPHSON
imin=imin+1
ihora=ihora+1
índice=índice+1
imin=1
ALMACENA RESULTADOS EN FICHEROS DE SALIDA
SI
SI
NO
NO
NO
SI
ANEXOS
119
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
Se aprecia como a medida que se interpola, se resuelven las ecuaciones mediante el
método de Newton Raphson y se almacenan los resultados para cada franja horaria.
Una vez terminada las 139 evaluaciones, se escriben todos los resultados en los
ficheros de salida.
Los bloques de color negros son fragmentos de programa que pueden contener
llamadas a funciones o subrutinas y serán desarrollados y explicados en apartados
posteriores.
El algoritmo del método de Newton Raphson explicado anteriormente, junto con la obtención
de la solución inicial comentada en el punto anterior, se correspondería con el bloque del
diagrama de flujo 2 representado en color negro y denominado “RESUELVE ECUACIONES
MEDIANTE NEWTON RAPHSON”.
A continuación se presenta el diagrama de flujo correspondiente al Newton-Raphson:
ANEXOS
120
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
Diagrama de flujo 3: Método de Newton Raphson detallado
RESUELVE ECUACIONES MEDIANTE NEWTON RAPHSON
Índice>1
x0= x0=0
EVALUACIÓN DE LA FUNCIÓN EN X0
CALCULO DEL MÁXIMO DE LOS VALORES DE F(X0)
error>tol
error=comprobante
CALCULO DE LA MATRIZ JACOBIANA ( )
CALCULO INVERSA DEL JACOBIANO Y ( ) ( )
xk=x0
xk+1=xk - ( ) ( )
EVALUACIÓN DE LA FUNCIÓN EN Xk+1
CALCULO DEL MÁXIMO DE LOS VALORES DE F(Xk+1)
error=comprobante
=xk+1
SI NO
SI
NO
ANEXOS
121
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
El bloque denominado “EVALUACIÓN DE LA FUNCIÓN EN X0”, se corresponde con la
llamada a una subrutina que, pasándole un vector con la solución x0, devuelve un
vector con los valores de la función f(x0).
El bloque denominado “CALCULO MÁXIMO DE LOS VALORES DE F(X0)”, se corresponde con
la llamada a una subrutina que, pasándole el vector con los valores de la función evaluada en
x0 (f(x0)), devuelve el valor máximo de dicho vector (el programa llama a este valor
comprobante).
Diagrama de flujo 4: Calculo del máximo de los valores de f(x)
CALCULO DEL MÁXIMO DE LOS VALORES DE F(X0)
k=1
vble=0
k>ordensistema
comprobante = |x0(k)|
Comprobante>vble
variable = |x0(k)|
k=k+1
Comprobante=vble
NO
SI
SI
NO
ANEXOS
122
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
El bloque denominado “CALCULO MATRIZ JACOBIANA ( )”, se corresponde con la llamada
a una subrutina que es capaz de calcular la matriz jacobiana evaluada en xk.
Diagrama de flujo 5: Calculo de la matriz jacobiana y derivada de la función
En el diagrama de flujo anterior se muestra el algoritmo para calcular la matriz
jacobiana. Para ello es necesario obtener la derivada de la función f(x) respecto a la
variable xi. Se deriva mediante el método de las diferencias finitas, obteniéndose el
vector dfx, que se almacenará como una columna de la matriz jacobiana (JF(:,i)=dfx).
CALCULO DE LA MATRIZ JACOBIANA ( )
i=1
i >ordensistema
( )
EVALUADA EN Xk
JF(:,i)=dfx
i=i+1
Devuelve matriz JF(xk)
( )
EVALUADA EN Xk
xx=x
xx(i)=xx(i)+paso
EVALUACIÓN DE LA FUNCIÓN EN XX
dfx=y/(paso·2)
xx(i)=xx(i)-2·paso
EVALUACIÓN DE LA FUNCIÓN EN XX
dfx=dfx-y/(paso·2)
Devuelve el vector dfx
SI
NO
ANEXOS
123
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
El bloque denominado “CALCULO INVERSA DEL JACOBIANO Y ( ) ( )” , se
corresponde con la llamada a una subrutina que calcula la inversa de la matriz
jacobiana evaluada en xk y posteriormente calcula el producto de ( ) ( ).
Diagrama de flujo 6: Calculo de la inversa de la matriz jacobiana y producto ( ) ( )
CALCULO INVERSA DEL JACOBIANO Y ( ) ( )
CALCULO DE ( )
i=1
i >ordensistema
j=1
suma=0
j>ordensistema
suma=suma+invJF(i,j)·y(j)
EVALUACIÓN DE LA FUNCIÓN EN Xk
j=j+1
pro(i)=suma
i=i+1
Devuelve el vector dfx
SI
NO
SI
NO
ANEXOS
124
Javier García Ramos Proyecto Fin de Carrera
Ingeniería Industrial
El bloque del cálculo de la inversa en el diagrama de flujo 6 se corresponde con la
llamada a la función llamada “linrg” de la librería “numerical_ libraries”.
A continuación se muestra un diagrama de flujo con los pasos del algoritmo
comentado anteriormente:
Diagrama de flujo 7: Calculo de la curva del ventilador y pérdida de presión en la instalación.
Nótese como el cálculo de la curva del ventilador y la pérdida de presión en la
instalación se realiza tras la resolución de las ecuaciones del modelo de ventilación
mediante el método de Newton Raphson. Para cada una de las 139 simulaciones,
deberá realizarse un proceso iterativo para obtener la solución de las ecuaciones y la
curva del ventilador.
RESUELVE ECUACIONES MEDIANTE NEWTON RAPHSON
tipofan=1 & |Diferencia|>0.1
DeltaPfan=a·qven3+b·qven2+c·qven+d
CALCULO PERDIDAS EN LA INSTALACIÓN
Diferencia=DeltaPfan-DeltaPinstalación
Diferencia>0
qven=qven+10 qven=qven-10
NO SI