Professional Documents
Culture Documents
Tubaro
2017
1
BRUNO CIDADE NEVES
DANIELA RUFINO BALDOINO
SABRINA MEDEIROS HENRIQUE
Tubaro
2017
2
1. PROBLEMA: Um reator batelada isotrmico de volume constante V est
processando as seguintes reaes elementares de primeira ordem:
ABC
As hipteses sero:
Temperatura Constante;
Mistura Perfeita;
Volume Constante;
Reao Reversvel entre A e B;
Reao Irreversvel para B e C;
Propriedades Fsicas Constantes;
Constante AB = k1 = 0.4; RA = (- K1 * CA) + (K2 * CB)
Constante BA = k2 =0.3; RB= (K1 * CA) (K3*CB) (K2 * CB)
Constante BC = k3 = 0.7; RC = K3*CB
Balano Global
3
m=p*V
(pV)
= + Ra * p* V Ra *p * V
t
V
=0
t
Cb Ca Cb Cb
= (K1 ) (K2 ) (K3 )
t V V V
Para um volume constante:
CB
= (K1 * CA) - (K2 * CB) - (K3 * CB)
t
4
Balano para o reagente C:
Acmulo = gerao
Cc
= Rc
t
Cb
Rc = K3
V
Cc Cb
= K3
t V
Considerando um Volume constante:
CC
= (K3 * CB)
t
Tempo: 10
N de interaes: 10
5
Figura 1 - Mtodo de Runge Kutta e Mtodo de Euller.
6
B) Avalie o comportamento destes perfis, para diferentes valores da constante K.
Altere seu valor em +50% e -50% do seu valor original. O que acontece com o
processo?
7
Segunda alterao:
8
2. PROBLEMA. Resolva em Octave, a seguinte EDO de grau 2 pelo mtodo de
Range-Kutta. Compare os resultados. Qual o melhor mtodo? Por qu?
Condies iniciais:
X=0
Y=0
X= 0
dy/dx = 0
h= 0,01
dy/dx= z
resolver at x=2
2
EDO: + 30 + 200 = 1000
2
9
ordem. Como a equao que solicitamos a resoluo de segunda ordem, pode-se dizer
que o mtodo de Runge Kutta o mais indicado.
2. CONSIDERAES FINAIS
3. REFERNCIAS BIBLIOGRFICAS
10
4. ANEXOS
Programa elaborado no GNU Octave para o problema 1.
%program SimulacaoResposta1dotrabalho
#ltima gravao: 29/06/2017;quinta-feira;23:56
#Software: GNU Octave 3.1.50;mEd 3.4.3
#Autor: Bruno/Daniela/Sabrina
#Objetivo: Aplicar os Mtodo de Runge-Kutta e Euler na anlise da variao da
concentrao de reagentes em relao ao tempo
clear all;
#Subrotinas
%var
global _;
%begin
clear
clc
# Reao do problema em questo: A <=====> B ----> C
#(reao reversvel)
#dCa/dt== (-k1*CA)+(k2*CB) ;
#dCb/dt=(k1*CA)-(K2*CB)-(K3*CB) ;
#dCc/dt=(+k3*Cb)
t(1)=0;
Runge Kutta
CA(1)=3;
CB(1)=0;
CC(1)=0;
Euler
CAe(1)=3;
CBe(1)=0;
CCe(1)=0;
11
printf("Dada a reao reversvel (A <--> B -->C) (->k1 ; <-k2 ; ->K3), insira os dados:
\n\n");
n=input("-Insira o nmero de intervalos: ");
tf=input("\n-Insira o valor final de tempo: ");
h=(tf-t(1))/n;
k1= 0.4;
k2= 0.3;
k3= 0.7;
V= 2;
#Mtodo de Runge Kutta
for i=1:n
t(i+1)=t(i)+h;
k1CA=h*(-(k1*CA(i))+(k2*(CB(i))));
k1CB=h*(+(k1*CA(i))+(k2*(CB(i)))-(k3*(CB(i))));
k1CC=h*(+(k3*CC(i)));
k2CA=h*(-(k1*CA(i)+k1CA/2)+(k2*(CB(i)+k1CB/2)));
k2CB=h*(+(k1*CA(i)+k1CA/2)+(k2*(CB(i)+k1CB/2))-(k3*(CB(i)+k1CB/2)));
k2CC=h*(+(k3*CB(i)+k1CB/2));
k3CA=h*(-(k1*CA(i)+k2CA/2)+(k2*(CB(i)+k2CB/2)));
k3CB=h*(+(k1*CA(i)+k2CA/2)+(k2*(CB(i)+k2CB/2))-(k3*(CB(i)+k2CB/2)));
k3CC=h*(+(k3*CB(i)+k2CB/2));
k4CA=h*(-(k1*CA(i)+k3CA/2)+(k2*(CB(i)+k3CB/2)));
k4CB=h*(+(k1*CA(i)+k3CA/2)+(k2*(CB(i)+k3CB/2))-(k3*(CB(i)+k3CB/2)));
k4CC=h*(+(k3*CB(i)+k3CB/2));
CA(i+1)=CA(i)+(1/6)*(k1CA+2*k2CB+2*k3CA+k4CA);
CB(i+1)=CB(i)+(1/6)*(k1CB+2*k2CB+2*k3CB+k4CB);
CC(i+1)=CC(i)+(1/6)*(k1CC+2*k2CC+2*k3CC+k4CC);
12
endfor;
# Mtodo de Euler
for i=1:n
CA1=CAe(i)+(h*((-k1*CAe(i))+(k2*(CBe(i)))));
CAe(i+1)=CA1;
CB1=CBe(i)+(h*((k1*CAe(i))+(k2*(CBe(i)))-(k3*(CBe(i)))));
CBe(i+1)=CB1;
CC1=CCe(i)+(h*((k3*CBe(i))));
CCe(i+1)=CC1;
endfor;
#Grficos
subplot(1,2,1);
plot(t,CA,t,CA,"-x",t,CA);
xlabel("Tempo de Reao (min)");
ylabel("Concentrao(mol/L)");
legend('CA','CB','CC');
title("Mtodo de RUNGE KUTTA");
grid("on");
subplot(1,2,2);
plot(t,CAe,t,CBe,"-o",t,CCe);
xlabel("Tempo de Reao (min)");
ylabel("Concentrao(mol/L)");
legend('CA','CB','CC');
title("Mtodo de EULER");
grid("on");
%end
%program respostada1com50mais
#ltima gravao: 30/06/2017;sexta-feira;00:04
13
#Software: GNU Octave 3.1.50;mEd 3.4.3
#Autor: Bruno/Daniela/Sabrina
#Objetivo: Aplicar os Mtodo de Runge-Kutta e Euler na anlise da variao da
concentrao de reagentes em relao ao tempo
clear all;
#Subrotinas
%var
global _;
%begin
clear
clc
# Reao do problema em questo: A <=====> B ----> C
#(reao reversvel)
#dCa/dt== (-k1*CA)+(k2*CB) ;
#dCb/dt=(k1*CA)-(K2*CB)-(K3*CB) ;
#dCc/dt=(+k3*Cb)
t(1)=0;
Runge Kutta
CA(1)=3;
CB(1)=0;
CC(1)=0;
Euler
CAe(1)=3;
CBe(1)=0;
CCe(1)=0;
printf("Dada a reao reversvel (A <--> B -->C) (->k1 ; <-k2 ; ->K3), insira os dados:
\n\n");
n=input("-Insira o nmero de intervalos: ");
tf=input("\n-Insira o valor final de tempo: ");
h=(tf-t(1))/n;
#Valores das constantes com 50% a mais do valor inicial dado
14
k1= 0.6;
k2= 0.45;
k3= 1.05;
V= 2;
t(i+1)=t(i)+h;
k1CA=h*(-(k1*CA(i))+(k2*(CB(i))));
k1CB=h*(+(k1*CA(i))+(k2*(CB(i)))-(k3*(CB(i))));
k1CC=h*(+(k3*CC(i)));
k2CA=h*(-(k1*CA(i)+k1CA/2)+(k2*(CB(i)+k1CB/2)));
k2CB=h*(+(k1*CA(i)+k1CA/2)+(k2*(CB(i)+k1CB/2))-(k3*(CB(i)+k1CB/2)));
k2CC=h*(+(k3*CB(i)+k1CB/2));
k3CA=h*(-(k1*CA(i)+k2CA/2)+(k2*(CB(i)+k2CB/2)));
k3CB=h*(+(k1*CA(i)+k2CA/2)+(k2*(CB(i)+k2CB/2))-(k3*(CB(i)+k2CB/2)));
k3CC=h*(+(k3*CB(i)+k2CB/2));
k4CA=h*(-(k1*CA(i)+k3CA/2)+(k2*(CB(i)+k3CB/2)));
k4CB=h*(+(k1*CA(i)+k3CA/2)+(k2*(CB(i)+k3CB/2))-(k3*(CB(i)+k3CB/2)));
k4CC=h*(+(k3*CB(i)+k3CB/2));
CA(i+1)=CA(i)+(1/6)*(k1CA+2*k2CB+2*k3CA+k4CA);
CB(i+1)=CB(i)+(1/6)*(k1CB+2*k2CB+2*k3CB+k4CB);
CC(i+1)=CC(i)+(1/6)*(k1CC+2*k2CC+2*k3CC+k4CC);
endfor;
# Mtodo de Euler
for i=1:n
CA1=CAe(i)+(h*((-k1*CAe(i))+(k2*(CBe(i)))));
15
CAe(i+1)=CA1;
CB1=CBe(i)+(h*((k1*CAe(i))+(k2*(CBe(i)))-(k3*(CBe(i)))));
CBe(i+1)=CB1;
CC1=CCe(i)+(h*((k3*CBe(i))));
CCe(i+1)=CC1;
endfor;
#Grficos
subplot(1,2,1);
plot(t,CA,t,CA,"-o",t,CA);
xlabel("Tempo de Reao (min)");
ylabel("Concentrao(mol/L)");
legend('CA','CB','CC');
title("Mtodo de RUNGE KUTTA");
grid("on");
subplot(1,2,2);
plot(t,CAe,t,CBe,"-o",t,CCe);
xlabel("Tempo de Reao (min)");
ylabel("Concentrao(mol/L)");
legend('CA','CB','CC');
title("Mtodo de EULER");
grid("on");
s=input("\n\nPressione enter para fechar o grfico", "s");
close;
%end.
%program respostada1com50menos
#ltima gravao: 29/06/2017;quinta-feira;14:33
#Software: GNU Octave 3.1.50;mEd 3.4.3
#Autor: Bruno/Daniela/Sabrina
16
#Objetivo: Aplicar os Mtodo de Runge-Kutta e Euler na anlise da variao da
concentrao de reagentes em relao ao tempo
clear all;
#Subrotinas
%var
global _;
%begin
clear
clc
# Reao do problema em questo: A <=====> B ----> C
#(reao reversvel)
#dCa/dt== (-k1*CA)+(k2*CB) ;
#dCb/dt=(k1*CA)-(K2*CB)-(K3*CB) ;
#dCc/dt=(+k3*Cb);
t(1)=0;
Runge Kutta
CA(1)=3;
CB(1)=0;
CC(1)=0;
Euler
CAe(1)=3;
CBe(1)=0;
CCe(1)=0;
printf("Dada a reao reversvel (A <--> B -->C) (->k1 ; <-k2 ; ->K3), insira os dados:
\n\n");
n=input("-Insira o nmero de intervalos: ");
tf=input("\n-Insira o valor final de tempo: ");
h=(tf-t(1))/n;
#Valores para as constantes 50% do valor inicial
k1= 0.2;
17
k2= 0.15;
k3= 0.35;
V= 2;
t(i+1)=t(i)+h;
k1CA=h*(-(k1*CA(i))+(k2*(CB(i))));
k1CB=h*(+(k1*CA(i))+(k2*(CB(i)))-(k3*(CB(i))));
k1CC=h*(+(k3*CC(i)));
k2CA=h*(-(k1*CA(i)+k1CA/2)+(k2*(CB(i)+k1CB/2)));
k2CB=h*(+(k1*CA(i)+k1CA/2)+(k2*(CB(i)+k1CB/2))-(k3*(CB(i)+k1CB/2)));
k2CC=h*(+(k3*CB(i)+k1CB/2));
k3CA=h*(-(k1*CA(i)+k2CA/2)+(k2*(CB(i)+k2CB/2)));
k3CB=h*(+(k1*CA(i)+k2CA/2)+(k2*(CB(i)+k2CB/2))-(k3*(CB(i)+k2CB/2)));
k3CC=h*(+(k3*CB(i)+k2CB/2));
k4CA=h*(-(k1*CA(i)+k3CA/2)+(k2*(CB(i)+k3CB/2)));
k4CB=h*(+(k1*CA(i)+k3CA/2)+(k2*(CB(i)+k3CB/2))-(k3*(CB(i)+k3CB/2)));
k4CC=h*(+(k3*CB(i)+k3CB/2));
CA(i+1)=CA(i)+(1/6)*(k1CA+2*k2CB+2*k3CA+k4CA);
CB(i+1)=CB(i)+(1/6)*(k1CB+2*k2CB+2*k3CB+k4CB);
CC(i+1)=CC(i)+(1/6)*(k1CC+2*k2CC+2*k3CC+k4CC);
endfor;
# Mtodo de Euler
for i=1:n
CA1=CAe(i)+(h*((-k1*CAe(i))+(k2*(CBe(i)))));
18
CAe(i+1)=CA1;
CB1=CBe(i)+(h*((k1*CAe(i))+(k2*(CBe(i)))-(k3*(CBe(i)))));
CBe(i+1)=CB1;
CC1=CCe(i)+(h*((k3*CBe(i))));
CCe(i+1)=CC1;
endfor;
#Grficos
subplot(1,2,1);
plot(t,CA,t,CA,"-o",t,CA);
xlabel("Tempo de Reao (min)");
ylabel("Concentrao(mol/L)");
legend('CA','CB','CC');
title("Mtodo de RUNGE KUTTA");
grid("on");
subplot(1,2,2);
plot(t,CAe,t,CBe,"-o",t,CCe);
xlabel("Tempo de Reao (min)");
ylabel("Concentrao(mol/L)");
legend('CA','CB','CC');
title("Mtodo de EULER");
grid("on");
s=input("\n\nPressione enter para fechar o grfico", "s");
close;
%program SimulacaoResposta2dotrabalho
#ltima gravao: 29/06/2017;quinta-feira;14:37
#Software: GNU Octave 3.1.50;mEd 3.4.3
#Autores: Bruno, Daniela e Sabrina
19
#Objetivo: Comparao entre os Mtodos Euler, Runge Kutta e Analtico para uma
EDO de 2 ordem
clear all;
#Subrotinas
%uses
data_types;
octave_pascal;
%var
global _;
function y= f(zn,yn)
y=(1000-(30*zn)-(200*yn));
endfunction
function yanalitico=fanalitico(xn)
yanalitico=(5-(10*exp(-10*xn)))+(5*exp(-20*xn));
endfunction
function ye=f(zne,yne)
ye=(1000-(30*zne)-(200*yne));
endfunction
%begin
clc;
clg;
zn=0;
zne=0;
yn=0;
yne=0;
h=0.01;
#Coloca duas linhas em branco printf(" \n\n");
#Entrada
#condies iniciais
#zn = input("Qual o valor inicial de zn? ");
20
#yn = input("Qual o valor inicial de yn? ");
#h = input("Qual o valor de h? ");
#Range-Kutta
#xmax = 20+h;
xn=0.01;
xmax = 2;
n=0;
while(xn<=xmax)
n=n+1;
k1 = h*(zn);
l1 = h*f(zn,yn);
k2 = h*(zn+l1/2);
l2 = h*f(zn+l1/2,yn+k1/2);
k3 = h*(zn+l2/2);
l3 = h*f(zn+l2/2, yn+k2/2);
l4 = h*f(zn+l3,yn+k3);
zn1 = zn +(l1+2*l2+2*(l3+l4))/6;
k4 = h*(zn+l3);
yn1 = yn +(k1+2*k2+2*k3+k4)/6;
zn=zn1;
yn = yn1;
eixox(n)=xn;
eixoyrk(n)=yn;
# y analtico
yanalitico=fanalitico(xn);
eixoyreal(n)=yanalitico;
#Euler
zn1e=zne+h*f(zne,yne);
yn1e=yne+h*(zne);
zne=zn1e;
yne=yn1e;
21
xn=xn+h;
eixoye(n)=yne;
#Sada
printf("\n Valor de Euler= %g",yne);
printf("\n Valor de Runge Kutta= %g",yn);
printf("\n Valor analtico= %g\n",yanalitico);
endwhile;
#Plotagem
plot(eixox, eixoyrk, "-;y Runge Kutta;r");
xlabel("xn");
ylabel("yn");
hold("on");
plot(eixox, eixoyreal, "-;y analtico;b");
xlabel("xn");
ylabel("yn");
plot(eixox, eixoye, "-;y Euler;g");
xlabel("xn");
ylabel("yn");
title("Mtodos\n Runge Kutta \n Euler e Analtico, EDO de 2 ordem");
s=input("\n\nPressione enter para fechar o grfico", "s");
close;
%end.
22