anexosbibing.us.es/proyectos/abreproy/5269/descargar_fichero/anexos.pdf · fundamentos matemáticos...

18
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: () ( ) ( )

Upload: lamcong

Post on 19-Sep-2018

241 views

Category:

Documents


0 download

TRANSCRIPT

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

117

Javier García Ramos Proyecto Fin de Carrera

Ingeniería Industrial

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