Você está na página 1de 16

Introduo ao Matlab

2a Parte

Carlos Andr Vaz Junior cavj@bol.com.br 2003

2a Parte: Objetivos

1) Reviso da 1a Parte 2) Introduo ao Controle do Fluxo de Execuo 3) Simulao de Processos com Perturbaes Simples 4) Simulao em Batelada 5) Comparao Grfica (visualizao simultnea)

1) Reviso da 1 a Parte - Exerccio: Vamos revisar a parte anterior atravs de mais um exemplo: modelar um reator com aquecimento. Deduzindo o modelo do reator chegamos as equaes diferenciais (5) e (6) do arquivo de apresentao. O programa Matlab para simular esse modelo idntico ao utilizado antes para duas variveis dependentes:

% Definio das constantes do modelo K =2; % m2/h hr =5; %m A =2; %m2 Fe =10; % m3/h Cp = 0.75; % kJ/(kg . K) Ro = 1000; % kg/m3 Te = 530; %K Th =540; %K U = 150; % kJ/(m2 . s . K) % Tempo de simulao t = 0.0 : 0.01 : 10.0; %h % Simulao do modelo [t,y]=ode45('dydt2',t,[(5/A) Th],[],[K hr A Fe Cp Ro U Te Th]); % Visualizao da simulao 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 equaes 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) Reviso da 1a Parte Estruturas Lgicas:

J vimos antes mas importante relembrar a funo e a sintaxe das estruturas lgicas (ou controle de fluxo de execuo) usadas no Matlab. So estruturas comuns as principais linguagens de programao, e fundamentais para criar programas mais sofisticados. DICA: entenda a funcionalidade de cada funo. Entender muito mais importante do que decorar a sintaxe. Use o Help para saber a sintaxe!

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: while norm(E+F-E,1) > 0, E = E + F; F = A*F/N; N = N + 1; end

d) For: for J = 1:N, A(I,J) = 1/(I+J-1); end

3) Exemplo 1 - CSTR com reao exotrmica:

O modelo matemtico para esse problema foi deduzido na aula terica, assim vamos passar diretor para a simulao. Observao: Cre: concentrao na corrente de entrada Cr: concentrao no reator Cr0: concentrao inicial dentro do reator As equaes diferenciais que descrevem o reator so as equaes (7) e (8). Novamente temos duas variveis dependentes do tempo: concentrao do reator e temperatura. O programa principal apresentado abaixo. Observe que no existe nenhuma mudana significativa em relao ao que j foi usado na aula passada.

% Definio das constantes do modelo U =50; % BTU/(h.ft2.R) A = 120; % ft2 DH = -30000; % BTU/lbm Ro = 50; % lb/ft3 Cp = 0.75; % BTU/(lbm.R) E = 30000; % BTU/lbm R = 1.99; % BTU/(lbm.R) k0 = 7.08e10; % 1/h V =48; % ft3 Te = 580; %R Th = 550; %R Fe = 18; % ft3/h Cre = 0.48; % lbm/ft3 % Tempo de simulao t = 0.0 : 0.01 : 10.0; %h % Condies iniciais Cr0 = 0.16; % lbm/ft3 T0 = 603; %R % Simulao do modelo [t,y] = ode45('dcstr',t,[Cr0 T0],[],[U A DH Ro Cp E R k0 V Te Th Fe Cre]); % Visualizao da simulao figure(1);

plot(t,y(:,1)); title('CSTR com Reao Exotrmica'); xlabel('Tempo (h)'); ylabel('Concentrao de Reagente (lbm/ft3)'); figure(2); plot(t,y(:,2)); title('CSTR com Reao Exotrmica'); xlabel('Tempo (h)'); ylabel('Temperatura (R)');

A codificao do arquivo .m apresentada a seguir:

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(1) = (Fe/V)*(Cre-y(1)) - k0*exp(-E/(R*y(2)))*y(1); dy(2) = (Fe/V)*(Te-y(2)) + ((DH*k0*exp(-E/(R*y(2)))*y(1))/(Ro*Cp)) - ... (U*A*(y(2)-Th)/(V*Ro*Cp)); dy = dy(:);

DICA: caso lhe parea confusa a nomenclatura y(1) , y(2), dy(1), dy(2), faa a tabela recomendada na aula passada! DICA: quando uma equao muito grande e precisa ser dividida em duas ou mais linhas, use ... para continuar na linha seguinte.

4) Exemplo 2 - Aplicando perturbaes no CSTR:

Analisando os grficos do exemplo anterior vemos que o reator tende ao estado estacionrio. Seria interessante introduzir perturbaes e observar como o reator se comporta. A maneira mais simples de introduzir uma perturbao simples em um modelo simulado em Matlab computando uma perturbao degrau. Uma perturbao degrau em uma entrada u do sistema tal que: u = u0 , u = u0 + du, t < tdegrau t > tdegrau

Ou seja: antes do degrau a entrada u vale u0. Aps o tempo determinado para que o degrau ocorra (tdegrau) temos que u passa a valer u0 + du. O degrau ser aplicado no parmetro Fe (vazo de entrada). A idia que aps um tempo td o valor de Fe seja dobrado. A nica alterao necessria no programa principal passar td (tempo em que o degrau ocorre) e a amplitude do degrau para a funo chamada pela ODE45. O programa principal fica assim: % Definio das constantes do modelo U =50; % BTU/(h.ft2.R) A = 120; % ft2 DH = -30000; % BTU/lbm Ro = 50; % lb/ft3 Cp = 0.75; % BTU/(lbm.R) E = 30000; % BTU/lbm R = 1.99; % BTU/(lbm.R) k0 = 7.08e10; % 1/h V =48; % ft3 Te = 580; %R Th = 550; %R Fe = 18; % ft3/h Cre = 0.48; % lbm/ft3 % Tempo de simulao t = 0.0 : 0.01 : 10.0; %h % Perturbao na vazo de entrada td = 5.0; %Tempo onde ocorre o degrau fd = 2*Fe; %Valor assumido aps o degrau % Condies iniciais Cr0 = 0.16; % lbm/ft3

T0 = 603; %R

% Simulao do modelo [t,y] = ode45('dcstrdeg',t,[Cr0 T0],[],[U A DH Ro Cp E R k0 V Te Th Fe Cre],[td fd]); % Visualizao da simulao figure(1); plot(t,y(:,1)); title('CSTR com Reao Exotrmica'); xlabel('Tempo (h)'); ylabel('Concentrao de Reagente (lbm/ft3)'); figure(2); plot(t,y(:,2)); title('CSTR com Reao Exotrmica'); xlabel('Tempo (h)'); ylabel('Temperatura (R)');

Observe que alm do vetor: ([U A DH Ro Cp E R k0 V Te Th Fe Cre]) estamos mandando tambm o vetor: ([td fd]). Poderamos passar esses dois novos parmetros no primeiro vetor tambm. Optamos por passar em dois vetores separados para mostrar como o arquivo .m deve ser programado para essa situao:

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); %Verifica a ocorrncia de degrau: if t >= deg(1) Fe = deg(2); else Fe = par(12); end; Cre = par(13); dy(1) = (Fe/V)*(Cre-y(1)) - k0*exp(-E/(R*y(2)))*y(1); dy(2) = (Fe/V)*(Te-y(2)) + ...

((DH*k0*exp(-E/(R*y(2)))*y(1))/(Ro*Cp)) - ... (U*A*(y(2)-Th)/(V*Ro*Cp)); dy = dy(:);

Explicando: function dy = dcstrdeg(t,y,flag,par,deg); onde par pega o vetor A DH Ro Cp E R k0 V Te Th Fe Cre] [U o vetor [td fd]. e onde deg pega

Caso t > td, faa Fe igual a deg(2). Caso contrrio faa Fe igual a par(12): if t >= deg(1) Fe = deg(2); else Fe = par(12); end; essa toda codificao necessria para o degrau desejado.

Analise os grficos, experimente modificar o tempo do degrau e a sua amplitude. Veja como o reator converge em cada caso!

5) Exemplo 3 - Simulao em batelada:

Uma das grandes vantagens no uso de ferramentas computacionais reduzir o nosso esforo repetitivo, tarefa para a qual o computador muito eficiente. Supomos que temos um processo no qual gostaramos de testar uma serie de condies iniciais. Para cada nova condio inicial teramos de refazer todas as contas. Um esforo enorme! As linguagens de programao, e o Matlab em particular, resolvem esse problema facilmente usando o j apresentado comando for. Mostraremos essa tcnica de resoluo a seguir:

Usando o mesmo reator do exemplo 1 dessa aula (CSTR com reao exotrmica), a codificao do programa principal exibida abaixo:

% Definio das constantes do modelo U =50; % BTU/(h.ft2.R) A = 120; % ft2 DH = -30000; % BTU/lbm Ro = 50; % lb/ft3 Cp = 0.75; % BTU/(lbm.R) E = 30000; % BTU/lbm R = 1.99; % BTU/(lbm.R) k0 = 7.08e10; % 1/h V =48; % ft3 Te = 580; %R Th = 550; %R Fe = 18; % ft3/h Cre = 0.48; % lbm/ft3 % Tempo de simulao t = 0.0 : 0.01 : 10.0; %h % Condies iniciais Cr0 = [0.16 0.32 0.48 0.64]; % lbm/ft3 T0 = 603; %R % Simulao e visualizao do modelo em batelada cor = 'brmk '; leg = ['Cr0=0.16'; 'Cr0=0.32'; 'Cr0=0.48'; 'Cr0=0.64'];

for aux = 1 : length(Cr0) [t,y] = ode45('dcstr',t,[Cr0(aux) T0],[], [U A DH Ro Cp E R k0 V Te Th Fe Cre]); % Visualizao da simulao figure(1); hold on; plot(t,y(:,1),cor(aux)); title('CSTR com Reao Exotrmica'); xlabel('Tempo (h)'); ylabel('Concentrao de Reagente (lbm/ft3)'); figure(2); hold on; plot(t,y(:,2),cor(aux)); title('CSTR com Reao Exotrmica'); xlabel('Tempo (h)'); ylabel('Temperatura (R)'); end; figure(1); legend(leg); figure(2); legend(leg); hold off;

Observao: a funo .m ser a mesma usada no exemplo 1 dessa aula (CSTR com reao exotrmica).

Vamos agora entender cada passo do programa principal: Queremos simular em quatro condies iniciais diferentes. Os valores de Cr0 a serem usados so mostrados abaixo: % Condies iniciais Cr0 = [0.16 0.32 0.48 0.64]; % lbm/ft3

Quando formos visualizar os resultados queremos que cada condio inicial gere um grfico de cor diferente. Queremos tambm uma legenda que identifique cada curva. Preparamos essas duas caractersticas usando os dois vetores: vetor cor para cores e vetor leg para legenda: cor = 'brmk '; leg = ['Cr0=0.16'; 'Cr0=0.32'; 'Cr0=0.48'; 'Cr0=0.64'];

A estrutura for ser repetida uma vez para cada valor do vetor Cr0. Por tanto, queremos repetir tantas vezes quanto o numero de elementos do vetor Cr0. O nmero de elementos do vetor Cr0 dado pelo comando length(Cr0). Assim: for aux = 1 : length(Cr0) onde aux uma flag auxiliar indo de zero at o tamanho do vetor Cr0

A estrutura de comandos a ser repetida encontra-se entre o comando for e o respectivo end: for aux = 1 : length(Cr0) (...) end;

Para chamar o arquivo .m uso a mesma sintaxe anterior. O parmetro que varia a cada loop do for ser o parmetro Cr0. Cada giro assume um valor de aux diferente, de modo que a cada giro enviamos um valor de Cr0 diferente. [t,y] = ode45('dcstr',t,[Cr0(aux) T0],[],[U A DH Ro Cp E R k0 V Te Th Fe Cre]);

Um exemplo: Cr0 = 25 32 45 85 96 Comeando o loop: Aux = 1 Cr0 = 25 Aux = 2 Cr0 = 32 Aux = 3 Cr0 = 45

Aux = 4 Cr0 = 85 Aux = 5 Cr0 = 96 Final do loop for.

A visualizao dos resultados tem que ser construda a medida que os dados vo sendo calculados. Isso porque o Matlab no vai salvar os valores calculados (t,y) a cada o o loop (os valores gerados no 2 giro sero gravados sobre os do 1 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: % Visualizao da simulao figure(1); hold on; plot(t,y(:,1),cor(aux)); title('CSTR com Reao Exotrmica'); xlabel('Tempo (h)'); ylabel('Concentrao de Reagente (lbm/ft3)'); figure(2); hold on; plot(t,y(:,2),cor(aux)); title('CSTR com Reao Exotrmica'); 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 atravs da flag. Consulte o comando plot para detalhes.

Exerccio sugerido: O programa anterior as curvas de todas as condies iniciais em um nico grfico. Muitas vezes esse sistema torna o grfico difcil de ser entendido. Uma alternativa criar subplots (comando subplot), onde uma mesma figura apresenta n grficos, cada um representando uma condio inicial. Consultando o help, codifique o programa anterior para gerar sadas na forma de subplots.

Você também pode gostar