Professional Documents
Culture Documents
2a Parte
1) Revisão da 1a Parte
2) Introdução ao Controle do Fluxo de Execução
3) Simulação de Processos com Perturbações Simples
4) Simulação em Batelada
5) Comparação Gráfica (visualização simultânea)
1) Revisão da 1 a Parte - Exercício:
Vamos revisar a parte anterior através de mais um exemplo: modelar um reator com
aquecimento.
% Tempo de simulação
t = 0.0 : 0.01 : 10.0; %h
% Simulação do modelo
[t,y]=ode45('dydt2',t,[(5/A) Th],[],[K hr A Fe Cp Ro U Te Th]);
% Visualização da simulação
figure(1); plot(t,y(:,1));
title('Tanque de aquecimento');
xlabel('Tempo (h)'); ylabel('Altura (m)');
figure(2); plot(t,y(:,2));
title('Tanque de aquecimento');
xlabel('Tempo (h)'); ylabel('Temperatura (K)');
O arquivo .m com as novas equações é apresentado abaixo:
function dy = dydt2(t,y,flag,par);
K = par(1);
hr = par(2);
A = par(3);
Fe = par(4);
Cp = par(5);
Ro = par(6);
U = par(7);
Te = par(8);
Th = par(9);
dy(1) = (Fe-K*(y(1)-hr))/A;
dy(2) = (1/y(1))*((Fe*Te/A)+(U*Th/(Ro*Cp)) - ((Fe/A)+(U/(Ro*Cp)))*y(2));
dy = dy(:);
2) Revisão da 1a Parte – Estruturas Lógicas:
a) If:
if I == J
A(I,J) = 2;
elseif abs(I-J) == 1
A(I,J) = -1;
else
A(I,J) = 0;
end
b) Case:
SWITCH switch_expr
CASE case_expr,
statement, ..., statement
CASE {case_expr1, case_expr2, case_expr3,...}
statement, ..., statement
...
OTHERWISE,
statement, ..., statement
END
c) While:
for J = 1:N,
A(I,J) = 1/(I+J-1);
end
3) Exemplo 1 - CSTR com reação exotérmica:
O modelo matemático para esse problema foi deduzido na aula teórica, assim vamos
passar diretor para a simulação.
Observação:
Cre: concentração na corrente de entrada
Cr: concentração no reator
Cr0: concentração inicial dentro do reator
As equações diferenciais que descrevem o reator são as equações (7) e (8). Novamente
temos duas variáveis dependentes do tempo: concentração do reator e temperatura.
O programa principal é apresentado abaixo. Observe que não existe nenhuma mudança
significativa em relação ao que já foi usado na aula passada.
% Tempo de simulação
t = 0.0 : 0.01 : 10.0; %h
% Condições iniciais
Cr0 = 0.16; % lbm/ft3
T0 = 603; %R
% Simulação do modelo
[t,y] = ode45('dcstr',t,[Cr0 T0],[],[U A DH Ro Cp E R k0 V Te Th Fe Cre]);
% Visualização da simulação
figure(1);
plot(t,y(:,1));
title('CSTR com Reação Exotérmica');
xlabel('Tempo (h)');
ylabel('Concentração de Reagente (lbm/ft3)');
figure(2);
plot(t,y(:,2));
title('CSTR com Reação Exotérmica');
xlabel('Tempo (h)');
ylabel('Temperatura (R)');
function dy = dcstr(t,y,flag,par);
U = par(1);
A = par(2);
DH = par(3);
Ro = par(4);
Cp = par(5);
E = par(6);
R = par(7);
k0 = par(8);
V = par(9);
Te = par(10);
Th = par(11);
Fe = par(12);
Cre = par(13);
dy = dy(:);
DICA: caso lhe pareça confusa a nomenclatura y(1) , y(2), dy(1), dy(2), faça a tabela
recomendada na aula passada!
DICA: quando uma equação é muito grande e precisa ser dividida em duas ou mais
linhas, use “...” para continuar na linha seguinte.
4) Exemplo 2 - Aplicando perturbações no CSTR:
u = u0 , t < tdegrau
u = u0 + du, t > tdegrau
Ou seja: antes do degrau a entrada u vale u0. Após o tempo determinado para que o
degrau ocorra (tdegrau) temos que u passa a valer u0 + du.
O degrau será aplicado no parâmetro “Fe” (vazão de entrada). A idéia é que após um
tempo “td” o valor de “Fe” seja dobrado. A única alteração necessária no programa
principal é passar “td” (tempo em que o degrau ocorre) e a amplitude do degrau para a
função chamada pela ODE45. O programa principal fica assim:
% Tempo de simulação
t = 0.0 : 0.01 : 10.0; %h
% Condições iniciais
Cr0 = 0.16; % lbm/ft3
T0 = 603; %R
% Simulação do modelo
[t,y] = ode45('dcstrdeg',t,[Cr0 T0],[],[U A DH Ro Cp E R k0 V Te Th Fe Cre],[td fd]);
% Visualização da simulação
figure(1);
plot(t,y(:,1));
title('CSTR com Reação Exotérmica');
xlabel('Tempo (h)');
ylabel('Concentração de Reagente (lbm/ft3)');
figure(2);
plot(t,y(:,2));
title('CSTR com Reação Exotérmica');
xlabel('Tempo (h)');
ylabel('Temperatura (R)');
function dy = dcstrdeg(t,y,flag,par,deg);
U = par(1); A = par(2);
DH = par(3); Ro = par(4);
Cp = par(5); E = par(6);
R = par(7); k0 = par(8);
V = par(9); Te = par(10);
Th = par(11);
Cre = par(13);
Explicando:
function dy = dcstrdeg(t,y,flag,par,deg);
Caso t > td, faça Fe igual a deg(2). Caso contrário faça Fe igual a par(12):
if t >= deg(1)
Fe = deg(2);
else
Fe = par(12);
end;
Usando o mesmo reator do exemplo 1 dessa aula (CSTR com reação exotérmica), a
codificação do programa principal é exibida abaixo:
% Tempo de simulação
t = 0.0 : 0.01 : 10.0; %h
% Condições iniciais
Cr0 = [0.16 0.32 0.48 0.64]; % lbm/ft3
T0 = 603; %R
% Visualização da simulação
figure(1); hold on;
plot(t,y(:,1),cor(aux)); title('CSTR com Reação Exotérmica');
xlabel('Tempo (h)');
ylabel('Concentração de Reagente (lbm/ft3)');
figure(2); hold on;
plot(t,y(:,2),cor(aux)); title('CSTR com Reação Exotérmica');
xlabel('Tempo (h)');
ylabel('Temperatura (R)');
end;
figure(1); legend(leg);
figure(2); legend(leg);
hold off;
Observação: a função .m será a mesma usada no exemplo 1 dessa aula (CSTR com reação
exotérmica).
% Condições iniciais
Cr0 = [0.16 0.32 0.48 0.64]; % lbm/ft3
Quando formos visualizar os resultados queremos que cada condição inicial gere um
gráfico de cor diferente. Queremos também uma legenda que identifique cada curva.
Preparamos essas duas características usando os dois vetores: vetor “cor” para cores e
vetor “leg” para legenda:
onde “aux” é uma flag auxiliar indo de zero até o tamanho do vetor Cr0
(...)
end;
Para chamar o arquivo .m uso a mesma sintaxe anterior. O parâmetro que varia a cada loop
do for será o parâmetro Cr0. Cada giro assume um valor de “aux” diferente, de modo que a
cada giro enviamos um valor de Cr0 diferente.
Um exemplo:
Cr0 = 25 32 45 85 96
Começando o loop:
Aux = 1
Cr0 = 25
Aux = 2
Cr0 = 32
Aux = 3
Cr0 = 45
Aux = 4
Cr0 = 85
Aux = 5
Cr0 = 96
A visualização dos resultados tem que ser construída a medida que os dados vão
sendo calculados. Isso porque o Matlab não vai salvar os valores calculados (t,y) a cada
loop (os valores gerados no 2o giro serão gravados sobre os do 1o giro ). Mandamos plotar
os valores obtidos no primeiro giro na figura 1 e na figura 2. A figura 1 será Tempo vs.
Conc. de reagente. Já a figura 2 será Tempo vs. Temperatura:
% Visualização da simulação
figure(1); hold on;
plot(t,y(:,1),cor(aux)); title('CSTR com Reação Exotérmica');
xlabel('Tempo (h)');
ylabel('Concentração de Reagente (lbm/ft3)');
figure(2); hold on;
plot(t,y(:,2),cor(aux)); title('CSTR com Reação Exotérmica');
xlabel('Tempo (h)');
ylabel('Temperatura (R)');
DICA: para manter os pontos plotados no primeiro giro quando executar o segundo giro
use o comando “hold on”.
DICA: a sequencia de cores usadas é dada pelo vetor “cor”, “letra a letra” através da
flag. Consulte o comando “plot” para detalhes.
Exercício sugerido: