Documente Academic
Documente Profesional
Documente Cultură
TRUJILLO
FACULTAD DE INGENIERIA QUIMICA
TRUJILLO PERU
PROBLEMAS RESUELTOS
EJERCICIO 5.1:
Flujo dinmico en un tanque puede ser modelado haciendo un balance de
masa sobre el fluido en el tanque (Figura 5.10). La naturaleza del resultado
ODE-IVP depende del modelo utilizado para la vlvula de salida. Si una vlvula
lineal es
A = rea seccin
FIGURA 5.10: Flujo dinmico en un esquema
de tanque
Donde:
=densidad
V =volume n
dh F entra F sale
=
dt A
a.
b. Directamente proporcional a h: F sale =C , h en cuyo caso la ecuacin
del modelo es:
dh F entra C , h
=
dt A
1
2
c. Una funcin de h, como F sal e =C , h y el modelo se convierte en:
dh F entra C , h
=
dt A
Altura inicial 4 ft
Fentra =1000 lb/h Flujo inicial de entrada en estado estacionario)
t=tiempo(h)
Fentra sufre un cambio en el tiempo 0+ a 1400lb /h hasta el tiempo 10h,
F
a. Resolver el lineal ODE ( sale proporcional a h) usando el mtodo de
Euler, empezar con una t de 0.5 y denuevo con t=0.05 para determinar
F
1
b. Repita la parte a para el caso no lineal ( sale proporcional a h 2 ).
SOLUCION
Para (a)
Usando el software MATLAB para resolver sistemas de ecuaciones
diferenciales se obtienen los siguientes resultados:
Graficas
Cdigo del programa
%% INGRESO DE DATOS1
xf=1; % valor al cual se desea conocer la func.
h=0.5;
xo=0; yo=4; %condicion inicial
i=0;
fprintf('\n\n\n\t\t\t\t MTODO DE RUNGE-KUTTA (RK-4)')
fprintf('\n\t\t\t\t===================================\n')
fprintf('\n\t\t\t\t\tpara dt = 0.5\n')
fprintf('\t\t\t\t------------------------------\n')
fprintf('\t\t\t \ti \t t(i) \tH(i) \n')
fprintf('\t\t\t\t------------------------------\n')
fprintf('\t\t\t \t%2d \t%6.4f \t%8.6f\n',i,xo,yo)
N=(xf-xo)/h;
if xf==0
f=inline('0*x+1000/(3.1416*62.5*9)-250/
(3.1416*62.5*9)*y','x','y');
elseif xf>0 & xf<=10
f=inline('0*x+1400/(3.1416*62.5*9)-250/
(3.1416*62.5*9)*y','x','y');
elseif xf>10
f=inline('0*x+1000/(3.1416*62.5*9)-250/
(3.1416*62.5*9)*y','x','y');
end
x1=zeros(1,length(N));
x1(1,1)=xo;
y1=zeros(1,length(N));
y1(1,1)=yo;
while i<N
k1=f(xo,yo);
k2=f(xo+h/2,yo+h*k1/2);
k3=f(xo+h/2,yo+h*k2/2);
k4=f(xo+h,yo+h*k3);
yo=yo+h/6*(k1+2*k2+2*k3+k4);
xo=xo+h;
i=i+1;
fprintf('\t\t\t \t%2d \t%6.4f \t%8.6f\n',i,xo,yo)
x1(1,i+1)=xo;
y1(1,i+1)=yo;
end
fprintf('\t\t\t\t-----------------------------\n')
xx=0:h:xf;
[T,Y]=ode45(f,xx,4);
x_analit=Y(end);
ERP=(abs(yo-x_analit))/x_analit*100;
fprintf('\t\t\t\t El error = %6.4e\n',ERP)
subplot(2,2,1);
plot(x1,y1,'ro-')
xlabel('t'); ylabel('H')
title('dt=0.5');grid
hold on
plot(T,Y,'b')
legend('Runge-kuta','ode45')
%=======================================
xf=1; % valor al cual se desea conocer la func.
h=0.05;
xo=0; yo=4; %condicion inicial
i=0;
fprintf('\n\n\t\t\t\t\tpara dt = 0.05\n')
fprintf('\t\t\t\t------------------------------\n')
fprintf('\t\t\t \ti \t t(i) \tH(i) \n')
fprintf('\t\t\t\t------------------------------\n')
fprintf('\t\t\t \t%2d \t%6.4f \t%8.6f\n',i,xo,yo)
N=(xf-xo)/h;
if xf==0
f=inline('0*x+1000/(3.1416*62.5*9)-250/
(3.1416*62.5*9)*y','x','y');
elseif xf>0 & xf<=10
f=inline('0*x+1400/(3.1416*62.5*9)-250/
(3.1416*62.5*9)*y','x','y');
elseif xf>10
f=inline('0*x+1000/(3.1416*62.5*9)-250/
(3.1416*62.5*9)*y','x','y');
end
x1=zeros(1,length(N));
x1(1,1)=xo;
y1=zeros(1,length(N));
y1(1,1)=yo;
while i<N
k1=f(xo,yo);
k2=f(xo+h/2,yo+h*k1/2);
k3=f(xo+h/2,yo+h*k2/2);
k4=f(xo+h,yo+h*k3);
yo=yo+h/6*(k1+2*k2+2*k3+k4);
xo=xo+h;
i=i+1;
fprintf('\t\t\t \t%2d \t%6.4f \t%8.6f\n',i,xo,yo)
x1(1,i+1)=xo;
y1(1,i+1)=yo;
end
fprintf('\t\t\t\t-----------------------------\n')
xx=0:h:xf;
[T,Y]=ode45(f,xx,4);
x_analit=Y(end);
ERP=(abs(yo-x_analit))/x_analit*100;
fprintf('\t\t\t\t El error = %6.4e\n',ERP)
subplot(2,2,2);
plot(x1,y1,'ro-')
xlabel('t'); ylabel('H')
title('dt=0.05');grid
hold on
plot(T,Y,'b')
legend('Runge-kuta','ode45')
%=================================================
xf=1; % valor al cual se desea conocer la func.
h=0.05;
xo=0; yo=4; %condicion inicial
i=0;
fprintf('\n\n\t\t\t\t\tpara dt = 0.005\n')
fprintf('\t\t\t\t------------------------------\n')
fprintf('\t\t\t \ti \t t(i) \tH(i) \n')
fprintf('\t\t\t\t------------------------------\n')
fprintf('\t\t\t \t%2d \t%6.4f \t%8.6f\n',i,xo,yo)
N=(xf-xo)/h;
if xf==0
f=inline('0*x+1000/(3.1416*62.5*9)-250/
(3.1416*62.5*9)*y','x','y');
elseif xf>0 & xf<=10
f=inline('0*x+1400/(3.1416*62.5*9)-250/
(3.1416*62.5*9)*y','x','y');
elseif xf>10
f=inline('0*x+1000/(3.1416*62.5*9)-250/
(3.1416*62.5*9)*y','x','y');
end
x1=zeros(1,length(N));
x1(1,1)=xo;
y1=zeros(1,length(N));
y1(1,1)=yo;
while i<N
k1=f(xo,yo);
k2=f(xo+h/2,yo+h*k1/2);
k3=f(xo+h/2,yo+h*k2/2);
k4=f(xo+h,yo+h*k3);
yo=yo+h/6*(k1+2*k2+2*k3+k4);
xo=xo+h;
i=i+1;
fprintf('\t\t\t \t%2d \t%6.4f \t%8.6f\n',i,xo,yo)
x1(1,i+1)=xo;
y1(1,i+1)=yo;
end
fprintf('\t\t\t\t-----------------------------\n')
xx=0:h:xf;
[T,Y]=ode45(f,xx,4);
x_analit=Y(end);
ERP=(abs(yo-x_analit))/x_analit*100;
fprintf('\t\t\t\t El error = %6.4e\n',ERP)
subplot(2,2,3);
plot(x1,y1,'ro-')
xlabel('t'); ylabel('H')
title('dt=0.005');grid
hold on
plot(T,Y,'b')
legend('Runge-kuta','ode45')
disp('El valor para dt = 0.005')
Para (b)
Usando el software Polymath para resolver sistemas de ecuaciones
diferenciales se obtienen los siguientes resultados:
Cdigo del programa:
A = 3.1416 * D ^ 2 / 4 # area
D = 6 # diametro del cilindro
t(0) = 0
t(f) = 0.85
Cv = 250 # valor para enunciado a
F = 1400 # para el valor de 0<t<=10
p = 62.5 # densidad del fluido
d(h)/d(t) = (F - Cv * sqrt(h)) / (p * A) # ecuacion para enunciado a
h(0) = 4
%% INGRESO DE DATOS1
xf=1; % valor al cual se desea conocer la func.
h=0.5;
xo=0; yo=4; %condicion inicial
i=0;
fprintf('\n\n\n\t\t\t\t MTODO DE RUNGE-KUTTA (RK-4)')
fprintf('\n\t\t\t\t===================================\n')
fprintf('\t\t\t\t\tpara dt = 0.5\n')
fprintf('\n\t\t\t\t------------------------------\n')
fprintf('\t\t\t \ti \t t(i) \tH(i) \n')
fprintf('\t\t\t\t------------------------------\n')
fprintf('\t\t\t \t%2d \t%6.4f \t%8.6f\n',i,xo,yo)
N=(xf-xo)/h;
if xf==0
f=inline('0*x+1000/(3.1416*62.5*9)-500/
(3.1416*62.5*9)*y^0.5','x','y');
elseif xf>0 & xf<=10
f=inline('0*x+1400/(3.1416*62.5*9)-500/
(3.1416*62.5*9)*y^0.5','x','y');
elseif xf>10
f=inline('0*x+1000/(3.1416*62.5*9)-500/
(3.1416*62.5*9)*y^0.5','x','y');
end
x1=zeros(1,length(N));
x1(1,1)=xo;
y1=zeros(1,length(N));
y1(1,1)=yo;
while i<N
k1=f(xo,yo);
k2=f(xo+h/2,yo+h*k1/2);
k3=f(xo+h/2,yo+h*k2/2);
k4=f(xo+h,yo+h*k3);
yo=yo+h/6*(k1+2*k2+2*k3+k4);
xo=xo+h;
i=i+1;
fprintf('\t\t\t \t%2d \t%6.4f \t%8.6f\n',i,xo,yo)
x1(1,i+1)=xo;
y1(1,i+1)=yo;
end
fprintf('\t\t\t\t-----------------------------\n')
xx=0:h:xf;
[T,Y]=ode45(f,xx,4);
x_analit=Y(end);
ERP=(abs(yo-x_analit))/x_analit*100;
fprintf('\t\t\t\t El error = %6.4e\n',ERP)
subplot(1,2,1);
plot(x1,y1,'ro-')
xlabel('t'); ylabel('H')
title('dt=0.5');grid
hold on
plot(T,Y,'b')
legend('Runge-kuta','ode45')
%=======================================
xf=1; % valor al cual se desea conocer la func.
h=0.05;
xo=0; yo=4; %condicion inicial
i=0;
fprintf('\n\t\t\t\t\tpara dt = 0.05\n')
fprintf('\t\t\t\t------------------------------\n')
fprintf('\t\t\t \ti \t t(i) \tH(i) \n')
fprintf('\t\t\t\t------------------------------\n')
fprintf('\t\t\t \t%2d \t%6.4f \t%8.6f\n',i,xo,yo)
N=(xf-xo)/h;
if xf==0
f=inline('0*x+1000/(3.1416*62.5*9)-500/
(3.1416*62.5*9)*y^0.5','x','y');
elseif xf>0 & xf<=10
f=inline('0*x+1400/(3.1416*62.5*9)-500/
(3.1416*62.5*9)*y^0.5','x','y');
elseif xf>10
f=inline('0*x+1000/(3.1416*62.5*9)-500/
(3.1416*62.5*9)*y^0.5','x','y');
end
x1=zeros(1,length(N));
x1(1,1)=xo;
y1=zeros(1,length(N));
y1(1,1)=yo;
while i<N
k1=f(xo,yo);
k2=f(xo+h/2,yo+h*k1/2);
k3=f(xo+h/2,yo+h*k2/2);
k4=f(xo+h,yo+h*k3);
yo=yo+h/6*(k1+2*k2+2*k3+k4);
xo=xo+h;
i=i+1;
fprintf('\t\t\t \t%2d \t%6.4f \t%8.6f\n',i,xo,yo)
x1(1,i+1)=xo;
y1(1,i+1)=yo;
end
fprintf('\t\t\t\t-----------------------------\n')
xx=0:h:xf;
[T,Y]=ode45(f,xx,4);
x_analit=Y(end);
ERP=(abs(yo-x_analit))/x_analit*100;
fprintf('\t\t\t\t El error = %6.4e\n',ERP)
subplot(1,2,2);
plot(x1,y1,'ro-')
xlabel('t'); ylabel('H')
title('dt=0.05');grid
hold on
plot(T,Y,'b')
legend('Runge-kuta','ode45')
disp('el valor adecuado para dt = 0.05')
EJERCICIO 5.4
Supongamos que las siguientes reacciones qumicas tienen lugar en un
reactor continuo de tanque agitado (CSTR):
A k 1B
d CB
=k 1 C Ak 2 C B
dt
SOLUCION
Usando el software Polymath para resolver sistemas de ecuaciones
diferenciales se obtienen los siguientes resultados:
C B=0.63347 gmol /L
C A =0.36652 gmol/ L
C B=0.63347 gmol /L
Grafica
Grafica
Cdigo del programa:
function z = E54(f,g,CA,CB,t,h)
u1=h*eval('f(t,CA,CB)');
v1=h*eval('g(t,CA,CB)');
u2=h*eval('f(t+h/2,CA+u1/2,CB+v1/2)');
v2=h*eval('g(t+h/2,CA+u1/2,CB+v1/2)');
u3=h*eval('f(t+h/2,CA+u2/2,CB+v2/2)');
v3=h*eval('g(t+h/2,CA+u2/2,CB+v2/2)');
u4=h*eval('f(t+h,CA+u3,CB+v3)');
v4=h*eval('g(t+h,CA+u3,CB+v3)');
f1=CA+(1/6)*(u1+2*u2+2*u3+u4);
g1=CB+(1/6)*(v1+2*v2+2*v3+v4);
z=[f1,g1];
clc ,clear all
fprintf('********************************************\n')
fprintf('*\tCURSO: METODOS NUMERICOS \t*\n')
fprintf('*\tPROFESOR: Dr. Guillermo Evangelista B.\t*\n')
fprintf('*\tRESOLUCION DEL EJERCICIO 5.4 \t*\n')
fprintf('********************************************\n\n')
A=inline('-CA+(0.5*CB)','t','CA','CB');
B=inline('CA-(0.5*CB)','t','CA','CB');
t0=0;
tf=2;
h=0.01;
t=t0;
CA0=1.0;
CB0=0;
m = E54(A,B,CA0,CB0,t,h);
tab = [t,m];
n=m;
while(t<tf)
CA0=m(1);
CB0=m(2);
t=t+h;
tab=[tab;t,CA0,CB0];
m = E54(A,B,CA0,CB0,t,h);
n = [n;m];
end
tab;
fprintf('\t--------------------------------\n')
fprintf('\t\t t CA CB\n')
fprintf('\t--------------------------------\n')
fprintf('\t%8.2f %10.5f %10.5f\n',tab')
fprintf('\t--------------------------------\n')
u=0:h:tf;
plot(u',n)
title('CONCENTRACION vs TIEMPO','color','b')
xlabel('Tiempo, t','color','b')
ylabel('Concentracion, C,','color','b')
text(0.35,0.8,'CA','color','r');text(0.3,0.35,'CB','color','r
');
legend('CA: con paso de t= 0.01min','CB: con paso de t =
0.01min')
grid on
EJERCICIO 5.9:
Fermentacin con Penicilina
Un modelo para un reactor discontinuo en el que la penicilina se produce
por fermentacin se ha derivado de la siguiente manera
(constantantinides et al.1970) para la produccin celular y la sntesis de
penicilina, respectivamente:
d y1 b
=b1 y 1 1 y 12 y1 ( 0 ) =0.03
dt b2
d y2
=b3 y 1 y2 ( 0 ) =0.0
dt
Donde
y 1= Concentracin adimensional de la masa celular
t=tiempo adimensional , 0 t 1
b1=13.1
b2=0.94
b3 =1.71
SOLUCION
B.-Usando el mtodo de Runge-Kutta 2 orden
Usando el software Polymath para resolver sistemas de ecuaciones
diferenciales se obtienen los siguientes resultados:
y 1=0.939942
y 2=1.184737
Grafica
y 2=1.18453
Grafica
y 2=1.18485
Grafica
EJERCICIO 5.10:
Cintica de Bioreacciones
El modelo "Monod" para la cintica de bioreaccin puede expresarse
como:
ds ksx
=
dt k s+ s
s ( 0 )=s0 x ( 0 )=x 0
dx ksx
=y bx
dt ks + s
Donde:
Grafica
Para (a)
Usando el software MATLAB para resolver sistemas de ecuaciones
diferenciales se obtienen los siguientes resultados:
Grafica
Cdigo del programa:
function [t,y,x]=euler(f1,f2,t0,tf,y0,x0,n)
h = (tf-t0)/n;
t = t0:h:tf;
x(1)=x0;
y(1)=y0;
for i=1:n
x(i+1)=x(i)+h*f1(x(i),y(i));
y(i+1)=y(i)+h*f2(x(i),y(i));
end
f1=@(x,y) 0.05*x*y/(20+y);
f2=@(x,y) -5*y*x/(20+y);
[t,y,x]=euler(f1,f2,0,2,1000,100,15);
hold on
plot(t,x,'b')
plot(t,y,'r')
xlabel('t')
ylabel('x,s')
axis([0 2 0 1000])
title('sistema de ecuaciones diferenciales')
hold off
grid
tab=[t',y',x'];
fprintf('\t\tMETODO DE EULER\n')
fprintf('\t-----------------------------------\n')
fprintf('\t\t t s x\n')
fprintf('\t-----------------------------------\n')
fprintf('\t%8.4f %10.5f %10.5f\n',tab')
fprintf('\nse observa en la grafica que para un tiempo aproximadamente de
t=2h nos garantiza\n')
fprintf('una buena conversion de la biorreaccion.\n')
Para (b)
Usando el software MATLAB para resolver sistemas de ecuaciones
diferenciales se obtienen los siguientes resultados:
Grafica
Cdigo del programa
y0(1)=100;
y0(2)=1000;
tspan=[0 2];
fg=@(t,y) [0.05*y(1)*y(2)/(20+y(2));-5*y(2)*y(1)/(20+y(2))];
[t,y]=ode23(fg,tspan,y0);
tab=[t,y];
fprintf('\t\tMETODO DE RUNGE-KUTTA 2 ORDEN\n')
fprintf('\t-----------------------------------\n')
fprintf('\t\t t x s\n')
fprintf('\t-----------------------------------\n')
fprintf('\t%8.4f %10.5f %10.5f\n',tab')
fprintf('\t-----------------------------------\n\n')
plot(t,y(:,1),'-r',t,y(:,2),'-b','LineWidth',1)
title('bioreaccion')
xlabel('Tiempo, t')
ylabel('Concentracin,x, s')
fprintf('\nse observa en la grafica que para un tiempo aproximadamente de
t=2h nos garantiza\n')
fprintf('una buena conversion de la biorreaccion.\n')
BIBLIOGRAFIA
Chapra, S. y Canale, R. 2015. Mtodos numricos para ingenieros.
Sptima Edicin.McGraw-Hill/Interamericana Editores, S.A. de C.V.
Mxico