You are on page 1of 126

Carlos Andr Vaz Junior

cavj@bol.com.br
http://www.eq.ufrj.br/links/h2cin/carlosandre

Engenheiros e Qumicos

Engenheiro
Qumico

Qumico Industrial

Simulao e Modelagem de sistemas complexos


Aquisio e Anlise de dados amostrais
Projeto e estudo de plantas qumicas
Resoluo sistemtica e lgica de problemas

Linguagens de Programa

Linguagens de Programao
Fortran

Visual Basic

Pascal

C++

Java

Matlab

Buscando Solues

Engenheiro Qumico

Qumico Industrial

Simulao e Modelagem de sistemas complexos


Aquisio e Anlise de dados amostrais
Projeto e estudo de plantas qumicas

Linguagens de Programao

Resoluo sistemtica e lgica de problemas


Fortran

Visual Basic

Pascal

C++

Java

Matlab

Matlab: Ferramenta da Engenha

Engenheiro Qumico

Qumico Industrial

Simulao e Modelagem de sistemas complexos


Aquisio e Anlise de dados amostrais
Projeto e estudo de plantas qumicas

Linguagens de Programao

Resoluo sistemtica e lgica de problemas


Fortran

Visual Basic

Pascal

C++

Java

Matlab

O Mundo Matlab

Mais de 1 milho de resultados

Ajuda

?
http://newsreader.mathworks.com

Livros

Ambiente de Trabalho

Ambiente de Trabalho

Command Window

Command Window

Agora a = 2, fao tudo de novo?!

Arquivo de Programao: m-fi

Current Directory

Current Directory

Criando variveis

Tipos Bsicos

Matriz

Char Array

Case Sensitive!

Estrutura

CaSe SeNsItIvE!

Tipo Matriz
Criando uma matriz:

Tipo Char Array


Criando um char array:

Tipo Estrutura

Banco de Dados da Turma:


Alunos: Carla, Joo, Bruno, Luis, Marcela
Professor: Marcelo
Horrio: 13h
Sala: 221

Estrutura:
turma.alunos.nomes=strvcat( 'carla',joao','bruno', ...
'luis', 'marcela );
turma.professor.nome=(Marcelo)
turma.horario=1300
turma.sala=221

Comando who e whos

Comando who e whos

Dicas!

Use ; para evitar que o resultado aparea na tela.


Use A=0:0.5:10 para gerar matrizes com dados em
seqncia.
Use clear A para apagar a varivel A.
Use clear all para apagar todas as variveis
armazenadas.
Use size(A) para identificar as dimenses da matriz. A
maior
dimenso dada pelo comando length(A)

Dicas
!

Operaes Matemticas Simple

i) Soma e subtrao: soma (ou subtrai) elemento por elemento


da matriz.
A+B
A-B

ii) Multiplicao e Diviso de matrizes: ateno s regras da


lgebra, pois as dimenses das matrizes tm que ser
coerentes!
A*B
A/B

iii) Multiplicao e diviso elemento por elemento:


A .* B
A ./ B

Operaes Matemticas Simple

iv) Matriz Transposta:


A

v) Cria Matriz Identidade:


eye(nmero de linhas, nmero de colunas)

vi) Cria Matriz Zeros:


zeros(nmero de linhas, nmero de colunas)
vii) Cria Matriz Uns:
ones(nmero de linhas, nmero de colunas)

viii) Cria Matriz Randmica (composta de nmeros


aleatrios):
rand(nmero de linhas, nmero de colunas)

Operaes Matemticas Simple

ix) Determinante:
det(matriz)

x) Inversa:
inv(matriz)

xi) Dimenses da matriz:


size(matriz)
lenght(matriz)
numel(matriz)

Veja tambm: flipud e fliplr

Referenciar um Elemento de uma Ma

13

10

14

11

15

12

16

Elemento = Matriz(2,3) ou Matriz(10)

Arquivo Function

Escopo das Variveis

Programa Principal / Workspace


global C
C=100
D=22

Funo Alfa
A=1
B=2
global C
C=100

Funo Beta
E=15
F=55
C=23

Exemplo Rpido

Achando a posio do menor valor de uma matriz:


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);

%Forma condensada:
[i,j]=find(x==(min(min(x))));

Exemplo Rpido

Achando o zero da funo:


X = fzero('sin',2)

funo

estimativa inicial

Veja tambm: fsolve, fmin, fminsearch,


fminbnd, roots

Estruturas Lgicas

if:
if I == J
disp('so iguais!');
elseif (I-J) > 0
disp('I maior que J')
else
disp('I menor que J')
end

Estruturas Lgicas

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 Lgicas

While:

while I < 10,


disp(oi);
I=I+1;
end

Manipule o ponteiro I na rotina executada


pelo while

Estruturas Lgicas

For:

for J = 1:100,
A(1,J) = 1/(I+J-1);
end

Incremento automtico do ponteiro J


a cada loop

Proteo Contra Erros

Try:

try
I = 15
J = teste
A= 1/(I+J-1);
catch
disp(Erro na diviso)
end

Encerrando uma Rotina

Break:

i=0;
while i < 100,
i=i+1;
disp(i)
if i>10,
break
end
end

Grficos
>> figure(1)

>> figure(2)

>>
t=0:0.01:10;
>> y=sin(t);
>> plot(t,y)

>> z=cos(t);
>> plot(t,z)

Grficos
>> figure(3)

>> plot(t,y)

>> subplot(1,2,1)

>> subplot(1,2,2)
>> plot(t,z)

Grficos

>> 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])

Grficos

>>
>>
>>
>>
>>

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')

Grficos - Tortas
>> 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'
)

Grficos - Tortas
>> 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'
)

Grficos - Barras

>> x = -2.9:0.2:2.9;
>> bar(x,exp(-x.*x))
>> colormap hsv

Grficos - Superfcie

Grficos - Superfcie

%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 restrio para usar s a base do triangulo
%onde existe consistncia fsica (o que nao tem vira "Not a Number
iz=find(Z<0);Z(iz)=nan;

Grficos - Superfcie
Composio
(3 componentes)

%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 restrio para usar s a base do triangulo
%onde existe consistncia fsica (o que no tem vira "Not a Number
iz=find(Z<0);Z(iz)=nan;

Grficos - Superfcie
Alguns Z so
negativos! No pode!

%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 restrio para usar s a base do triangulo
%onde existe consistncia fsica (o que no tem vira "Not a Number
iz=find(Z<0);Z(iz)=nan;

Grficos - Superfcie

v1=zeros(size(X));
for i=1:length(X)^2,
x1=X(i);
x2=Y(i);
x3=Z(i);
%calculo do v1 (vertical)
vv1=(x1*log(x1))+(x2*log(x2))+(x3*log(x3));
v1(i)=vv1;
end

%grfico da superfcie
colormap jet
figure(1);surf(X,Y,v1); rotate3d on; shading interp;
xlabel('X1');ylabel('X2');zlabel('DeltaGi/RT');

Grficos - Superfcie

v1=zeros(size(X));

Eixo Vertical

for i=1:length(X)^2,
x1=X(i);
x2=Y(i);
x3=Z(i);
%calculo do v1 (vertical)
vv1=(x1*log(x1))+(x2*log(x2))+(x3*log(x3));
v1(i)=vv1;
end

%grafico da superfice
colormap jet
figure(1);surf(X,Y,v1); rotate3d on; shading interp;
xlabel('X1');ylabel('X2');zlabel('DeltaGi/RT');

Grficos - Superfcie

v1=zeros(size(X));
for i=1:length(X)^2,
x1=X(i);
x2=Y(i);
x3=Z(i);
%calculo do v1 (vertical)
vv1=(x1*log(x1))+(x2*log(x2))+(x3*log(x3));Desenha a
v1(i)=vv1;
superfcie
end

%grafico da superfice
colormap jet
figure(1);surf(X,Y,v1); rotate3d on; shading interp;
xlabel('X1');ylabel('X2');zlabel('DeltaGi/RT');

Grficos - Superfcie

v1=zeros(size(X));
for i=1:length(X)^2,
x1=X(i);
x2=Y(i);
x3=Z(i);
%calculo do v1 (vertical)
vv1=(x1*log(x1))+(x2*log(x2))+(x3*log(x3));Aciona a
v1(i)=vv1;
rotao da
end

figura

%grafico da superfice
colormap jet
figure(1);surf(X,Y,v1); rotate3d on; shading interp;
xlabel('X1');ylabel('X2');zlabel('DeltaGi/RT');

Grficos - Superfcie

v1=zeros(size(X));
for i=1:length(X)^2,
x1=X(i);
x2=Y(i);
x3=Z(i);
%calculo do v1 (vertical)
vv1=(x1*log(x1))+(x2*log(x2))+(x3*log(x3));
v1(i)=vv1;
end

Superfcie
homogenia

%grafico da superfice
colormap jet
figure(1);surf(X,Y,v1); rotate3d on; shading interp;
xlabel('X1');ylabel('X2');zlabel('DeltaGi/RT');

Grficos - Superfcie

Grficos

Use [x,y]=ginput(2) para capturar dois pontos no g


Use close all para fechar todas as figuras
Use clf para apagar a figura atual

Dica!

Exemplos

Exemplo
Otimizador

Otimizao de Parmetros

Dados os pontos experimentais:

Qual a melhor curva que ajusta esses pontos?

Otimizao de Parmetros

Testando a distribuio normal:

ycalc= a*exp((-(x-b).^2)./c );
Programa principal:
close all
clear all
global y tempo

%Dados Experimentais:
tempo=[0 1
y=

[0 1

2 3 4 5
3

6 7

9 10

5 9 11 9 5 3 1 0

11 ];
0 ];

(...)

Otimizao de Parmetros
Programa principal:

%Modelo a ser ajustado:


%Parametros a serem ajustados:
a=input('a = ');
b=input('b = ');
c=input('c = ');
X0=[a b c];

%Chama o otimizador:
Xotimo = fminsearch('objet',X0)

Otimizao de Parmetros

Funo Objetivo.m:
function [fobj,g] = objet(X,y,tempo)
global y tempo
g=[];
%Recebe os parametros a serem ajustados:
a

= X(1);

b = X(2);
c

= X(3);

x=tempo;

%Calcula o modelo em cada instante de tempo:


ycalc= a*exp((-(x-b).^2)./c ); % <---- distribuicao normal

(...)

Otimizao de Parmetros

Funo Objetivo.m:
%Calcula o erro (diferenca entre o experimental
% e o modelo a cada instante de tempo)

e=y-ycalc;
e=e(:);
n=length(e);
w=eye(n);

fobj=e'*w*e;
% o erro eh um numero.

%Grafico comparando experimental e modelo:


plot(tempo,y,'*',tempo,ycalc,'m')
drawnow

Otimizao de Parmetros

Exemplo
1

Modelagem simples de um tanque de nv


Modelagem & Dinmica de Processos
Exemplo 1:
Modelos simples - o tanque de nvel
A

FE

Considerando constantes a vazo de alimentao FE, a


densidade e a temperatura T, e que o sistema est sujeito
condio inicial:

h t 0 h0

(1)
1

Modelagem simples de um tanque de nv

Modelagem & Dinmica de Processos


Modelos simples - o tanque de nvel
pode-se escrever o balano de massa do sistema

dm t
FE F
dt

(2)

dm t
dh t
A
dt
dt

(3)

dh t
1
FE F
dt
A

(4)

Ainda,

e, portanto,

Modelagem simples de um tanque de nv


Modelagem & Dinmica de Processos
Modelos simples - o tanque de nvel
Freqentemente, considera-se a vazo de sada do tanque
proporcional

altura

da

coluna

de

lquido

inversamente

proporcional a uma resistncia ao escoamento (R):

h
R

(5)

Logo,

dh t 1
h
FE
dt
A
R

(6)

Modelagem simples de um tanque de nv


Modelagem & Dinmica de Processos
Modelos simples - o tanque de nvel
Este modelo simples de um tanque de nvel, sem balano de
energia, possui uma soluo analtica:

h t RFE 1 e

t
RA

(7)

Para simular este modelo, basta escolher os valores das


constantes R, A e FE, das condies iniciais h0 e t0.
A simulao da soluo analtica do modelo do tanque de
nvel mostrada a seguir.
1

Modelagem simples de um tanque de nv

% Definio das constantes do modelo


R = 1;
% h/m2
A = 2;
% m2
Fe = 10;
% m3/h
% Tempo de simulao
t = 0.0 : 0.01 : 10.0;
%h
% Simulao da altura de lquido
h = R*Fe*(1 - exp(-t/(R*A)));
%m
% Visualizao da simulao
plot(t,h);
title('Simulao do tanque de nvel');
xlabel('Tempo (h)');
ylabel('Altura (m)');

Modelagem simples de um tanque de nv

Verifique a consistncia do calculo: a


matriz h gerada tambm deve ser 1x1000,
j que cada instante t gerou um valor h.
sempre til conferir a dimenso das
variveis, principalmente a medida que as
rotinas forem tornando-se complexas.

Dica!

Exemplo
2

Modelagem de um tanque de nvel via ED

Modelagem & Dinmica de Processos


Muitas vezes muito trabalhoso, ou mesmo
Modelos simples - o tanque de nvel
impossvel, encontrar a soluo analtica para o
conjunto
de equaes
diferenciais.
Freqentemente,
considera-se
a vazoNesse
de sadacaso
do tanque
temos
que simular
usando
soluo
numrica
das
proporcional
altura
da coluna
de lquido
inversamente
equaes
diferenciais.
assumir
proporcional
a uma resistnciaVamos
ao escoamento
(R): que o
modelo do exemplo 1 no tivesse soluo
h
analtica, e ento usar o Matlab
para estudar o
(5)
F
comportamento da altura do
nvel
com
o
tempo.
A
R
equao diferencial ser:
Logo,

dh t 1
h
FE
dt
A
R

(6)

Modelagem de um tanque de nvel via ED

% Definio das constantes do


modelo
R = 1;
% h/m2
A = 2;
% m2
Fe = 10; % m3/h
% Tempo de simulao
t = 0.0 : 0.01 : 10.0; % h
% Simulao da altura de lquido
[t,h] = ode45('dhdt',t, 0,[],[R A
Fe]);
% Visualizao da simulao
plot(t,h);
title('Simulao do tanque de
nvel');
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 nvel via ED

Nesse caso temos uma equao diferencial, ento


deveremos usar uma funo Matlab especfica para a
resoluo de eq. diferenciais. No caso temos a ODE45. A
funo ODE45 implementa um esquema de soluo de
sistemas de EDOs por mtodo de Runge-Kutta de
ordem mdia (consulte o help sobre ODE45 para
maiores detalhes).
[t,h] = ode45('dhdt',t, 0,[],[R A Fe]);

Modelagem de um tanque de nvel via ED

Os parmetros enviados entre parnteses so aqueles


que devemos passar para a ODE45:

-1 argumento de ode45 uma string contendo o nome do


arquivo .m com as equaes 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 integrao, ou (ii) todos os valores de
tempo para os quais deseja-se conhecer o valor da varivel
integrada.
-3 argumento o vetor contendo as condies iniciais das
variveis dependentes das EDOs. Os valores dos elementos do
vetor de condies iniciais precisam estar na mesma ordem em
que as variveis correspondentes so calculadas na funo
passada como 1 argumento para ode45 (neste caso, dhdt.m).
Nesse caso em particular s temos uma varivel dependente,
assim temos uma nica condio inicial.

Modelagem de um tanque de nvel via ED

-4 argumento o vetor de opes de ode45. H vrias


opes do mtodo que podem ser ajustadas. Entretanto, no
deseja-se alterar os valores-padro. Neste caso, passado
um vetor vazio, apenas para marcar o lugar das opes.

-5 argumento um vetor contendo parmetros de entrada


para a funo dhdt.m. Observe que a funo .m deve ler
esses parmetros na ordem correta (recebe como varivel
local par).

Os resultados da simulao so obtidos nos dois


parmetros entre colchetes (t , h).

Modelagem de um tanque de nvel via ED

A codificao do arquivo .m segue o mesmo formato j


explicado para funes porm com algumas particularidades.
No caso especfico de um arquivo .m que deve ser chamado por
uma funo de soluo EDOs (todas as ODExx), a declarao
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 so as variveis independente e dependente,
respectivamente.
Opcional: caso deseje-se receber outros parmetros, a
funo deve receber um argumento marcador de lugar
chamado flag. Aps este, ela recebe quaisquer outros
parmetros.

Exemplo
3

Modelagem de um tanque de aqueciment

Modelagem & Dinmica de Processos


Exemplo 3
Tanque de aquecimento
Th

FE ,TE

Th

F,T

Considerando constantes a vazo de alimentao FE, a


temperatura Th, o coeficiente global de transferncia de calor U e
as propriedades do fluido e Cp e que o sistema est sujeito s
condies iniciais:

h t 0 h0

T t 0 T0
1

Modelagem de um tanque de aqueciment

Modelagem & Dinmica de Processos


Modelagem & Dinmica de Processos

Modelos simples - tanque de aquecimento


Modelos simples - tanque de aquecimento

Como no caso anterior, o balano de massa pode ser escrito

d :VT
como
dt

dT
dV
dh
dT
T
A h
T

dt
dt
dt
dt
h

dh t 1

dt

FE

dT T
h
C p A h
FE FE HE FH Q
dt de A
R como:

O balano
energia
escrito

VTT UT
FE
dT C1 d F
U
E E Fh H

FH

p
E
E

A
dt
h dtA
C p
C p

(9)

(6)
(10)

(8)
(11)

Modelagem de um tanque de aqueciment

Traduzindo as equaes diferenciais para o Matlab:


Matlab

Real

dy(1)

dh/dt

y(1)

dy(2)

dT/dt

y(2)

Modelagem de um tanque de aqueciment

% Definio das constantes do modelo


R = 1;
% h/m2
A = 2;
% m2
Fe = 10;
% m3/h
Cp = 0.75;
% kJ/(kg . K)
Ro = 1000; % kg/m3
U = 150;
% kJ/(m2 . s . K)
Te = 530;
%K
Th = 540;
%K

% Tempo de simulao
t = 0.0 : 0.01 : 10.0; % h

% Simulao do modelo
[t,y]=ode45('dydt',t,[(5/A) Th],[],[U A Ro Cp Fe R Te Th]);

Modelagem de um tanque de aqueciment

% 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)');

Modelagem de um tanque de aqueciment

A nica modificao em relao ao exemplo anterior


que estamos passando duas condies iniciais (pois
existem duas variveis dependentes):
[t,y]=ode45('dydt',t,[(5/A) Th],[],[U A Ro Cp Fe R Te
Th]);

Modelagem de um tanque de aqueciment

A funo .m tem o cdigo 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 aqueciment

O vetor dy criado como vetor linha (dy(1)) e


(dy(2)). Porm temos que retornar como vetor
coluna.

Use o comando:
matriz coluna = matriz linha (:)

Dica!

Modelagem de um tanque de aqueciment

Quando for fazer os grficos no programa


principal lembre-se que a primeira coluna de dy
refere-se a h e a segunda a T. Ento para
graficar h vs. tempo faa:
figure(1);
plot(t,y(:,1));
title('Tanque de aquecimento');
xlabel('Tempo (h)');
ylabel('Altura (m)');

Dica!

Exemplo
4

Aplicando perturbaes no
CSTR

Aplicando perturbaes no
CSTR
As equaes diferenciais que descrevem
o processo so:

O modelo matemtico do nosso reator CSTR tende ao estado


estacionrio. Ou seja, seus parmetros tendem a ficar constantes
no tempo infinito. Seria interessante introduzir perturbaes em
algumas variveis e observar como o reator se comporta.

Aplicando perturbaes no
CSTR

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.

Aplicando perturbaes no
CSTR
Programa principal:
% 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

continua...

Aplicando perturbaes no
CSTR
Programa principal (continuao):
% 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)');

Aplicando perturbaes no
CSTR
Funo dcstrdeg:
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);

continua...

Aplicando perturbaes no
CSTR
Funo dcstrdeg (continuao):
%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(:);

Exemplo
5

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 srie
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.

Usaremos o mesmo reator CSTR do exemplo anterior.

Simulao em
batelada
Programa principal:
% 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

continua...

Simulao em
batelada
Programa principal (continuao):
% 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;
continua...

Simulao em
batelada
Programa principal (continuao):
figure(1); legend(leg);
figure(2); legend(leg);
hold off;

A seqncia de cores usadas dada pelo


vetor cor, letra a letra atravs da flag.
Consulte o comando plot para detalhes.

Dica!

Exemplo
6

Mundo Simulink

A programao no Simulink segue uma interfa


grfica muito intuitiva e fcil de usar:

Ambiente de Trabalho Simulink

rea de programao:

Exemplo

Exemplo Comportamento Senoidal

Nosso primeiro exemplo:


Avaliar o comportamento da funo
senoidal
ao longo do tempo.
Biblioteca
Sources

Biblioteca
Sinks

Exemplo Comportamento Senoidal

Simulando...

D
I
C
A

O parmetro de entrada est em radianos!


E, no caso, a entrada o prprio tempo de simulao.

Exemplo Comportamento Senoidal

Agora quero somar 1.5 ao valor da funo:

Biblioteca
Sources

Biblioteca
Math

Exemplo Comportamento Senoidal


Ajuste automtico da escala do grfico:

Exemplo Comportamento Senoidal


Ajuste manual da escala do grfico:

Exemplo Comportamento Senoidal


Agora quero multiplicar o resultado por -1:
Biblioteca
Math

Exemplo Comportamento Senoidal


Configurao do bloco Product:

Nmero de termos
da multiplicao.

Multiplicao
de matrizes ou
termo a termo.

Exemplo Comportamento Senoidal


Obter o mdulo do resultado:
Biblioteca
Math

Exemplo Comportamento Senoidal


Alterando os parmetros de simulao:

Tempo inicial

Tempo final

Exemplo Comportamento Senoidal

Usando tempo inicial igual a 10 e final igual a 50:

Tempo
inicial

Tempo
final

Exemplo Comportamento Senoidal


Caso a curva esteja dentada,
aumente o Fator de Refinamento:

Exemplo Comportamento Senoidal


Criando um sub-sistema:

Sub-sistema

Exemplo Comportamento Senoidal


Editando um sub-sistema:

Sub-sistema

Exemplo Comportamento Senoidal


Algumas vezes mais fcil tratar os dados gerados
no ambiente Matlab.
Usamos o bloco to workspace:

Biblioteca
Sinks

Cria a varivel
A no workspace

Exemplo Comportamento Senoidal

Configurao do bloco To Workspace:

Cria a varivel
A no workspace

Formato da varivel

Exemplo Comportamento Senoidal


No Workspace...

>> plot(tout,A)

Exemplo Comportamento Senoidal


Usando uma funo trigonomtrica:

Biblioteca
Source

Biblioteca
Math

Exemplo Comportamento Senoidal


Ganho (produto):

Biblioteca
Math

Exemplo Comportamento Senoidal

Rodando um bloco:

CTRLR

Exemplo Comportamento Senoidal


Combinando dois sinais:
Entre outras aplicaes, permite exibir duas
ou mais curvas no mesmo grfico.

Bloco MUX
Biblioteca Signals &

Exemplo Comportamento Senoidal


Dois ou mais grficos:

Exemplo Comportamento Senoidal


Dois ou mais grficos:
Configurando...

Carlos Andr Vaz Junior


cavj@bol.com.br
http://www.eq.ufrj.br/links/h2cin/carlosandre

You might also like