Anda di halaman 1dari 116

Arat Andrade Saraiva Elvas Piauilino

aratasaraiva@gmail.com

Plotagem

Equaes

Introduo

Plotagem

Equaes

Introduo

Mais de 1 milho de resultados

?
http://newsreader.mathworks.com

Matlab Screen

Command Window
type commands

Current Directory
View folders and m-files

Workspace
View program variables
Double click on a variable
to see it in the Array Editor

Command History
view past commands
save a whole session
using diary

Agora a = 2, fao tudo de novo?!

Variveis
No preciso indicar o tipo de varivel
int a;
double b;
float c;

So criadas matizes 1x1


Example:
>>x=5;
>>x1=2;

Array, Matriz
um vector
x =
1

uma matriz
x =
1
5
3

2
1
2

x = [1 2 5 1]

x = [1 2 3; 5 1 4; 3 2 -1]

3
4
-1

transposta

y = x
1
2
5
1

y =

Long Array, Matriz

t =1:10
t =

=2:-0.5:-1

k =

B
x =
1
5

1.5

0.5

= [1:4; 5:8]

2
6

3
7

4
8

-0.5

-1

10

Gerando Vetores das funes


zeros(M,N) zeros da matriz MxN

x = zeros(1,3)

x =
0

ones(M,N) uns da matriz MxN

x = ones(1,3)
x =
1
rand(M,N) matriz uniformemente
distribuida de MxN
Nmeros entre (0,1)

x = rand(1,3)
x =
0.9501

0.2311 0.6068

Matrix Index
The matrix indices begin from 1 (not 0 (as in C))
The matrix indices must be positive integer

Given:

A(-2), A(0)
Error: ??? Subscript indices must either be real positive integers or
logicals.
A(4,2)
Error: ??? Index exceeds matrix dimensions.

Concatenation of Matrices
x = [1 2], y = [4 5], z=[ 0 0]
A = [ x y]
1

B = [x ; y]
1 2
4 5

C = [x y ;z]

Error:
??? Error using ==> vertcat CAT arguments dimensions are not consistent.

Operators (arithmetic)
+ addition

subtraction

multiplication

division

^ power

complex conjugate transpose

Matrices Operations

Given A and B:

Addition

Subtraction

Product

Transpose

Operators (Element by Element)


.* element-by-element multiplication
./ element-by-element division
.^ element-by-element power

The use of . Element Operation


A = [1 2 3; 5 1 4; 3 2 1]
A=
1 2 3
5 1 4
3 2 -1

x = A(1,:)
x=

1 2 3

y = A(3 ,:)
y=

3 4 -1

b = x .* y

c=x./y

d = x .^2

b=

c=
0.33 0.5 -3

d=

3 8 -3

K= x^2
Erorr:
??? Error using ==> mpower Matrix must be square.
B=x*y
Erorr:
??? Error using ==> mtimes Inner matrix dimensions must agree.

Tipos Bsicos

Matriz

Char Array

Estrutura

Criando uma matriz:

Criando um char array:

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

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!

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

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)

ix) Determinante:
det(matriz)
x) Inversa:
inv(matriz)
xi) Dimenses da matriz:
size(matriz)
lenght(matriz)
numel(matriz)

Veja tambm: flipud e fliplr

13

10

14

11

15

12

16

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

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

Achando o menor valor de uma funo:


X = fzero('sin',2)

funo

estimativa inicial

Operators (relational, logical)


== Equal to
~= Not equal to
< Strictly smaller
> Strictly greater

<= Smaller than or equal to


>= Greater than equal to
& And operator
| Or operator

Controle de fluxo
if
for
while
break

if:

AND

OR

Falso

Verdadeiro

AND

OR

resultado

resultado

While:

while I < 10,


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

Basic Task: Plot the function sin(x)


between 0x4
Create an x-array of 100 samples between 0 and 4.
Calculate sin(.) of the x-array
>>x=linspace(0,4*pi,100);
Plot the y-array

1
0.8
0.6

>>y=sin(x);

0.4
0.2
0
-0.2
-0.4

>>plot(y)

-0.6
-0.8
-1

10

20

30

40

50

60

70

80

90

100

Plot the function e-x/3sin(x) between


0x4
Create an x-array of 100 samples between 0 and 4.
Calculate sin(.) of the x-array
>>x=linspace(0,4*pi,100);

Calculate e-x/3 of the x-array


>>y=sin(x);
Multiply the arrays y and y1

>>y1=exp(-x/3);

>>y2=y*y1;

Plot the function e-x/3sin(x) between


0x4
Multiply the arrays y and y1 correctly
>>y2=y.*y1;
Plot the y2-array

0.7
0.6

>>plot(y2)

0.5
0.4
0.3
0.2
0.1
0
-0.1
-0.2
-0.3

10

20

30

40

50

60

70

80

90

100

Display Facilities

0.7
0.6

plot(.)

0.5
0.4
0.3

Example:
>>x=linspace(0,4*pi,100);
>>y=sin(x);
>>plot(y)
>>plot(x,y)

0.2
0.1
0
-0.1
-0.2
-0.3

10

20

30

40

50

60

70

80

90

100

10

20

30

40

50

60

70

80

90

100

0.7

stem(.)

0.6
0.5
0.4
0.3

Example:
>>stem(y)
>>stem(x,y)

0.2
0.1
0
-0.1
-0.2
-0.3

Display Facilities
title(.)
>>title(This is the sinus function)

This is the sinus function


1
0.8

xlabel(.)

0.6
0.4

ylabel(.)

0.2

sin(x)

>>xlabel(x (secs))

0
-0.2
-0.4
-0.6

>>ylabel(sin(x))

-0.8
-1

10

20

30

40

50
60
x (secs)

70

80

90

100

>> figure(1)

>> figure(2)

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

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

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


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

Dica!

>> figure(3)

>> plot(t,y)

>> subplot(1,2,1)

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

>>
>>
>>
>>
>>
>>
>>

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

>>
>>
>>
>>
>>

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

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;

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

%Malha triangular da base


Composio
%malha da base
(3 componentes)
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!

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

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

Use of M-File
Click to
create a new
M-File

Extension .m
A text file containing script or function or program
to run

Use of M-File

Save file as Denem430.m

If you include ; at the


end of each statement,
result will not be shown
immediately

Notes:

% is the neglect sign for Matlab (equaivalent of // in C). Anything


after it on the same line is neglected by Matlab compiler.

Sometimes slowing down the execution is done deliberately for


observation purposes. You can use the command pause for this
purpose

pause %wait until any key


pause(3) %wait 3 seconds

Exemplos

Exemplo
1

Modelagem & Dinmica de Processos


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

dmt
FE F
dt

(2)

dmt
dht
A
dt
dt

(3)

dht 1
FE F

dt
A

(4)

Ainda,

e, portanto,

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
F
R

(5)

dht 1
h
FE
dt
A
R

(6)

Logo,

Modelos simples - o tanque de nvel


Este modelo simples de um tanque de nvel, sem balano de
energia, possui uma soluo analtica:
t

RA
ht RFE 1 e

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

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

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 & Dinmica de Processos


Muitas vezes muito trabalhoso, ou mesmo impossvel,
Modelos simples - o tanque de nvel
encontrar a soluo analtica para o conjunto de
equaesFreqentemente,
diferenciais. Nesse
casoatemos
quesada
simular
considera-se
vazo de
do tanque
usando
soluo numrica
equaes
diferenciais.
proporcional
altura da das
coluna
de lquido
inversamente
Vamos
assumir aque
modelo ao
doescoamento
exemplo (R):
1 no tivesse
proporcional
umaoresistncia
soluo analtica, e ento usar o Matlab para estudar o
comportamento da altura dohnvel com o tempo. A
F
(5)
equao diferencial
ser:
R
Logo,

dht 1
h
FE
dt
A
R

(6)

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

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

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.

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

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 & 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

V dT

d :VT
como
dt

dt

dV
dh
dT
A h
T

dt
dt
h dt
1

dht
FE
dt
A
R
dT T
h
C p A h
FE FE HE FH Q
dt
A
R

como:
O
balano de energia
escrito

VTT UT
FE

dT C1 d F
U
E E Fh H

FH

E
E T
p

dt
dt
h A
C p
C p
A

(9)

(6)
(10)

(8)

(11)

Traduzindo as equaes diferenciais para o Matlab:


Matlab

Real

dy(1)

dh/dt

y(1)

dy(2)

dT/dt

y(2)

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

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

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

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

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!

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

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.

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

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

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)),' %'] )

Exemplo
5

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.

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

Ou...

%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

function [y] = custo(x)

xmin = fminsearch('custo', 4)

plot(x, y,'ob')
hold on
pause(0.1)

%Marca o ponto de minimo:


ymin=((xmin-3).^2)-6;
plot(xmin, ymin,'or')

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

Exemplo
6

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

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)

Exemplo
7

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.

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.

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
fd = 2*Fe; %Valor assumido aps o degrau

continua...

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

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

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
8

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.

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

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

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!

Dvidas?

Anda mungkin juga menyukai