EQ/UFRJ Carlos André Vaz Junior cavazjunior@gmail.com .
Post on 16-Apr-2015
117 Views
Preview:
Transcript
EQ/UFRJ
Carlos André Vaz Junior
cavazjunior@gmail.com
http://www.eq.ufrj.br/links/h2cin/carlosandre
EQ/UFRJ
Mais de 1 milhão de resultados
O mundo MATLAB
EQ/UFRJ
?
http://newsreader.mathworks.com
Ajuda
EQ/UFRJ
Livros
EQ/UFRJ
Ambiente de Trabalho
EQ/UFRJ
Ambiente de Trabalho
EQ/UFRJ
Command Window
EQ/UFRJ
Agora a = 2, faço tudo de novo?!
Command Window
EQ/UFRJ
Arquivo de Programação: m-file
EQ/UFRJ
Current Directory
EQ/UFRJ
Current Directory
EQ/UFRJ
Criando variáveis
Char ArrayMatriz
Tipos Básicos
Case Sensitive!
Estrutura
CaSe SeNsItIvE!
EQ/UFRJ
Criando uma matriz:
Tipo Matriz
EQ/UFRJ
Criando um “char array”:
Tipo Char Array
EQ/UFRJ
Estrutura:
turma.alunos.nomes=strvcat( 'carla',’joao','bruno', ... 'luis', 'marcela‘ );turma.professor.nome=(‘Marcelo‘)turma.horario=1300turma.sala=221
Banco de Dados da “Turma”: Alunos: Carla, João, Bruno, Luis, Marcela Professor: Marcelo Horário: 13h Sala: 221
Tipo Estrutura
EQ/UFRJ
Comando “who” e “whos”
Comando “who” e “whos”
EQ/UFRJ
Use A=0:0.5:10 para gerar matrizes com dados em seqüência.
Use “;” para evitar que o resultado apareça na tela.
Dicas!
Use “clear A” para apagar a variável A.
Dicas!
Use “size(A) ” para identificar as dimensões da matriz. A maior dimensão é dada pelo comando “length(A) ”
Use “clear all” para apagar todas as variáveis armazenadas.
EQ/UFRJ
i) Soma e subtração: soma (ou subtrai) elemento por elemento da matriz. A+B A-B ii) Multiplicação e Divisão de matrizes: atenção às regras da álgebra, pois as dimensões das matrizes têm que ser coerentes! A * B A / B iii) Multiplicação e divisão elemento por elemento:A .* BA ./ B
Operações Matemáticas Simples
EQ/UFRJ
iv) Matriz Transposta:A’ v) Cria Matriz Identidade:eye(número de linhas, número de colunas) vi) Cria Matriz Zeros:zeros(número de linhas, número de colunas)
vii) Cria Matriz Uns:ones(número de linhas, número de colunas) viii) Cria Matriz Randômica (composta de números aleatórios):rand(número de linhas, número de colunas)
Operações Matemáticas Simples
EQ/UFRJ
ix) Determinante:det(matriz) x) Inversa:inv(matriz) xi) Dimensões da matriz:size(matriz)lenght(matriz)numel(matriz)
Operações Matemáticas Simples
Veja também: flipud e fliplr
EQ/UFRJ
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
Elemento = Matriz(2,3) ou Matriz(10)
Referenciar um Elemento de uma Matriz
EQ/UFRJ
Arquivo Function
EQ/UFRJ
A=1B=2global CC=100
Função Alfa
E=15F=55C=23
Função Beta
Escopo das Variáveis
Programa Principal / Workspace
global CC=100D=22
EQ/UFRJ
x=[1 2 3 4 5 6; 2 1 3 3 2 1];
%Forma linear: xmin=min(x); xmin=min(xmin); [i,j]=find(x==xmin);
Exemplo Rápido
Achando a posição do menor valor de uma matriz:
%Forma condensada: [i,j]=find(x==(min(min(x))));
EQ/UFRJ
X = fzero('sin',2)
Exemplo Rápido
Achando o menor valor de uma função:
função estimativa inicial
Veja também: fsolve e fmin
EQ/UFRJ
Estruturas Lógicas
if:
EQ/UFRJ
Estruturas Lógicas
AND OR
EQ/UFRJ
Falso Verdadeiro
AND
a b resultado
1 1 1
0 1 0
1 0 0
0 0 0
OR
a b resultado
1 1 1
0 1 1
1 0 1
0 0 0
Estruturas Lógicas
EQ/UFRJ
Case: switch I case 1, disp('I vale 1') case 2, disp('I vale 2') otherwise disp('I nao eh nem 1 nem 2') end
Estruturas Lógicas
EQ/UFRJ
While: while I < 10, disp(‘oi’); I=I+1; end
Manipule o ponteiro I na rotina executadapelo “while”
Estruturas Lógicas
EQ/UFRJ
For: for J = 1:100, A(1,J) = 1/(I+J-1); end
Incremento automático do ponteiro J a cada loop
Estruturas Lógicas
EQ/UFRJ
Try: try
I = 15 J = ‘teste’
A= 1/(I+J-1); catch disp(‘Erro na divisão’)
end
Proteção Contra Erros
EQ/UFRJ
Break:
i=0;
while i < 100,
i=i+1; disp(i)
if i>10, break end
end
Encerrando uma Rotina
EQ/UFRJ
>> figure(1)
>> t=0:0.01:10;>> y=sin(t);>> plot(t,y)
>> figure(2)
>> z=cos(t);>> plot(t,z)
Gráficos
EQ/UFRJ
>> figure(3)
>> subplot(1,2,1)
>> plot(t,y)
>> subplot(1,2,2)>> plot(t,z)
Gráficos
EQ/UFRJ
>> t=0:0.25:10;>> y=sin(t);>> plot(t,y,'r+')>> xlabel('tempo')>> ylabel('seno')>> title('Seno vs. Tempo')>> Axis([0 10 -2 2])
Gráficos
EQ/UFRJ
>> t=0:0.01:10;>> y=sin(t);>> z=cos(t);>> plot(t,y,'g-',t,z,'r-')>> legend('seno','cosseno')
Ou...
>> t=0:0.01:10;>> y=sin(t);>> z=cos(t);>> plot(t,y,'g-‘)>> hold on>> plot(t,z,'r-')>> legend('seno','cosseno')
Gráficos
EQ/UFRJ
>> x = [1 3 0.5 2.5 2];
>> explode = [0 1 0 0 0];
>> pie(x,explode)
>> colormap jet
>> legend('EMB','IND','ACO','DIV','POT')
Gráficos - Tortas
EQ/UFRJ
>> x = [1 3 0.5 2.5 2];
>> explode = [0 1 0 0 0];
>> pie3(x,explode)
>> colormap jet
>> legend('EMB','IND','ACO','DIV','POT')
Gráficos - Tortas
EQ/UFRJ
>> x = -2.9:0.2:2.9;
>> bar(x,exp(-x.*x))
>> colormap hsv
Gráficos - Barras
EQ/UFRJ
Gráficos - Superfície
EQ/UFRJ
xx=0:0.01:1;yy=0:0.01:1;[X,Y]=meshgrid(xx,yy);
Z=exp(-0.5*(X.^2+Y.^2));
colormap jetfigure(1);surf(X,Y,Z); rotate3d on; shading interp;
Gráficos - Superfície
EQ/UFRJ
Gráficos - Superfície
EQ/UFRJ
Gráficos - Superfície
EQ/UFRJ
xx=0:0.01:1;yy=0:0.01:1;[X,Y]=meshgrid(xx,yy);
Z=X.*X.*Y;
colormap jetfigure(1);surf(X,Y,Z); rotate3d on; shading interp;
Gráficos - Superfície
EQ/UFRJ
Gráficos - Superfície
EQ/UFRJ
Gráficos - Superfície
EQ/UFRJ
%Malha triangular da base %malha da base xx=0:0.01:1; yy=0:0.01:1; [X,Y]=meshgrid(xx,yy); Z=1-X-Y; %aplica a restrição para usar só a base do triangulo %onde existe consistência física (o que nao tem vira "Not a Number") iz=find(Z<0);Z(iz)=nan;
Gráficos - Superfície
EQ/UFRJ
%Malha triangular da base %malha da base xx=0:0.01:1; yy=0:0.01:1; [X,Y]=meshgrid(xx,yy); Z=1-X-Y; %aplica a restrição para usar só a base do triangulo %onde existe consistência física (o que não tem vira "Not a Number") iz=find(Z<0);Z(iz)=nan;
Composição(3 componentes)
Gráficos - Superfície
EQ/UFRJ
%Malha triangular da base %malha da base xx=0:0.01:1; yy=0:0.01:1; [X,Y]=meshgrid(xx,yy); Z=1-X-Y; %aplica a restrição para usar só a base do triangulo %onde existe consistência física (o que não tem vira "Not a Number") iz=find(Z<0);Z(iz)=nan;
Alguns Z sãonegativos! Não pode!
Gráficos - Superfície
EQ/UFRJ
vv1=(X.*log(X))+(Y.*log(Y))+(Z.*log(Z));
%gráfico da superfíciecolormap jetfigure(1);surf(X,Y,vv1); rotate3d on; shading interp;xlabel('X1');ylabel('X2');zlabel('DeltaGi/RT');
Gráficos - Superfície
EQ/UFRJ
Gráficos - Superfície
EQ/UFRJ
Use “close all” para fechar todas as figuras
Dica!
Gráficos
Use “clf” para apagar a figura atual
Use “[x,y]=ginput(2)” para capturar dois pontos no gráfico
EQ/UFRJ
Exemplos
EQ/UFRJ
Exemplo1
EQ/UFRJ
M o d e l a g e m & D i n â m i c a d e P r o c e s s o s
E x e m p l o 1 :M o d e l o s s i m p l e s - o t a n q u e d e n í v e l
1
h
F E
F
A
h
F E
F
A
h
F E
F
A
C o n s i d e r a n d o c o n s t a n t e s a v a z ã o d e a l i m e n t a ç ã o F E , a
d e n s i d a d e e a t e m p e r a t u r a T , e q u e o s i s t e m a e s t á s u j e i t o à
c o n d i ç ã o i n i c i a l :
00 hth ( 1 )
Modelagem simples de um tanque de nível
EQ/UFRJ
M o d e l a g e m & D i n â m i c a d e P r o c e s s o s
M o d e l o s s i m p l e s - o t a n q u e d e n í v e l
p o d e - s e e s c r e v e r o b a l a n ç o d e m a s s a d o s i s t e m a
1
FFdt
tdmE
dt
tdhA
dttdm
FFAdt
tdhE
1
A i n d a ,
e , p o r t a n t o ,
( 2 )
( 3 )
( 4 )
Modelagem simples de um tanque de nível
EQ/UFRJ
M o d e l a g e m & D i n â m i c a d e P r o c e s s o s
M o d e l o s s i m p l e s - o t a n q u e d e n í v e l
F r e q ü e n t e m e n t e , c o n s i d e r a - s e a v a z ã o d e s a í d a d o t a n q u e
p r o p o r c i o n a l à a l t u r a d a c o l u n a d e l í q u i d o é i n v e r s a m e n t e
p r o p o r c i o n a l a u m a r e s i s t ê n c i a a o e s c o a m e n t o ( R ) :
1
Rh
F
Rh
FAdt
tdhE
1
L o g o ,
( 5 )
( 6 )
Modelagem simples de um tanque de nível
EQ/UFRJ
M o d e l a g e m & D i n â m i c a d e P r o c e s s o s
M o d e l o s s i m p l e s - o t a n q u e d e n í v e l
E s t e m o d e l o s i m p l e s d e u m t a n q u e d e n í v e l , s e m b a l a n ç o d e
e n e r g i a , p o s s u i u m a s o l u ç ã o a n a l í t i c a :
1
RA
t
E eRFth 1
P a r a s i m u l a r e s t e m o d e l o , b a s t a e s c o l h e r o s v a l o r e s d a s
c o n s t a n t e s R , A e F E , d a s c o n d i ç õ e s i n i c i a i s h 0 e t 0 .
A s i m u l a ç ã o d a s o l u ç ã o a n a l í t i c a d o m o d e l o d o t a n q u e d e
n í v e l é m o s t r a d a a s e g u i r .
( 7 )
Modelagem simples de um tanque de nível
EQ/UFRJ
% Definição das constantes do modelo
R = 1; % h/m2
A = 2; % m2
Fe = 10; % m3/h
% Tempo de simulação
t = 0.0 : 0.01 : 10.0; % h
% Simulação da altura de líquido
h = R*Fe*(1 - exp(-t/(R*A))); % m
% Visualização da simulação
plot(t,h);
title('Simulação do tanque de nível');
xlabel('Tempo (h)');
ylabel('Altura (m)');
Modelagem simples de um tanque de nível
EQ/UFRJ
Verifique a consistência do calculo: a matriz “h” gerada também deve ser 1x1000, já que cada instante “t” gerou um valor “h”.
É sempre útil conferir a dimensão das variáveis, principalmente a medida que as
rotinas forem tornando-se complexas.
Dica!
Modelagem simples de um tanque de nível
EQ/UFRJ
Exemplo2
EQ/UFRJ
Muitas vezes é muito trabalhoso, ou mesmo impossível, encontrar a solução analítica para o conjunto de equações diferenciais. Nesse caso
temos que simular usando solução numérica das equações diferenciais. Vamos assumir que o
modelo do exemplo 1 não tivesse solução analítica, e então usar o Matlab para estudar o
comportamento da altura do nível com o tempo. A equação diferencial será:
M o d e l a g e m & D i n â m i c a d e P r o c e s s o s
M o d e l o s s i m p l e s - o t a n q u e d e n í v e l
F r e q ü e n t e m e n t e , c o n s i d e r a - s e a v a z ã o d e s a í d a d o t a n q u e
p r o p o r c i o n a l à a l t u r a d a c o l u n a d e l í q u i d o é i n v e r s a m e n t e
p r o p o r c i o n a l a u m a r e s i s t ê n c i a a o e s c o a m e n t o ( R ) :
1
Rh
F
Rh
FAdt
tdhE
1
L o g o ,
( 5 )
( 6 )
Modelagem de um tanque de nível via ED
EQ/UFRJ
% Definição das constantes do modeloR = 1; % h/m2A = 2; % m2Fe = 10; % m3/h% Tempo de simulaçãot = 0.0 : 0.01 : 10.0; % h% Simulação da altura de líquido[t,h] = ode45('dhdt',t, 0,[],[R A Fe]);% Visualização da simulaçãoplot(t,h);title('Simulação do tanque de nível');xlabel('Tempo (h)');ylabel('Altura (m)');
function dh = dhdt(t,h,flag,par)R = par(1);A = par(2);Fe = par(3);dh = (Fe-(h/R))/A;
Modelagem de um tanque de nível via ED
EQ/UFRJ
Nesse caso temos uma equação diferencial, então deveremos usar uma função Matlab específica para a
resolução de eq. diferenciais. No caso temos a ODE45. A função ODE45 implementa um esquema de solução de
sistemas de EDO’s por método de Runge-Kutta de ordem média (consulte o help sobre ODE45 para
maiores detalhes).
[t,h] = ode45('dhdt',t, 0,[],[R A Fe]);
Modelagem de um tanque de nível via ED
EQ/UFRJ
Os parâmetros enviados entre parênteses são aqueles que devemos passar para a ODE45:
-1º argumento de ode45 é uma string contendo o nome do
arquivo .m com as equações diferenciais. Neste caso, o arquivo chama-se dhdt.m.
-2º argumento é um vetor que pode conter (i) dois elementos:
os tempos inicial e final da integração, ou (ii) todos os valores de tempo para os quais deseja-se conhecer o valor da variável
integrada.
-3º argumento é o vetor contendo as condições iniciais das variáveis dependentes das EDO’s. Os valores dos elementos do vetor de condições iniciais precisam estar na mesma ordem em
que as variáveis correspondentes são calculadas na função passada como 1º argumento para ode45 (neste caso, dhdt.m). Nesse caso em particular só temos uma variável dependente,
assim temos uma única condição inicial.
Modelagem de um tanque de nível via ED
EQ/UFRJ
-4º argumento é o vetor de opções de ode45. Há várias opções do método que podem ser ajustadas. Entretanto, não deseja-se alterar os valores-padrão. Neste caso, é passado um vetor vazio, apenas para marcar o lugar das opções.
-5º argumento é um vetor contendo parâmetros de entrada para a função dhdt.m. Observe que a função .m deve ler
esses parâmetros na ordem correta (recebe como variável local “par”).
Os resultados da simulação são obtidos nos dois parâmetros entre colchetes (t , h).
Modelagem de um tanque de nível via ED
EQ/UFRJ
A codificação do arquivo .m segue o mesmo formato já explicado para funções porém com algumas particularidades.
No caso específico de um arquivo .m que deve ser chamado por uma função de solução EDO’s (todas as ODExx), a declaração
deste arquivo deve seguir a sintaxe:
function dy = nomefun(t, y, flag, arg1, ..., argN)
onde •dy é o valor da(s) derivada(s) retornadas•t e y são as variáveis independente e dependente, respectivamente.•Opcional: caso deseje-se receber outros parâmetros, a função deve receber um argumento marcador de lugar chamado flag. Após este, ela recebe quaisquer outros parâmetros.
Modelagem de um tanque de nível via ED
EQ/UFRJ
Exemplo3
EQ/UFRJ
M o d e l a g e m & D i n â m i c a d e P r o c e s s o s
E x e m p l o 3 T a n q u e d e a q u e c i m e n t o
1
h
F E , T E
F , T
A
T h
T h
h
F E , T E
F , T
A
T h
T h
C o n s i d e r a n d o c o n s t a n t e s a v a z ã o d e a l i m e n t a ç ã o F E , a
t e m p e r a t u r a T h , o c o e fi c i e n t e g l o b a l d e t r a n s f e r ê n c i a d e c a l o r U e
a s p r o p r i e d a d e s d o fl u i d o e C p e q u e o s i s t e m a e s t á s u j e i t o à s
c o n d i ç õ e s i n i c i a i s :
00 hth 00 TtT
Modelagem de um tanque de aquecimento
EQ/UFRJ
M o d e l a g e m & D i n â m i c a d e P r o c e s s o s
M o d e l o s s i m p l e s - t a n q u e d e a q u e c i m e n t o
C o m o n o c a s o a n t e r i o r , o b a l a n ç o d e m a s s a p o d e s e r e s c r i t o
c o m o :
1
Rh
FAdt
tdhE
1( 6 )
O b a l a n ç o d e e n e r g i a é e s c r i t o c o m o :
QFHHFdtVTd
C EEp ( 8 )
M o d e l a g e m & D i n â m i c a d e P r o c e s s o s
M o d e l o s s i m p l e s - t a n q u e d e a q u e c i m e n t o
1
dtdh
Tdt
dThA
dtdV
Tdt
dTV
dtVTd
( 9 )
QFHHFRh
FA
Tdt
dThAC EEEp
( 1 0 )
p
E
p
hEE
CU
AF
TC
UTA
TFhdt
dT
1( 1 1 )
Modelagem de um tanque de aquecimento
EQ/UFRJ
Matlab Real
dy(1) dh/dt
y(1) h
dy(2) dT/dt
y(2) T
Traduzindo as equações diferenciais para o Matlab:
Modelagem de um tanque de aquecimento
EQ/UFRJ
% Definição das constantes do modeloR = 1; % h/m2A = 2; % m2Fe = 10; % m3/hCp = 0.75; % kJ/(kg . K)Ro = 1000; % kg/m3U = 150; % kJ/(m2 . s . K)Te = 530; % K Th = 540; % K % Tempo de simulaçãot = 0.0 : 0.01 : 10.0; % h % Simulação do modelo[t,y]=ode45('dydt',t,[(5/A) Th],[],[U A Ro Cp Fe R Te Th]);
Modelagem de um tanque de aquecimento
EQ/UFRJ
% Visualização da simulaçãofigure(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)');
Modelagem de um tanque de aquecimento
EQ/UFRJ
A única modificação em relação ao exemplo anterior é que estamos passando duas condições iniciais (pois
existem duas variáveis dependentes):
[t,y]=ode45('dydt',t,[(5/A) Th],[],[U A Ro Cp Fe R Te Th]);
Modelagem de um tanque de aquecimento
EQ/UFRJ
A função .m tem o código apresentado a seguir:
function dy = dydt(t,y,flag,par);U = par(1);A = par(2);Ro = par(3);Cp = par(4);Fe = par(5);R = par(6);Te = par(7);Th = par(8);dy(1) = (Fe-(y(1)/R))/A;dy(2) = (1/y(1))* ( ((Fe*Te/A)+(U*Th/(Ro*Cp)))... - ( y(2)*((Fe/A)+(U/(Ro*Cp)))) );dy = dy(:);
Modelagem de um tanque de aquecimento
EQ/UFRJ
O vetor dy é criado como vetor linha (dy(1)) e (dy(2)). Porém temos que retornar como vetor coluna.
Use o comando:matriz coluna = matriz linha (:)
Dica!
Modelagem de um tanque de aquecimento
EQ/UFRJ
figure(1);plot(t,y(:,1));title('Tanque de aquecimento');xlabel('Tempo (h)'); ylabel('Altura (m)');
Quando for fazer os gráficos no programa principal lembre-se que a primeira coluna de “dy”
refere-se a “h” e a segunda a “T”. Então para graficar h vs. tempo faça:
Dica!
Modelagem de um tanque de aquecimento
EQ/UFRJ
Exemplo4
EQ/UFRJ
Aplicando perturbações no CSTR
EQ/UFRJ
As equações diferenciais que descrevem o processo são:
O modelo matemático do nosso reator CSTR tende ao estado estacionário. Ou seja, seus parâmetros tendem a ficar constantes no tempo infinito. Seria interessante introduzir perturbações em
algumas variáveis e observar como o reator se comporta.
Aplicando perturbações no CSTR
EQ/UFRJ
Uma perturbação degrau em uma entrada u do sistema é tal que:
u = u0 , t < tdegrauu = 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.
Aplicando perturbações no CSTR
EQ/UFRJ
% Definição das constantes do modeloU =50; % BTU/(h.ft2.R)A = 120; % ft2DH = -30000; % BTU/lbmRo = 50; % lb/ft3Cp = 0.75; % BTU/(lbm.R)E = 30000; % BTU/lbm R = 1.99; % BTU/(lbm.R)k0 = 7.08e10; % 1/h V =48; % ft3Te = 580; %R Th = 550; %RFe = 18; % ft3/h Cre = 0.48; % lbm/ft3 % Tempo de simulaçãot = 0.0 : 0.01 : 10.0; %h % Perturbação na vazão de entradatd = 5.0; %Tempo onde ocorre o degraufd = 2*Fe; %Valor assumido após o degrau
Programa principal:
continua...
Aplicando perturbações no CSTR
EQ/UFRJ
% Condições iniciaisCr0 = 0.16; % lbm/ft3T0 = 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çãofigure(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)');
Programa principal (continuação):
Aplicando perturbações no CSTR
EQ/UFRJ
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);
Função “dcstrdeg”:
continua...
Aplicando perturbações no CSTR
EQ/UFRJ
%Verifica a ocorrência 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(:);
Função “dcstrdeg” (continuação):
Aplicando perturbações no CSTR
EQ/UFRJ
Exemplo5
EQ/UFRJ
Simulação em batelada
Uma das grandes vantagens no uso de ferramentas computacionais é reduzir o nosso esforço repetitivo, tarefa para a qual o computador é muito eficiente. Supomos que
temos um processo no qual gostaríamos de testar uma série de condições iniciais. Para cada nova condição inicial
teríamos de refazer todas as contas. Um esforço enorme! As linguagens de programação, e o Matlab em particular,
resolvem esse problema facilmente usando o já apresentado comando “for”.
Usaremos o mesmo reator CSTR do exemplo anterior.
EQ/UFRJ
% Definição das constantes do modeloU =50; % BTU/(h.ft2.R)A = 120; % ft2DH = -30000; % BTU/lbmRo = 50; % lb/ft3Cp = 0.75; % BTU/(lbm.R)E = 30000; % BTU/lbm R = 1.99; % BTU/(lbm.R)k0 = 7.08e10; % 1/h V =48; % ft3Te = 580; %R Th = 550; %RFe = 18; % ft3/h Cre = 0.48; % lbm/ft3 % Tempo de simulaçãot = 0.0 : 0.01 : 10.0; %h % Condições iniciaisCr0 = [0.16 0.32 0.48 0.64]; % lbm/ft3T0 = 603; %R
Programa principal:
continua...
Simulação em batelada
EQ/UFRJ
% Simulação e visualização do modelo em bateladacor = '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]); % 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;
Programa principal (continuação):
continua...
Simulação em batelada
EQ/UFRJ
figure(1); legend(leg);figure(2); legend(leg);hold off;
Programa principal (continuação):
A seqüência de cores usadas é dada pelo vetor “cor”, “letra a letra” através da flag. Consulte o comando “plot” para detalhes.
Dica!
Simulação em batelada
EQ/UFRJ
Carlos André Vaz Junior
cavazjunior@gmail.com
http://www.eq.ufrj.br/links/h2cin/carlosandre
top related