Sunteți pe pagina 1din 98

M

A
T
L
A
B


B

s
i
c
o

Carlos Andr Vaz Junior
cavazjunior@gmail.com
http://www.eq.ufrj.br/links/h2cin/carlosandre
M
A
T
L
A
B


B

s
i
c
o

Mais de 1 milho de resultados
M
A
T
L
A
B


B

s
i
c
o

?
http://newsreader.mathworks.com
M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

Agora a = 2, fao tudo de novo?!
M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

Char Array
Matriz
Tipos Bsicos
Case Sensitive!
Estrutura
CaSe SeNsItIvE!
M
A
T
L
A
B


B

s
i
c
o

Criando uma matriz:
M
A
T
L
A
B


B

s
i
c
o

Criando um char array:
M
A
T
L
A
B


B

s
i
c
o

Estrutura:
turma.alunos.nomes=strvcat( 'carla',joao','bruno', ...
'luis', 'marcela );
turma.professor.nome=(Marcelo)
turma.horario=1300
turma.sala=221
Banco de Dados da Turma:
Alunos: Carla, Joo, Bruno, Luis, Marcela
Professor: Marcelo
Horrio: 13h
Sala: 221
M
A
T
L
A
B


B

s
i
c
o

Comando who e whos
M
A
T
L
A
B


B

s
i
c
o

Use A=0:0.5:10 para gerar matrizes com dados em seqncia.
Use ; para evitar que o resultado aparea na tela.
Dicas!
Use clear A para apagar a varivel A.
Use size(A) para identificar as dimenses da matriz. A maior
dimenso dada pelo comando length(A)
Use clear all para apagar todas as variveis armazenadas.
M
A
T
L
A
B


B

s
i
c
o

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
M
A
T
L
A
B


B

s
i
c
o

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)

M
A
T
L
A
B


B

s
i
c
o

ix) Determinante:
det(matriz)

x) Inversa:
inv(matriz)

xi) Dimenses da matriz:
size(matriz)
lenght(matriz)
numel(matriz)


Veja tambm: flipud e fliplr
M
A
T
L
A
B


B

s
i
c
o

1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
Elemento = Matriz(2,3) ou Matriz(10)
M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

A=1
B=2
global C
C=100


Funo Alfa
E=15
F=55
C=23

Funo Beta
Programa Principal / Workspace
global C
C=100
D=22
M
A
T
L
A
B


B

s
i
c
o


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

Achando a posio do menor valor de uma matriz:
%Forma condensada:
[i,j]=find(x==(min(min(x))));
M
A
T
L
A
B


B

s
i
c
o


X = fzero('sin',2)
Achando o menor valor de uma funo:
funo
estimativa inicial
Veja tambm: fsolve e fmin
M
A
T
L
A
B


B

s
i
c
o

if:
M
A
T
L
A
B


B

s
i
c
o

AND
OR
M
A
T
L
A
B


B

s
i
c
o

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
M
A
T
L
A
B


B

s
i
c
o

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
M
A
T
L
A
B


B

s
i
c
o

While:

while I < 10,
disp(oi);
I=I+1;
end
Manipule o ponteiro I na rotina executada
pelo while
M
A
T
L
A
B


B

s
i
c
o

For:

for J = 1:100,
A(1,J) = 1/(I+J-1);
end
Incremento automtico do ponteiro J
a cada loop
M
A
T
L
A
B


B

s
i
c
o

>> figure(1)
>> t=0:0.01:10;
>> y=sin(t);
>> plot(t,y)
>> figure(2)
>> z=cos(t);
>> plot(t,z)
M
A
T
L
A
B


B

s
i
c
o

Use close all para fechar todas as figuras
Dica!
Use clf para apagar a figura atual
Use [x,y]=ginput(2) para capturar dois pontos no grfico
M
A
T
L
A
B


B

s
i
c
o

>> figure(3)
>> subplot(1,2,1)
>> plot(t,y)
>> subplot(1,2,2)
>> plot(t,z)
M
A
T
L
A
B


B

s
i
c
o

>> 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])
M
A
T
L
A
B


B

s
i
c
o

>> 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')
M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

xx=0:0.01:1;
yy=0:0.01:1;
[X,Y]=meshgrid(xx,yy);

Z=exp(-0.5*(X.^2+Y.^2));

colormap jet
figure(1);surf(X,Y,Z); rotate3d on; shading interp;
M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

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

M
A
T
L
A
B


B

s
i
c
o

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

Composio
(3 componentes)
M
A
T
L
A
B


B

s
i
c
o

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

Alguns Z so
negativos! No pode!
M
A
T
L
A
B


B

s
i
c
o

vv1=(X.*log(X))+(Y.*log(Y))+(Z.*log(Z));

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


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

Exemplos
M
A
T
L
A
B


B

s
i
c
o

Exemplo
1
M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

Modelagem & Dinmica de Processos
Modelos simples - o tanque de nvel
pode-se escrever o balano de massa do sistema
1
( )
( ) F F
dt
t dm
E
=
( ) ( )
dt
t dh
A
dt
t dm
=
( )
( ) F F
A dt
t dh
E
=
1
Ainda,
e, portanto,
(2)
(3)
(4)
M
A
T
L
A
B


B

s
i
c
o

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):
1
R
h
F =
( )
|
.
|

\
|
=
R
h
F
A dt
t dh
E
1
Logo,
(5)
(6)
M
A
T
L
A
B


B

s
i
c
o

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:
1
( )
|
|
.
|

\
|
=

RA
t
E
e RF t h 1
Para simular este modelo, basta escolher os valores das
constantes R, A e F
E
, das condies iniciais h
0
e t
0
.
A simulao da soluo analtica do modelo do tanque de
nvel mostrada a seguir.
(7)
M
A
T
L
A
B


B

s
i
c
o

% 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)');
M
A
T
L
A
B


B

s
i
c
o

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!
M
A
T
L
A
B


B

s
i
c
o

Exemplo
2
M
A
T
L
A
B


B

s
i
c
o

Muitas vezes muito trabalhoso, ou mesmo impossvel,
encontrar a soluo analtica para o conjunto de
equaes diferenciais. Nesse caso temos que simular
usando soluo numrica das equaes diferenciais.
Vamos assumir que o modelo do exemplo 1 no tivesse
soluo analtica, e ento usar o Matlab para estudar o
comportamento da altura do nvel com o tempo. A
equao diferencial ser:
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):
1
R
h
F =
( )
|
.
|

\
|
=
R
h
F
A dt
t dh
E
1
Logo,
(5)
(6)
M
A
T
L
A
B


B

s
i
c
o

% 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;
M
A
T
L
A
B


B

s
i
c
o

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]);
M
A
T
L
A
B


B

s
i
c
o

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.

M
A
T
L
A
B


B

s
i
c
o

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

M
A
T
L
A
B


B

s
i
c
o

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.
M
A
T
L
A
B


B

s
i
c
o

Exemplo
3
M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

Modelagem & Dinmica de Processos
Modelos simples - tanque de aquecimento
Como no caso anterior, o balano de massa pode ser escrito
como :
1
( )
|
.
|

\
|
=
R
h
F
A dt
t dh
E
1
(6)
O balano de energia escrito como:
( )
( ) Q FH H F
dt
VT d
C
E E p
+ = (8)
Modelagem & Dinmica de Processos
Modelos simples - tanque de aquecimento
1
( )
|
.
|

\
|
+ = + =
dt
dh
T
dt
dT
h A
dt
dV
T
dt
dT
V
dt
VT d
(9)
( ) Q FH H F
R
h
F
A
T
dt
dT
h A C
E E E p
+ =
(

|
.
|

\
|
+
(10)
(
(

|
|
.
|

\
|
+
|
|
.
|

\
|
+ =
p
E
p
h E E
C
U
A
F
T
C
UT
A
T F
h dt
dT

1
(11)
M
A
T
L
A
B


B

s
i
c
o

Matlab

Real

dy(1)

dh/dt

y(1)

h

dy(2)

dT/dt

y(2)

T

Traduzindo as equaes diferenciais para o Matlab:
M
A
T
L
A
B


B

s
i
c
o

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


M
A
T
L
A
B


B

s
i
c
o

% 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)');
M
A
T
L
A
B


B

s
i
c
o

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]);
M
A
T
L
A
B


B

s
i
c
o

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(:);
M
A
T
L
A
B


B

s
i
c
o

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!
M
A
T
L
A
B


B

s
i
c
o

figure(1);
plot(t,y(:,1));
title('Tanque de aquecimento');
xlabel('Tempo (h)');
ylabel('Altura (m)');
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:

Dica!
M
A
T
L
A
B


B

s
i
c
o

Exemplo
4
M
A
T
L
A
B


B

s
i
c
o

Na compra de uma calculadora grfica, a loja ofereceu duas propostas de
financiamento proposta A e B. A proposta A composta por 7 parcelas mensais
iguais de 114 reais cada. J a proposta B prev 10 parcelas mensais iguais de 98 reais
cada. Qual a melhor opo de compra considerando a taxa de juros oferecida em
investimentos denominados renda fixa?

A princpio poderia resolver o problema simplesmente multiplicado 114 x 7 e 10 x
98, achando o valor final pago. Os valores encontrados seriam 798 e 980. Logo, a
Proposta A parece mais favorvel para o comprador.

importante lembrar, porm, que essa forma de resoluo no considera que o
dinheiro desvaloriza-se ao longo dos meses. Ou seja, o poder de compra de 100 reais
hoje, superior ao poder de compra de 100 reais daqui a 10 meses. Outra forma de
pensar considerar o custo de oportunidade a taxa de retorno livre de que
conseguiria para o meu dinheiro caso, ao invs de pagar agora, investisse. De uma
forma ou de outra o que precisamos do VALOR PRESENTE (VP) de cada srie de
pagamentos, sendo os pagamentos descontados a dada taxa de juros. Para trazer
VALOR FUTURO (VF) para valor presente usa-se a frmula:


VP = VF / ( 1 + i )
n
Onde i a taxa de juros mensal e n o nmero de meses entre o VF e o VP.
M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

clc
close all
clear all

ivetor=0:0.01:0.50;

VPvetor114=[];
VPvetor98=[];

prompt{1}='Nmero de meses do pagamento da serie A:';
prompt{2}='Nmero de meses do pagamento da serie B:';
prompt{3}='Valor de cada parcela da serie A:';
prompt{4}='Valor de cada parcela da serie B:';
resposta=inputdlg(prompt,'Calculo da taxa de equilibrio');
nummeses114=str2num(char(resposta(1)));
nummeses98=str2num(char(resposta(2)));
v114=str2num(char(resposta(3)));
v98=str2num(char(resposta(4)));

M
A
T
L
A
B


B

s
i
c
o

for J = 1:length(ivetor),
i=ivetor(J);
VP=[];
for K = 1:nummeses114,
VP(K)=v114/(1+i)^K;
end
VPfinal=sum(VP);
VPvetor114=[VPvetor114, VPfinal];

VP=[];
for K = 1:nummeses98,
VP(K)=v98/(1+i)^K;
end
VPfinal=sum(VP);
VPvetor98=[VPvetor98, VPfinal];
end
M
A
T
L
A
B


B

s
i
c
o

plot(ivetor*100,VPvetor114,'-b')
hold on
plot(ivetor*100,VPvetor98,'-r')
title('Valor presente das parcelas a serem pagas')
legend( [ num2str(nummeses114), ' parc de ', num2str(v114) ,' reais cada'] , ...
[ num2str(nummeses98), ' parc de ', num2str(v98) ,' reais cada' ] )
xlabel('Taxa de juros mensal')
ylabel('Valor presente em Reais')

if (VPvetor114(1)<VPvetor98(1)),
posicoes=VPvetor114<VPvetor98;
achaZero=find(posicoes==0);
achaPrimeiroZero=min(achaZero);
plot(100*ivetor(achaPrimeiroZero),VPvetor114(achaPrimeiroZero),'ok')
else
posicoes=VPvetor98<VPvetor114;
achaZero=find(posicoes==0);
achaPrimeiroZero=min(achaZero);
plot(100*ivetor(achaPrimeiroZero),VPvetor114(achaPrimeiroZero),'ok')
end

text(100*ivetor(achaPrimeiroZero),50+VPvetor114(achaPrimeiroZero), ...
['Juros de equilibrio (a.m.) = ',num2str(100*ivetor(achaPrimeiroZero)),' %'] )
M
A
T
L
A
B


B

s
i
c
o

Exemplo
5
M
A
T
L
A
B


B

s
i
c
o

Determinado processo possui funo custo definida pela equao:

Y=((x-3)
2
)-6


necessrio encontrar x que minimize o valor de Y. No difcil de visualizar
que a soluo do problema fazer x=3, de modo a levar Y um mnimo (-6). Mesmo
sabendo previamente a soluo, vamos resolver atravs do MATLAB. Utilizamos
ento a funo fminsearch.
M
A
T
L
A
B


B

s
i
c
o

%Calculo do valor de x que minimiza a funcao custo
xmin = fminsearch('((x-3).^2)-6', 4)

%Grfico da funcao custo
x=0:0.01:5;
y=((x-3).^2)-6;
plot(x,y);
hold on

%Marca o ponto de minimo:
ymin=((xmin-3).^2)-6;
plot(xmin, ymin,'or')

M
A
T
L
A
B


B

s
i
c
o

Ou...
M
A
T
L
A
B


B

s
i
c
o

%Calculo do valor de x que minimiza a funcao custo

%Grfico da funcao custo
x=0:0.01:5;
y=((x-3).^2)-6;
plot(x,y);
hold on
drawnow

xmin = fminsearch('custo', 4)

%Marca o ponto de minimo:
ymin=((xmin-3).^2)-6;
plot(xmin, ymin,'or')
function [y] = custo(x)

y=((x-3).^2)-6;

plot(x, y,'ob')
hold on
pause(0.1)
M
A
T
L
A
B


B

s
i
c
o

Exemplo
6
M
A
T
L
A
B


B

s
i
c
o

Quando ajustamos uma curva a um conjunto de pontos experimentais, estamos minimizando a
distncia entre a curva e os dados. Definindo essa distncia como erro, estamos manipulando os
parmetros que definem a curva de modo a minimizar o erro. Nesse caso erro a minha funo
objetivo a ser minimizada. atravs dessa tica que se torna possvel usar fminsearch para
encontrar o valor timo dos parmetros de ajuste de uma curva aos dados experimentais.

global yexp xexp

%pontos experimentais
yexp=[1.1 2.12 2.85 4.4 5.0 6.5];
xexp=[1 2 3 4 5 6];

Parametros = fminsearch('custo',[1,2]);
M
A
T
L
A
B


B

s
i
c
o

function [saida] = custo(x)
global yexp xexp

a=x(1);
b=x(2);

yteo=a.*xexp + b; %calcula o valor teorico
%para cada pto experimental

yerro=abs(yexp-yteo); %calculo do erro
saida=sum(yerro);

plot(xexp,yexp,'r*',xexp,yteo,'b-')
drawnow
pause(0.3)
M
A
T
L
A
B


B

s
i
c
o

Exemplo
7
M
A
T
L
A
B


B

s
i
c
o

M
A
T
L
A
B


B

s
i
c
o

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.

M
A
T
L
A
B


B

s
i
c
o

Uma perturbao degrau em uma entrada u do sistema tal
que:


u = u0 , t < tdegrau
u = u0 + du, 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.
M
A
T
L
A
B


B

s
i
c
o

% 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
Programa principal:
continua...
M
A
T
L
A
B


B

s
i
c
o

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

Programa principal (continuao):
M
A
T
L
A
B


B

s
i
c
o

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


Funo dcstrdeg:
continua...
M
A
T
L
A
B


B

s
i
c
o

%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(:);
Funo dcstrdeg (continuao):
M
A
T
L
A
B


B

s
i
c
o

Exemplo
8
M
A
T
L
A
B


B

s
i
c
o

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.
M
A
T
L
A
B


B

s
i
c
o

% 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
Programa principal:
continua...
M
A
T
L
A
B


B

s
i
c
o

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

Programa principal (continuao):
continua...
M
A
T
L
A
B


B

s
i
c
o

figure(1); legend(leg);
figure(2); legend(leg);
hold off;
Programa principal (continuao):
A seqncia de cores usadas dada pelo vetor
cor, letra a letra atravs da flag. Consulte o
comando plot para detalhes.
Dica!
M
A
T
L
A
B


B

s
i
c
o

Carlos Andr Vaz Junior
cavazjunior@gmail.com
http://www.eq.ufrj.br/links/h2cin/carlosandre

S-ar putea să vă placă și