Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Proyecto Final Métodos Numéricos Practicas 8, 9 Y10 Por Medio de Programación en MATLAB y Polymath

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 25

Universidad Autónoma de Coahuila

Facultad de Ciencias Químicas

Ingeniería Química
Métodos Numéricos

Proyecto final.

Dr. Ernesto Oyervides Muñoz.

Delgado Durón Enrique Alejandro


Matrícula: 19336819
19 de noviembre de 2021
Laboratorio 8
1. En un reactor se efectúan las siguientes reacciones en fase gaseosa
A+ B ⇋C + D … (1 )
A+C ⇋2 E …(2)
A la temperatura de la reacción las constantes de equilibrio son:
Kp1=2.6
Kp2=3.1
Las composiciones iniciales son:
A=2 mol/L y B=1mol/L
Calcule la composición a la salida del reactor, suponiendo que se alcanza el equilibrio.
SOLUCIÓN
El equilibrio químico es un estado del sistema en el que no se observan cambios a medida
que transcurre el tiempo. La expresión matemática que representa al equilibrio químico se
conoce como Ley de Acción de Masas y en el caso de gases se enuncia como: la relación
entre el producto de las concentraciones o presiones parciales de los productos elevadas a
sus respectivos coeficientes estequiométricos, dividido por el producto de las
concentraciones o presiones parciales de los reactivos elevadas a sus respectivos
coeficientes estequiométricos permanece constante en el equilibrio.
Por lo tanto, tenemos que:

PC P D ( P y c ) ( Py d )
Kp1= =
P A P B ( P y A ) ( Py B )

P2E P y 2E
Kp2= =
P A PC P y A PyC

Suponiendo que se toma una muestra de un litro y que: x 1 son los moles de A que
reaccionan en la reacción 1 y x2 los moles de A que reaccionan en la reacción 2.
Composición Inicio Equilibrio
A 2mol 2-x1-x2
B 1 mol 1-x1
C 0 x1-x2
D 0 x1
E 0 2x2
Totales 3 3

Las fracciones mol de cada componente en el equilibrio es la relación de las moles de cada
uno de ellos dividida entre el número de moles totales en el equilibrio, por lo que
sustituyendo tendremos:

x −x x

Kp =
( 3 )( 3 )
1 2

=(x −x )
1

(x ¿¿ 1)
¿
1 1 2
2−x −x 1−x ( 2−x −x ) ( 1−x )
( 3 )( 3 )1 2 1 1 2 1

2
2x

Kp =
( 3 )
=
2
4x 2
2
2
2−x −x x −x ( 2−x −x ) ¿ ¿ ¿
( 3 )( 3 )1 2 1 2 1 2

Ahora tenemos un sistema de dos ecuaciones no lineales, las cuales están en función de x1 y
x2, linealizando estas ecuaciones obtenemos:

f 1 ( x 1 , x 2 )=( x 1−x 2)(x ¿¿ 1)−2.6 ( 2−x 1−x 2 ) ( 1−x 1 )=0 ¿

f 2 ( x 1 , x 2 )=4 x 22−3.1 ( 2−x 1−x 2 ) (x ¿ ¿ 1−x 2)=0 ¿

Resolver para los valores de x1 y x2 usando el método de Newton Raphson para sistemas de
ecuaciones no lineales programado en Matlab, una vez encontrados determinar las
composiciones del sistema en equilibrio.
clc
clear
% Ec. 1= (x1-x2)*x1-2.6*(2-x1-x2)*(1-x1)
% Ec. 2= 4*x2^2-3.1*(2-x1-x2)*(x1-x2)
while true
fprintf('\n ')
disp('Metodo de Newton Raphson Multivariable')
disp('Programa para sistema 2x2')
fprintf('\n ')
valor = input('Para iniciar el programa tecleé 1, de lo contrario
tecleé 0: ');
fprintf('\n ')
switch valor
case 1
syms x1 x2
A1 = input('Ingrese ecuación 1: ');
A2 = input('Ingrese ecuación 2: ');
tol= input('Ingrese toleracia máxima de error: ');
J=jacobian([A1,A2],[x1 x2]);
fprintf('\n\t Matriz Jacobiana \n\n')
pretty(J)
JAC=inline(J);
B=inline([-A1,-A2]');
x1=1;
x2=1;
INJAC=JAC(x1,x2);
INB=B(x1,x2);
SOLUCION=INJAC\INB;
h1=INJAC(:,1);
h2=INJAC(:,2);
igual=['=' '=']';
fprintf('\n\t Evaluación de la matriz Jacobiana y de la
función negativa \n')
fprintf('\t Cuando las incognitas valen 1 \n')
fprintf('\t [J][h]=[-F] \n\n')
format
n=0;
err1=100;
err2=100;
fprintf('\n\t i\t\t X1\t\t X2\t\t Error x1\t\t Error
x2\t\t\n')
fprintf('\t %d\t %.6f\t %.6f\t N/A N/A\n', n, x1,
x2)
while true
if (err1<=tol) && (err2<=tol)
break
else
n=n+1;
INJAC=JAC(x1,x2);
INB=B(x1,x2);
SOL=INJAC\INB;
h1=SOL(1,1);
h2=SOL(2,1);
X1=x1+h1;
X2=x2+h2;
err1=abs(x1-X1);
err2=abs(x2-X2);
fprintf('\t %d\t %.6f\t %.6f\t %.6f\t %.6f\n', n, X1,
X2, err1, err2);
x1=X1;
x2=X2;
end
end
case 0
break
end
sprintf('La soluciones de las ecuaciones son:\n x(1)=%f\n x(2)=
%f\n',X1,X2)
fprintf('\n ')

disp('Ha llegado al fin del programa')


end
Otra forma de resolver el sistema de manera rápida y sencilla empleando MATLAB es
utilizando el comando fsolve, el cual es un solucionador de sistemas no lineales en la que
solamente con introducir las ecuaciones de forma anónima y vectorial nos muestra las
raíces de las ecuaciones.

Las composiciones del sistema en equilibrio son:


Composición Inicio Equilibrio
A 2mol 2-x1-x2
B 1 mol 1-x1
C 0 x1-x2
D 0 x1
E 0 2x2
Totales 3 3

Composición de A en el equilibrio2−x 1−x 2=0.712907 mol

Composición de B en el equilibrio 1−x 1=0.168562 mol

Composición de C en el equilibrio x1 −x2 =0.375783 mol

Composición de D en el equilibrio x 1=0.831438 mol


Composición de E en el equilibrio2 x 2=0.91131 mol

3 mol
Laboratorio 9
AJUSTE DE DATOS A UNA ECUACIÓN
Se tienen los siguientes datos de presión de vapor de Benceno como función de la
temperatura
T (°C) P (mmHg)
-36.7 1
-19.6 5
-11.5 10
-2.6 20
7.6 40
15.4 60
26.1 100
42.2 200
60.6 400
80.1 760

Ajuste los datos a las siguientes ecuaciones:


a) Ajuste los datos de presión de vapor de benceno como función de la temperatura en
grados Kelvin usando polinomios de orden m=1, 2, 3, 4 y 5 T= (K)
Los polinomios por obtener son de la forma:
P=a 0 +a1 T m=1
2
P=a 0 + a1 T + a2 T m=2
2 3
P=a 0 + a1 T + a2 T +a3 T m=3
2 3 4
P=a 0 + a1 T + a2 T +a3 T + a4 T m=4
2 3 4 5
P=a 0 + a1 T + a2 T +a3 T + a4 T +a 5 T m=5
Conversión de la temperatura a K:
T (K) P (mmHg)
236.45 1
253.55 5
261.65 10
270.55 20
280.75 40
288.55 60
299.25 100
315.35 200
333.75 400
353.25 760

clc
clear
% comando para observar el rango de la gráfica fplot(f,[x y])
% comando para verificar la relacion entre x y y en un punto
% double(subs(f,x))
disp('Interpolación por Lagrange')
fprintf('\n ')
xi=input('Ingrese en forma vectorial los datos de xi: ');
fxi=input('Ingrese en forma vectorial los datos de fxi: ');
fprintf('\n ')
n=length(xi);
syms x;
for i=1:n
Li=1;
for j=1:n
if j~=i
Li=Li*((x-xi(j))/(xi(i)-xi(j)));
end
end
L(i)=Li;
end
f=0;
for i=1:n
f=L(i)*fxi(i)+f;
end
f=simplify(expand(f))
q=input('Si desea ver la gráfica de la función, tecleé 1: ');
if q==1
disp('Presione ENTER para ver el gráfico')
pause(5)
figure(1)
grid on
hold on
plot(xi,fxi,'*','linewidt',5)
legend('Puntos')
end
xlabel('Método Lagrange')

P=a 0 +a1 T m=1


40 t 9271
P= −
171 171
2
P=a 0 + a1 T + a2 T m=2

1475 t 2 100010 t 1330613117


P= − +
96957 13851 1551312
2 3
P=a 0 + a1 T + a2 T +a3 T m=3

21373750 t 3 4372736575t 2 29284032646045 t 121504743789259


P= − + −
50023315881 14292375966 400186527048 20788910496
2 3 4
P=a 0 + a1 T + a2 T +a3 T + a4 T m=4

289851255625t 4 293129902375 t 3 555628074696326525t 2


P= − +
143909176105727802 179661892766202 1151273408845822416
−5197886528050880275t 1293339811417519074065
+
85279511766357216 478451286793069056
2 3 4 5
P=a 0 + a1 T + a2 T +a3 T + a4 T +a 5 T m=5

−19933301393352125t 5 729331024321586818025 t 4
P= +
37456207512363056341782 1048773810346165577569896

−760810185529001195293645t 3 792186997917478273173130447 t 2
+
2097547620692331155139792 8390190482769324620559168
−4117594801128361789790447825383 t
335607619310772984822366720
+ 11101840996570640923593195077777
17434162042118077133629440
b) Ecuación de Clepeyron
B
log ( P )= A− T =K
T
Se calculan los valores de log(P) y 1/T como dos nuevas columnas y se hace una regresión
lineal, así los valores obtenidos para a0 y a1 son respectivamente A y B.

clc
clear
disp('Regresión lineal, Ecuación de Clepeyron')
fprintf('\n ')
T=input('Ingrese en forma vectorial los datos de T: ');
P=input('Ingrese en forma vectorial los datos de P: ');
fprintf('\n ')
x=1./T;
y=log10(P);
N=length(x);
X=[ones(N,1),x];
Y=y;
phi=inv(X'*X)*X'*Y;
plot(x,y,'ro');
hold on
grid on
plot(x,phi(1)+phi(2)*x,'b--');
xlabel('1/T');
ylabel('log10(P)');
legend('Puntos')
fprintf('\n ')
disp(['Valor de A: ',num2str(phi(1)),' y el valor de B: ',num2str(-
phi(2))]);
c) Ecuación de Riedel

B
log ( P )= A− +C log ( T ) + DT 2 T =K
T
En este caso se tiene que realizar un ajuste lineal múltiple:
y=b 0 +b 1 x1 +b2 x 2 + b3 x 3
Donde y será el logaritmo de P, x1 la inversa de T, x2 el logaritmo de T, x3 será T2 y los
valores de b0, b1, b2 y b3 que se obtengan del ajuste serán A, B, C y D
respectivamente.
d) Ecuación de Antoine
B
log ( P )= A+ T=° C
T +C
Si reacomodamos la ecuación de Antoine obtenemos:
B
log ( P )= A+
T +C
( T + C ) log ( P )=( T + C ) A + B
Tlog ( P ) +Clog ( P )=TA +CA + B
( AC + B) C log(P)
log ( P )= A+ −
T T
Puede realizarse una regresión lineal múltiple, pero no es muy buena regresión, pues la
variable dependiente aparece en ambos lados de la ecuación, pero con ella podemos obtener
valores aproximados para las variables A, B y C.
Si se realiza un ajuste lineal múltiple:
y=b 0 +b 1 x1 +b2 x 2
Donde y será el logaritmo de P, x1 la inversa de T, x2 el logaritmo de P sobre T, y los
valores de b0, b1 y b2 que se obtengan del ajuste serán A, (AC+B) y (-C) respectivamente.
con estos valores como aproximaciones realizar la regresión no lineal:
B
A+
T +C
P=10
Obteniendo los valores reales de A, B y C.
Comparación de gráficas y su cambio respecto a los valores cercanos y los valores precisos.
Laboratorio 10
Integración Numérica
Encuentre la integral aproximada de la función:

2
1 −x

I=
2
e
( 2 ) dx

√ π −1
La cual da lugar a la curva normal tipificada, entre los límites de -1 y 1
a) Utilice la regla trapezoidal con N=1, 2, 4, 8 y 16
b) Utilice la integración de Simpson 1/3 con N=1, 2, 4, 8 y 16
c) Utilice la integración de Simpson 3/8 con N=1, 2, 4, 8
en todos los casos calcule el porciento de error cometido usando el valor real de la integral
de 0.682

a) Regla trapezoidal con N=1, 2, 4, 8 y 16.


clc
clear
disp('Integral por regla trapezoidal')
fprintf('\n ')
n=1;
for i=1:5
x=linspace(-1,1,n+1);
y=(((2/pi^0.5)*(exp(-x.^2/2))));
iaprox=trapz(x,y);
error=abs(0.682-iaprox);
disp(['Con N=' num2str(n) ' el valor de la integral es = '
num2str(iaprox,6) ', con un error de = ' num2str(error)])
fprintf('\n ')
n=2*n;
end
b) Integración de Simpson 1/3

clc;
clear all;
close all;
format long;
%Función a integrar: (((2/pi^0.5)*(exp(-x.^2/2))))
fun=input('Ingrese la función f(x) = ','s');
f=inline(fun);
n=[1 2 4 8 16];
a=-1;
b=1;
h=(b-a)*n.^-1;
sumai=0;
sumap=0;
for i=1:n
sumai=sumai+feval(f,h(i)+a);
I=(h/3)*(feval(f,a)+4*sumai+feval(f,b));
error=abs(0.682-I);
sprintf(['N = ' num2str(n) '\n' , 'Integral = ' num2str(I) '\n' ,
'Error = ' num2str(error)])
end
c) Integración de Simpson 3/8

clc;
clear all
%Función a integrar: (((2/pi^0.5)*(exp(-x.^2/2))))
fun=input('Ingrese la función f(x) = ','s');
f=inline(fun);
a=-1;
b=1;
n=[1 2 4 8];
h=(b-a)*n.^-1;
I=(3*h/8)*(f(a)+3*f((2*a+b)/3)+3*f((2+2*b)/3));
error=abs(0.682-I);
sprintf(['N = ' num2str(n) '\n' , 'Integral = ' num2str(I) '\n' , 'Error
= ' num2str(error) '\n'])
Conclusiones generales:
En cuanto al laboratorio número 8 en el que se piden las composiciones de salida del
reactor suponiendo el equilibrio, esté se puede resolver mediante el conocimiento de la ley
de acción de masas y el equilibrio químico, por lo cual se logró llegar a dos ecuaciones
finales que posteriormente se resuelven por el método de Newton-Raphson multivariable en
la que es posible de una manera rápida y precisa, utilizando matriz jacobiana, encontrar el
valor así como el error de las soluciones. de la misma forma una alternativa para no
programar sería utilizar el comando fsolve de MATLAB el cual sólo es cuestión de
introducir la función de manera anónima y correr el comando mostrando así los resultados
aparentes de la variable.
Por su parte en el laboratorio 9 se nos pide realizar ajustes de datos a una ecuación
partiendo de la presión de vapor del benceno en función de la temperatura. Con base a esto,
se procede a realizar un ajuste por polinomios de Lagrange en primera instancia, la cual nos
muestra las funciones dependiendo el grado requerido y de la misma manera la gráfica
correspondiente la cual ejemplifica el paso de la función por dichos puntos de intersección.
asimismo se realizó un ajuste a la ecuación de Clepeyron, en la cual por medio de una
regresión lineal se obtienen los valores de A y B y mostrando de la misma manera una
gráfica en la que se pueda ver la pendiente y los puntos trazados; Por otro lado también se
desarrolló el ajuste para la ecuación de Riedel, en la que se desarrolló una regresión lineal
multivariable mostrándonos así los valores respectivos de A, B, C y D. Finalmente, se
realizó el ajuste a la ecuación de Antoine en la que por medio de una regresión lineal
múltiple se obtienen los valores cercanos de A, B y C, para posteriormente realizar una
regresión no lineal y obtener los valores reales pudiéndose observar solamente una
variación en el coeficiente B. en este caso se aprecian 2 gráficas en las cual es si tomamos
los valores cercanos comparados con los valores reales de la regresión no lineal, se observa
que hay una similitud en las curvas formadas pero en la regresión no lineal es una exactitud
precisa al quedar empalmadas la ecuación experimental con la teórica.
Por último, en el laboratorio 10 se realizó la integración numérica de una función por
métodos de Simpson 1/3 y 3/8 y el método trapezoidal mostrando los valores de la integral
y el error de acuerdo con la integral analítica de una manera rápida programando el
comando en MATLAB lo cual nos ayuda en la resolución de problemas de diversa índole
empleando estos métodos.

También podría gustarte