Proyecto Final Métodos Numéricos Practicas 8, 9 Y10 Por Medio de Programación en MATLAB y Polymath
Proyecto Final Métodos Numéricos Practicas 8, 9 Y10 Por Medio de Programación en MATLAB y Polymath
Proyecto Final Métodos Numéricos Practicas 8, 9 Y10 Por Medio de Programación en MATLAB y Polymath
Ingeniería Química
Métodos Numéricos
Proyecto final.
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:
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 ')
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
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')
−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
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.