Sei sulla pagina 1di 21

Problema.

El siguiente modelo del clima de un invernadero se derivó de balances de energía del aire y
de la masa térmica. Las tasas de cambio de la temperatura del aire y masa térmica del invernadero se
modelan con las ecuaciones diferenciales:

donde es la temperatura del aire del invernadero (°C), es la temperatura de la masa térmica
del invernadero (°C), es la energía solar absorbida por el invernadero, es el flujo de calor por
infiltración y ventilación, es el flujo de calor por conducción y convección a través de la cubierta,
es el calor intercambiado entre la masa térmica y el aire interior del invernadero, es la energía
almacenada por la masa térmica durante el día, es la pérdida de calor de la masa térmica hacia la
capa profunda del suelo, es la capacidad de calor del invernadero y es la capacidad de calor de
la masa térmica. A continuación se presentan las ecuaciones auxiliares.

Tasa de intercambio de aire:

Energía absorbido por el invernadero durante el día:

Pérdida de calor por infiltracción y ventilación:

Pérdida de calor por conducción y convección:


Intercambio de calor entre la masa térmica y el aire interior:

Energía almacenado por la masa térmica durante el día:

Pérdida de calor hacia el subsuelo:

• Variables de entrada: = área total de ventilación ( ), = radiación global incidente en el exterior


(W ), = temperatura del aire exterior (°C) y = velocidad del viento exterior (m ).
• Valores nominales de los parámetros: =0.70, =0.125, =1.204, =4487.0, = 1925, =
1010.0, = 30000.0, = 125000.0, = 0.18, = 1.5, =18.0, = 6.5, = 2.5, = 2.0.
• Para el análisis de sensibilidad y estimación de parámetros considere:

1. Realice un análisis de sensibilidad local del modelo. Incluya en su reporte las ecuaciones de
sensibilidad y un cuadro comparativo de las sensibilidades relativas de los parámetros.

clear all
clc

Primero declaramos los datos de las variables de entrada, leyendo los datos de los archivos de excel.

MatEntrada=xlsread("datosentrada.xlsx");
Aw=MatEntrada(:,1);
Io=MatEntrada(:,2);
To=MatEntrada(:,3);
Vo=MatEntrada(:,4);
MatInterior=xlsread("datosinterior.xlsx");

Declaramos los valores nominales de los parámetros.

global Mhug Mhum Rhoa Ac Ag cp Cg Cm Cv Fvo Tref Uc Umg Uref


 
Mhug=0.70; Mhum=0.125; Rhoa=1.204; Ac=4487.0; Ag=1925; cp=1010.0; Cg=30000.0;
Cm=125000.0; Cv=0.18; Fvo=1.5; Tref=18.0; Uc=6.5; Umg=2.5; Uref=2.0;

declaramos condiciones iniciales, tiempo de simulación y unimos en una matriz los vectores de tiempo
y valores de entrada.

Tg0=MatInterior(1,1);
Tm0=MatInterior(1,2);
Time=[60:60:60*60*24*4];
UT=[Time' Aw Io To Vo];

Para obtener las ecuaciones de sensibilidad, debemos calcular la matriaz A y la matriz M de la


diguiente ecuación.
Primero declaramos las ecuaciones diferenciales de la siguiente manera, (Ecuaciones con todos las
funciones auxiliares ya sustituidas)

La matriz A y M se calculan de la siguiente forma:

Obteniendo el siguiente resultado.

Considerando que las muchas variables son vectores y algunos dependen de la salida de los
integradores del simulink para calcular los valores de los elementos de las matrices y solo los
siguientes elementos de A depeden unicamente de parámetros nominales, asi que se declaran en este
Script.

A12=Umg/Cg;
A21=Umg/Cg;
A22=-((Umg+Uref)/Cm);

Las ecuaciones de sensibilidad se obtuvieron de acuerdo a la siguiente formula.


Y son las siguientes:
Obtenidas las ecuaciones de sensibilidad se creó el diagrama en Simulink, (Archivo llamado
"AnalisisSensibilidadSim.slx"). y se inició la simulación

OptsSim = simset('Solver','ode45','RelTol',1e-8,'abstol',1e-10);
[T,XX,W] = sim('AnalisisSensibilidadSim',Time,OptsSim,UT);

Graficamos para comparar el comportamiento de Tg y Tm con los datos del excel llamado
"ClimaInterior.xls"

figure(1);
subplot(2,1,1);
plot(T,W(:,1),'r-',T,MatInterior(:,1),'b-')
title('Datos Tg del Modelo y del excel')
xlabel('Tiempo 4 Dias.')
ylabel('Tg')
legend('Simulación','Excel')
 
subplot(2,1,2);
plot(T,W(:,2),'r-',T,MatInterior(:,2),'b-')
title('Datos Tm del Modelo y del excel')
xlabel('Tiempo 4 Dias.')
ylabel('Tm')
legend('Simulación','Excel')
Graficas de sensibilidad de la temperatura del aire del invernadero (Tg) y temperatura de la masa
térmica del invernadero (Tm) respecto a los parámetros . Y uso
del comando trapz para determinar el área bajo la curva.

figure(2);
subplot(2,1,1);
plot(T,W(:,3),'r-')
title('Sensibilidad de Tg respecto a Mhug')
Vmhugtg=trapz(W(:,3));
 
subplot(2,1,2);
plot(T,W(:,4),'b-')
title('Sensibilidad de Tm respecto a Mhug')
Vmhugtm=trapz(W(:,4));
 
figure(3);
subplot(2,1,1);
plot(T,W(:,5),'r-')
title('Sensibilidad de Tg respecto a Mhum')
Vmhumtg=trapz(W(:,5));
 
subplot(2,1,2);
plot(T,W(:,6),'b-')
title('Sensibilidad de Tm respecto a Mhum')
Vmhumtm=trapz(W(:,6));
 
figure(4);
subplot(2,1,1);
plot(T,W(:,7),'r-')
title('Sensibilidad de Tg respecto a Cg')
Vcgtg=trapz(W(:,7));
 
subplot(2,1,2);
plot(T,W(:,8),'b-')
title('Sensibilidad de Tm respecto a Cg')
Vcgtm=trapz(W(:,8));
 
figure(5);
subplot(2,1,1);
plot(T,W(:,9),'r-')
title('Sensibilidad de Tg respecto a Cm')
Vcmtg=trapz(W(:,9));
 
subplot(2,1,2);
plot(T,W(:,10),'b-')
title('Sensibilidad de Tm respecto a Cm')
Vcmtm=trapz(W(:,10));
 
figure(6);
subplot(2,1,1);
plot(T,W(:,11),'r-')
title('Sensibilidad de Tg respecto a Cv')
Vcvtg=trapz(W(:,11));
 
subplot(2,1,2);
plot(T,W(:,12),'b-')
title('Sensibilidad de Tm respecto a Cv')
Vcvtm=trapz(W(:,12));
 
figure(7);
subplot(2,1,1);
plot(T,W(:,13),'r-')
title('Sensibilidad de Tg respecto a Fvo')
Vfvotg=trapz(W(:,13));
 
subplot(2,1,2);
plot(T,W(:,14),'b-')
title('Sensibilidad de Tm respecto a Fvo')
Vfvotm=trapz(W(:,14));
 
figure(8);
subplot(2,1,1);
plot(T,W(:,15),'r-')
title('Sensibilidad de Tg respecto a Tref')
Vtreftg=trapz(W(:,15));
 
subplot(2,1,2);
plot(T,W(:,16),'b-')
title('Sensibilidad de Tm respecto a Tref')
Vtreftm=trapz(W(:,16));
 
figure(9);
subplot(2,1,1);
plot(T,W(:,17),'r-')
title('Sensibilidad de Tg respecto a Uc')
Vuctg=trapz(W(:,17));
 
subplot(2,1,2);
plot(T,W(:,18),'b-')
title('Sensibilidad de Tm respecto a Uc')
Vuctm=trapz(W(:,18));
 
figure(10);
subplot(2,1,1);
plot(T,W(:,19),'r-')
title('Sensibilidad de Tg respecto a Umg')
Vumgtg=trapz(W(:,19));
 
subplot(2,1,2);
plot(T,W(:,20),'b-')
title('Sensibilidad de Tm respecto a Umg')
Vumgtm=trapz(W(:,20));
 
figure(11);
subplot(2,1,1);
plot(T,W(:,21),'r-')
title('Sensibilidad de Tg respecto a Uref')
Vureftg=trapz(W(:,21));
 
subplot(2,1,2);
plot(T,W(:,22),'b-')
title('Sensibilidad de Tm respecto a Uref')
Vureftm=trapz(W(:,22));

Con el área bajo la curva calculada para cada gráfica de sensibilidad, graficamos el valor de las áreas
que le corresponde a cada parámetro con el comando bar(), como se muestra a continuación.

figure(12)
x11=abs([Vmhugtg Vmhumtg Vcgtg Vcmtg Vcvtg Vfvotg Vtreftg ...
Vuctg Vumgtg Vureftg]);
x12=abs([Vmhugtm Vmhumtm Vcgtm Vcmtm Vcvtm Vfvotm Vtreftm ...
Vuctm Vumgtm Vureftm]);
 
parametroslabel={'Mhug','Mhum','Cg','Cm','Cv','Fvo','Tref','Uc','Umg','Uref'};
subplot(2,1,1)
bar(x11)
set(gca,'XTickLabel',parametroslabel);
title('Sensibilidad de Tg respecto a los parámetros.')
grid on
 
subplot(2,1,2);
bar(x12)
set(gca,'XTickLabel',parametroslabel);
title('Sensibilidad de Tm respecto a los parámetros.')
grid on
Creamos una tabla de indices de sensibilidad.

ParameterName={'Mhug';'Mhum';'Cg';'Cm';'Cv';'Fvo';'Tref';'Uc';'Umg';'Uref'};
Sensibilidad_Tg=x11';
Sensibilidad_Tm=x12';
Tabla_1=table(Sensibilidad_Tg,Sensibilidad_Tm,'RowNames',ParameterName)

Tabla_1 = 10×2 table


Sensibilidad_Tg Sensibilidad_Tm
________________ ________________

Mhug 756.606272502693 2325.54163029507


Mhum 108.963771457973 929.772877407166
Cg 11.153244519962 2.68239499841117
Cm 37.8933659075373 127.102694411079
Cv 381.855833163975 839.477395230659
Fvo 27.270623710193 50.4808290883766
Tref 309.374360836073 2471.25187328627
Uc 436.039042476472 807.154710249141
Umg 114.931583223279 205.879129221683
Uref 75.4189668028314 552.334655914703

2. Realice la estimación de los parámetros del modelo, seleccionados del análisis de


sensibilidad, utilizando la función LSQNONLIN de Matlab.

Parámetros principales a estimar (x0), lb y ub es el limite inferior y superior respectivamente.

x0 = [Mhug Mhum Cv Tref Uc];


lb = [0 0 0 0 0];
vm=5;
ub = [vm*Mhug vm*Mhum vm*Cv vm*Tref vm*Uc];
Usamos el comando lsqnonlin para estimar los parámetros mas sensibles, según la tabla 1 y la gráfica
de barras.

options = optimset('MaxIter',250,'Display','Iter','MaxFunEvals',...
5000,'TolFun',1e-6);
[xmin,resnorm,residual,exitflag,output]=lsqnonlin(@evalFuncion,x0,...
lb,ub,options);

Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Norm of First-order
Iteration Func-count f(x) step optimality
0 6 1.60785e+06 4e+05
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
1 12 209827 6.6278 2.1e+05
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
2 18 102134 1.16831 2.73e+04
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
3 24 100158 0.536016 8.46e+03
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
4 30 88934.2 4.05122 8.35e+04
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
5 36 86288.3 1.14362 4.28e+04
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
6 42 86287.4 0.000123183 5.6e+03
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
7 48 86264.6 0.0233846 21.6
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
8 54 86255.4 0.0267587 6.57
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
Tm0 =
22.06
9 60 86255.4 2.76829e-05 0.0153

Local minimum possible.

lsqnonlin stopped because the final change in the sum of squares relative to
its initial value is less than the selected value of the function tolerance.

<stopping criteria details>

La siguiente tabla muestra los parámetros estimados mediante el comando "lsqnonlin".

Param={'Valor'};
Mhug=xmin(1); Mhum=xmin(2); Cv=xmin(3); Tref=xmin(4); Uc=(5);
Tabla_2=table(Mhug,Mhum,Cv,Tref,Uc,'RowNames',Param)

Tabla_2 = 1×5 table


Mhug Mhum Cv Tref Uc
____ _____ ____ ________________ __

Valor 0.7 0.125 0.18 33.0033262595701 5


Una vez calculados los parámetros corremos una nueva simulación con los valores obtenidos.

OptsSim = simset('Solver','ode45','RelTol',1e-8,'abstol',1e-10);
[T2,XX,W3] = sim('AnalisisSensibilidadSim',Time,OptsSim,UT);

Nuevamente gráficamos los resultados obtenidos de la simulación para compararlos con los datos
medidos para observar los resultados de la calibración. Solo se gráfica la variable Tg, ya que solo se
tomo en cuenta los datos de esta variable para la función "evalFuncion" del lsqnonlin.

figure(15);
plot(T2,W3(:,1),'g--',T2,MatInterior(:,1),'b-',T,W(:,1),'--r')
title('Datos Tg del Modelo calibrado y del excel')
xlabel('Tiempo 4 Dias.')
ylabel('Tg')
legend('Simulación','Excel','M. Calibrado')

Claramente se puede observar en la gráfica que el modelo con los parámetros estimados por la
calibración, predice mejor el comportameinto de la temperatura del aire del invernadero (Tg).

END

SIMULACIÓN DE SISTEMAS BIOLÓGICOS.

Potrebbero piacerti anche