Académique Documents
Professionnel Documents
Culture Documents
INGENIERÍA QUÍMICA
UNIVERSIDAD DE
LOS ANDES
________
Nicolás Ratkovich
Miguel Daza
Esteban Guerrero
Hugo Pineda
Juan Pablo Valdés
________
INTRODUCCIÓN AL 2018
MODELAMIENTO Y
SIMULACIÓN
IQUI 3039
Universidad de los Andes | Vigilada Mineducación
Reconocimiento como Universidad: Decreto 1297 del
30 de mayo de 1964.
Reconocimiento personería jurídica: Resolución 28 del
23 de febrero de 1949 Minjusticia.
CONTENIDO
SECCIÓN DE MATLAB
1. Introducción 6
2. Introducción a MATLAB 7
2.1. Apariencia 7
2.2. Variables 7
2.3. Operadores 8
8. MESH 81
3
SECCIÓN DE CFD
9. Dinámica Computacional de Fluidos (CFD) 89
4
DEPARTAMENTO DE
INGENIERÍA QUÍMICA
UNIVERSIDAD DE
LOS ANDES
________
Nicolás Ratkovich
Miguel Daza
Esteban Guerrero
Hugo Pineda
Juan Pablo Valdés
SECCIÓN DE ________
MATLAB Y 2018
MÉTODOS
NUMÉRICOS
Universidad de los Andes | Vigilada Mineducación
Reconocimiento como Universidad: Decreto 1297 del
30 de mayo de 1964.
Reconocimiento personería jurídica: Resolución 28 del
23 de febrero de 1949 Minjusticia.
5
1. INTRODUCCIÓN
Propósito
2. INTRODUCCIÓN A MATLAB
MATLAB® es un entorno matemático de simulación de alto desempeño,
en el cual es posible operar matrices para la resolución de cálculos en
ciencia e ingeniería. Esta herramienta incluye un entorno abierto, en el cual
se integra la programación con la visualización. Al tratarse de un ambiente
de programación amigable, cuenta con un gran número de ayudas y
funciones predeterminadas. Por otro lo anterior, MATLAB® es una
herramienta que es utilizada en diversas disciplinas y sus usos incluyen el
desarrollo de algoritmos, el análisis de datos, el desarrollo de aplicaciones
e incluso el modelamiento y simulación de prototipos. A continuación, se
introducen algunos de los conceptos básicos de esta herramienta.
2.1. APARIENCIA
MATLAB cuenta con cinco paneles principales como se evidencia en al
figura 1:
Carpeta de Trabajo: Muestra la carpeta y los archivos de la ruta actual
de trabajo.
Command Window: Muestra los resultados y los comandos
empleados.
Workspace: Muestra las variables en uso.
Command History: Muestra el historial de los comandos utilizados.
Barra de herramientas: Esta barra incluye las opciones de manejo del
archivo, complementos extra y aplicaciones disponibles.
2.2. VARIABLES
Figura 2. Interfaz general del software Existen diversos tipos de variables que pueden ser inicializadas. Para este
MATLAB versión 2016 curso, serán de particular importancia las siguientes.
𝐵 = [3; 4] ;
para vector columna.
7
Es importante recordar que en MATLAB se diferencian mayúsculas de
minúsculas.
2.3. OPERADORES
Aritméticos:
Para escalares las operaciones se definen con:
Suma: +
Resta: -
Multiplicación: *
División: /
Potencia: ^
Exponencial de n: exp(n)
Logaritmo Natural de n: log(n)
Logaritmo en base 10 de n: log10(n)
Traspuesta: M‘
Norma: norm(M)
Determinante: det(M)
Inversa: inv(M)
Lógicos y Relacionales
Mayor que: >
Mayor o igual que: >=
Igual: ==
Menor o igual que: <=
Menor que: <
Distinto de: ~=
Condicionales
La sintaxis de condicionales en MATLAB se escribe como:
if Condición 1
Expresión 1
elseif Condición 2
Expresión 2
else
Expresión 3
end
8
𝜋 : Pi
∞: Inf
Not a Number: NaN
Longitud del vector v: length(v)
Limpieza del command window: clc
Eliminación de variables del workspace: clear all
Cerrar todas las ventanas: Close all
Comando de parada: Ctrl+C
Evaluación del tiempo de ejecución: tic … toc
NombreDeLaFunción=@(argumentos)expresión
f=@(x,y) y^2+3*x+8*x^2;
Propósito
En Ingeniería Química, pocas veces los sistemas son compuestos por una
única variable. Por esta razón es importante estudiar métodos numéricos
robustos que permitan la resolución de problemas con múltiples variables
y ecuaciones. A lo largo de este capítulo se van a presentar distintos
métodos numéricos para la resolución de ecuaciones no-lineales que sean
dependientes de una (inicialmente) o múltiples variables (en la segunda
sección del capítulo).
9
En este caso, dado que el sistema se ordena de la forma 𝑥 = 𝑔(𝑥), se sabe
que la raíz estará en la intersección de la línea 𝑥 = 𝑦 y 𝑥 = 𝑔(𝑥). Por esto,
mediante cada iteración, este método evalúa un punto cada vez más
cercano a la intersección hasta cumplir con un criterio de tolerancia. Así,
por ejemplo, al operar 𝑥2 = 𝑔(𝑥1 ), el valor de 𝑔(𝑥2 ) será más cercano a
𝑥 = 𝑦 que el de 𝑥1 . Una representación aproximada del métodd se puede
ver en la figura 3.
Procedimiento
𝑥 = 𝑔(𝑥)
2. Fijar un valor inicial 𝑥1 .
3. Operar iterativamente
𝑥𝑛+1 = 𝑔(𝑥𝑛 )
𝑥𝑛+1 − 𝑥𝑛
| | < 𝑡𝑜𝑙𝑒𝑟𝑎𝑛𝑐𝑖𝑎
Figura 3. Representación gráfica del 𝑥𝑛
método de sustitución sucesiva
Si este se cumple, salir del ciclo. Si no, 𝑥𝑛 = 𝑥𝑛+1 .
Ecuación general
𝑥𝑛+1 = 𝑔(𝑥𝑛 ) (1)
Ejemplo
𝑥2 + 𝑒 𝑥 − 2
𝑔(𝑥) = 𝑥 = (2)
3
Función Principal:
function EJ_SS()
% Preparación Codigo
clc
close all
% Parametros
cond=true;
tol=1e-6;
x0=0;
% Método Numérico
while cond==true
xnew=f(x0);
10
error=abs((xnew-x0)/x0);
if error<tol
break
else
x0=xnew;
end
end
% Solución
disp('Valor "x"')
disp(xnew)
Función Secundaria:
function rta=f(x)
% Ecuación
rta=(x.^2+exp(x)-2)/3;
Resultado
𝒙 = −𝟎. 𝟑𝟗𝟎𝟑
Procedimiento
𝑥 = 𝑔(𝑥)
Figura 4. Representación gráfica del 2. Fijar un valor inicial 𝑥1 .
método de Wegstein
3. Operar la primera iteración
𝑥𝑛 = 𝑔(𝑥1 )
4. Operar iterativamente
𝑥1 𝑔(𝑥𝑛 ) − 𝑥𝑛 𝑔(𝑥1 )
𝑥𝑛+1 =
𝑥1 − 𝑔(𝑥1 ) − 𝑥𝑛 + 𝑔(𝑥𝑛 )
11
Ecuación general
𝑥𝑛−1 𝑔(𝑥𝑛 ) − 𝑥𝑛 𝑔(𝑥𝑛−1 )
𝑥𝑛+1 = (3)
𝑥𝑛−1 − 𝑔(𝑥𝑛−1 ) − 𝑥𝑛 + 𝑔(𝑥𝑛 )
Ejemplo
Solución
𝑒 3−𝑥 + sin(𝑥)
𝑔(𝑥) = 𝑥 = (4)
5
Función Principal:
function EJ_W()
% Preparación Codigo
clc
close all
% Parametros
cond=true;
tol=1e-6;
xo=0.5;
% Iteración 1
xa=f(xo);
% Método Numérico
while cond==true
xnew=(xo*f(xa)-xa*f(xo))/(xo-f(xo)-xa+f(xa));
error=abs((xnew-xa)/xa);
if error<tol
break
else
xo=xa;
xa=xnew;
end
end
% Solución
disp('Valor "x"')
disp(xnew)
Función Secundaria:
function rta=f(x)
% Ecuación
rta=(1/5)*(exp(3-x)+sin(x));
Resultado
𝒙 = 𝟏. 𝟓𝟗𝟎𝟒
12
3.1.3. MÉTODO NUMÉRICO DE NEWTON RAPHSON
𝑓 ′′ (𝑥1 )(𝑥 − 𝑥1 )2
𝑓(𝑥) = 𝑓(𝑥1 ) + 𝑓 ′ (𝑥1 )(𝑥 − 𝑥1 ) +
2!
𝑓 ′′′ (𝑥1 )(𝑥 − 𝑥1 )3
+ +⋯ (5)
3!
Donde 𝑓(𝑥) = 0. Por lo tanto, acotando la serie a los primeros dos
Figura 5. Representación gráfica del términos, la ecuación 5 nos queda de la siguiente forma:
método de Newton Raphson
𝑓(𝑥1 )
𝑥 = 𝑥1 − (6)
𝑓 ′ (𝑥1 )
𝑓(𝑥0 + ℎ) − 𝑓(𝑥0 )
𝑓 ′ (𝑥) = (7)
ℎ
Procedimiento
𝑓(𝑥) = 0
3. En cada iteración
a. Calcular la derivada de la función en el punto
𝑓(𝑥0 + ℎ) − 𝑓(𝑥0 )
𝑓 ′ (𝑥0 ) = (8)
ℎ
b. Aproximar la raíz
𝑓(𝑥0 )
𝑥𝑛 = 𝑥0 − (9)
𝑓 ′ (𝑥0 )
𝑥𝑛 −𝑥𝑜
c. Si | | < 𝑡𝑜𝑙𝑒𝑟𝑎𝑛𝑐𝑖𝑎, salir del ciclo. La raíz será igual
𝑥𝑛
a 𝑥𝑛 .
d. De lo contrario 𝑥0 = 𝑥𝑛
13
Ecuación general
𝑓(𝑥𝑛 )
𝑥𝑛+1 = 𝑥𝑛 − (10)
𝑓 ′ (𝑥𝑛 )
Ejemplo
Solución
Función Principal:
function EJ_NR()
% Preparación Codigo
clc
close all
% Parametros
cond=true;
tol=1e-6;
h=1e-3;
x0=1;
% Método Numérico
while cond==true
f0=f(x0);
df0=(f(x0+h)-f(x0))/h;
xnew=x0-f0/df0;
error=abs((xnew-x0)/x0);
if error<tol
break
else
x0=xnew;
end
end
% Solución
disp('Valor "x"')
disp(xnew)
Función Secundaria:
function rta=f(x)
% Ecuación
rta=log(1+x.^2)-(x^(0.5));
Resultado
𝒙 = 𝟏. 𝟓𝟗𝟎𝟒
14
Para garantizar esto, se debe cumplir que los signos de la función evaluada
en los puntos 𝑥1 , 𝑥2 deben ser opuestos. Por tanto, la restricción se plantea
como 𝑓(𝑥1 )𝑓(𝑥2 ) < 0 se debe cumplir en todo momento. La idea de este
método es dividir cada intervalo en la mitad y posteriormente, analizando
los signos, se conoce el nuevo intervalo sobre el cual será evaluada la
restricción. Una representación aproximada de una función resuelta por
bisección se puede ver en la figura 6.
𝑓(𝑥) = 0
3. Aproximar la raíz a:
𝑥2 + 𝑥1
𝑥𝑚 = (11)
2
4. Evaluar iterativamente
a. Si |𝑓(𝑥𝑚 )| < 𝑡𝑜𝑙𝑒𝑟𝑎𝑛𝑐𝑖𝑎, salir del ciclo. La raíz será igual
a 𝑥𝑚 .
b. Si 𝑓(𝑥1 )𝑓(𝑥𝑚 ) < 0 entonces 𝑥2 = 𝑥𝑚 de lo contrario se
tendrá que 𝑥1 = 𝑥𝑚
Ecuación general:
Punto Medio
(𝑢𝑝) (𝑙𝑜𝑤)
(𝑚) 𝑥𝑛 + 𝑥𝑛
𝑥𝑛 = (12)
2
Decisión para el límite superior
15
8𝑥 − 𝑥 2 + 5 = 0
Solución
Función Principal:
function EJ_B()
% Preparación Codigo
clc
close all
% Parametros
cond=true;
tol=1e-6;
xl=6;
xu=10;
% Método numérico
while cond==true
xm=(xu+xl)/2;
fl=f(xl);
fm=f(xm);
error=abs(fm);
if error<tol
break
elseif fl*fm>0
xl=xm;
else
xu=xm;
end
end
disp('Valor "x"')
disp(xm)
Función Secundaria:
function rta=f(x)
% Ecuación
rta=8.*x-x.^2+5;
Resultado
𝒙 = 𝟖. 𝟓𝟖𝟐
Procedimiento
16
𝑓(𝑥) = 0
4. Evaluar iterativamente
Ecuación general
1. Punto de Intersección:
𝑓(𝑥 (𝑢𝑝) )(𝑥 (𝑢𝑝) − 𝑥 (𝑙𝑜𝑤) )
𝑥𝑛 = 𝑥 (𝑢𝑝) − (16)
𝑓(𝑥 (𝑢𝑝) ) − 𝑓(𝑥 (𝑙𝑜𝑤) )
Ejemplo
𝑥 3 − 4𝑥 2 + 2 = 0
Solución
Función Principal:
function EJ_FP()
% Preparación Codigo
clc
close all
% Parametros
cond=true;
17
tol=1e-6;
xl=0;
xu=2;
% Método numérico
while cond==true
xn=xu-(f(xu)*(xu-xl))/(f(xu)-f(xl));
fl=f(xl);
fn=f(xn);
error=abs(fn);
if error<tol
break
elseif fl*fn>0
xl=xn;
else
xu=xn;
end
end
disp('Valor "x"')
disp(xn)
Función Secundaria:
function rta=f(x)
% Ecuación
rta=x^3-4*x^2+2;
Resultado
𝒙 = 𝟎. 𝟕𝟖𝟗𝟐
Ecuación general
𝑓(𝑥𝑛 )(𝑥𝑛−1 − 𝑥𝑛 )
𝑥𝑛+1 = 𝑥𝑛 − (19)
𝑓(𝑥𝑛−1 ) − 𝑓(𝑥𝑛 )
Ejemplo
Figura 8. Representación gráfica del
método Secante
Resolver la siguiente ecuación no lineal utilizando como valores iniciales
𝑥0 = 0 y 𝑥1 = 1.
3𝑥 − 2.5 = 0
Solución
18
Función Principal:
function EJ_S()
% Preparación Codigo
clc
close all
% Parametros
cond=true;
tol=1e-6;
xo=0;
xa=1;
% Método Numérico
while cond==true
fo=f(xo);
fa=f(xa);
xnew=xa-(fa*(xo-xa))/(fo-fa);
error=abs((xnew-xo)/xo);
if error<tol
break
else
xo=xa;
xa=xnew;
end
end
% Solución
disp('Valor "x"')
disp(xnew)
Función Secundaria:
function rta=f(x)
% Ecuación
rta=3.^x-2.5;
Resultado
𝒙 = 𝟎. 𝟖𝟑𝟒𝟎
Emplee para esto los 6 métodos explicados en esta sección y compare los
resultados en términos de tiempo de ejecución y número de iteraciones.
Solución
19
Función Principal:
function MetodosUnivariables()
close all
clear all
clc
tol=1e-9;
x0=0.05; %
%Sustitución Sucesiva------------------------------------
tic
for i=1:1:100
xn=G(x0);
if (abs((x0-G(x0))/x0)<tol)
disp(strcat('Sustituciones Sucesivas:',
num2str(x0)));
disp(strcat('El número de iteraciones de
Sustitución Sucesiva es de: ', num2str(i)));
break
else
x0=xn;
end
end
toc
disp(' ');
%Wegstein------------------------------------------------
x0=0.05; %
tic
x1= G(x0);
for i=1:1e6
if abs((x0-x1)/x0)<tol
disp(strcat('Wegstein: ', num2str(x0)));
disp(strcat('El número de iteraciones de Wegstein
es de: ', num2str(i)));
break
else
xn=(x0*G(x1)-x1*G(x0))/(x0-G(x0)-x1+G(x1));
x0=x1;
x1=xn;
end
end
toc
disp(' ');
%Bisección-----------------------------------------------
x0=0.05; %
tic
l=0.0001;
u=6;
if F(l)*F(u)>0
disp('El rango seleccionado no es adecuado para el
método de Bisección, por lo tanto la respuesta no
será válida.')
end
for i=1:1e6
m=(l+u)*0.5;
20
if abs(F(m))<tol
disp(strcat('Biseccion: ', num2str(m)));
disp(strcat('El número de iteraciones de
Bisección es de: ', num2str(i)));
break
elseif (F(m)*F(l))<0
u=m;
else
l=m;
end
end
toc
disp(' ');
%Falsa Posicion------------------------------------------
x0=0.05; %
tic
xi=0.1;
xd=6;
fi=F(xi);
fd=F(xd);
if (fi*fd)>0
disp('El rango seleccionado no es adecuado para el
método de Falsa Posición, por lo tanto la respuesta
no será válida.')
end
for i=1:1e6
fi=F(xi);
fd=F(xd);
xn=xi-fi*(xi-xd)/(fi-fd);
fn=F(xn);
if(abs(fn)<tol)
disp(strcat('Falsa Posición: ', num2str(xn)));
disp(strcat('El número de iteraciones de Falsa
Posición es de: ', num2str(i)));
break
elseif (fn*fi)>0
xi=xn;
else
xd=xn;
end
end
toc
21
der=(F(x0+h)-F(x0))/h;
x0=x0-fun/der;
end
end
toc
end
Función Secundaria:
%Función secundaria de la forma f(x)=0-------------------
function R=F(fr)
miu=1.002E-3; %N*s/m2
rho=998.2; %kg/m3
v=10; %m/s
epsi=0.002e-3; %m
D=0.05; %m
Re=v*rho*miu/D;
R=1/sqrt(fr)+2*log10(((epsi/D)/3.7)+(2.51/(Re*sqrt(
fr))));
end
miu=1.002E-3; %N*s/m2
rho=998.2; %kg/m3
v=10; %m/s
epsi=0.002e-3; %m
D=0.05; %m
Re=v*rho*miu/D;
R=1/(2*log10(((epsi/D)/3.7)+(2.51/(Re*sqrt(fr)))))^
2;
end
Resultado
22
Procedimiento
𝕏 = 𝑔(𝕏)
3. Operar iterativamente
𝕏𝑛+1 = 𝑔(𝕏𝑛 )
Ecuación general
Ejemplo
Solución
𝑔1 (𝕏) = 𝑥1 = (400 − 𝑥22 )0.5
𝑔2 (𝕏) = 𝑥2 = 28 − 𝑥1
Función Principal:
function EJ_SSM()
% Preparación Codigo
clc
close all
% Parametros
cond=true;
tol=1e-6;
x0=[5;5];
% Método Numérico
while cond==true
xnew=ecu(x0);
error=abs(xnew-x0);
if error<tol
break
else
x0=xnew;
end
end
% Solución
disp('Valor "x"')
disp(xnew)
23
Función Secundaria:
function f=ecu(x)
% Variables
x1=x(1);
x2=x(2);
% Ecuación
f(1,1)=(400-x2^2)^0.5;
f(2,1)=28-x1;
Resultado
𝑥1 = 16 ; 𝑥2 = 1
Procedimiento
𝕏 = 𝑔(𝕏)
𝕏𝑛 = 𝑔(𝕏𝑛−1 )
4. Operar iterativamente
24
Ecuación general
Ejemplo
3𝑥12 + 2𝑥22 = 59
𝑥1 + 2𝑥2 = 11
Solución
0.5
59 − 2𝑥22
𝑔1 (𝕏) = 𝑥1 = ( )
3
11 − 𝑥1
𝑔2 (𝕏) = 𝑥2 =
2
Función Principal:
function EJ_WM()
% Preparación Codigo
clc
close all
% Parametros
cond=true;
tol=1e-6;
xo=[1;1];
% Iteración 1
xa=ecu(xo);
% Método Numérico
while cond==true
xnew=(xo.*ecu(xa)-xa.*ecu(xo))./(xo-ecu(xo)-
xa+ecu(xa));
error=abs(xnew-xa);
if error<tol
break
else
xo=xa;
xa=xnew;
end
end
% Solución
disp('Valor "x"')
disp(xnew)
Función Secundaria:
function f=ecu(x)
% Variables
x1=x(1);
x2=x(2);
% Ecuación
f(1,1)=((59-2*x2^2)/3)^0.5;
f(2,1)=(11-x1)/2;
25
Resultado
𝑥1 = 3 ; 𝑥2 = 4
𝜕𝑓1 𝜕𝑓1
⋯
𝜕𝑥1 𝜕𝑥𝑛
𝐽(𝕏) = ⋮ ⋱ ⋮
𝜕𝑓𝑚 𝜕𝑓𝑚
⋯
[ 𝜕𝑥1 𝜕𝑥𝑛 ]
𝑓(𝑥 + ℎ) − 𝑓(𝑥)
𝑓 ′ (𝑥) =
ℎ
Procedimiento
𝑓(𝕏) = 0
3. En cada iteración
a. Calcular la derivada de la función en el punto
b. Aproximar la raíz
d. De lo contrario 𝕏𝑛 = 𝕏𝑛+1 .
Ecuación general
26
Ejemplo
𝑥1 6
=
𝑥2 5
Solución
Función Principal:
function EJ_NM()
% Preparación Codigo
clc
close all
% Parametros
cond=true;
tol=1e-6;
x0=[1;1];
% Método Numérico
J=zeros(length(x0),length(x0));
while cond==true
f0=ecu(x0);
% Jacobiano
for i=1:length(x0)
h=zeros(length(x0),1);
h(i)=1e-3;
df=(ecu(x0+h)-ecu(x0))/h(i);
J(:,i)=df;
end
xnew=x0-(J^-1)*f0;
error=abs(xnew-x0);
if error<tol
break
else
x0=xnew;
end
end
% Solución
disp('Valor "x"')
disp(xnew)
Función Secundaria:
function f=ecu(x)
% Variables
x1=x(1);
x2=x(2);
% Ecuación
f(1,1)=x1*x2-20;
f(2,1)=x1-(6/5)*x2;
27
Resultado
𝑥1 = 4.8990 ; 𝑥2 = 4.0825
Procedimiento
(𝑦 − 𝐴𝑛−1 𝑠)(𝑠)𝑇
𝐴𝑛 = 𝐴𝑛−1 + (24)
‖𝑠‖2
En donde:
𝑠 = 𝕏𝑛 − 𝕏𝑛−1 (26)
Ejemplo
3𝑥1 + 2 = 𝑥2
𝑥12 − 5 = 𝑥2
Solución
Función Principal:
function EJ_BR()
% Preparación Codigo
28
clc
close all
% Parametros
cond=true;
tol=1e-6;
xo=[10;10];
% Iteración 1
Fo=ecu(xo);
Jo=zeros(length(xo),length(xo));
for i=1:length(xo)
h=zeros(length(xo),1);
h(i)=1e-3;
df=(ecu(xo+h)-ecu(xo))/h(i);
Jo(:,i)=df;
end
xa=xo-(Jo^-1)*Fo;
% Método Numérico
while cond==true
Fa=ecu(xa);
s=xa-xo;
y=Fa-Fo;
Ja=Jo+((y-Jo*s)*s')/(norm(s)^2);
xnew=xa-(Ja^-1)*Fa;
error=abs(xnew-xa);
if error<tol
break
else
xo=xa;
xa=xnew;
Fo=Fa;
Jo=Ja;
end
end
% Solución
disp('Valor "x"')
disp(xnew)
Función Secundaria:
function f=ecu(x)
% Variables
x1=x(1);
x2=x(2);
% Ecuación
f(1,1)=3*x1+2-x2;
f(2,1)=x1^2-5-x2;
Resultado
𝑥1 = 4.5414 ; 𝑥2 = 15.6241
29
explicado anteriormente para el método de Broyden, pero las ecuaciones
principales son ligeramente diferentes y se muestran a continuación:
Ecuación general
𝕏𝑛+1 = 𝕏𝑛 − [𝐴−1
𝑛 ]𝑓(𝕏𝑛 ) (28)
−1
(𝑠 − [𝐴−1 𝑇 −1
𝑛−1 ]𝑦)(𝑠) [𝐴𝑛−1 ]
[𝐴−1
𝑛 ] = [𝐴𝑛−1 ] + (29)
(𝑠)𝑇 [𝐴−1
𝑛−1 ]𝑦
𝑠 = 𝕏𝑛 − 𝕏𝑛−1 (30)
Ejemplo
𝑥𝑅,𝑐 + 𝑥𝑅,𝑏 = 1
𝑥𝐸,𝑓 + 𝑥𝐸,𝑏 = 1
𝑥𝐸,𝑏
𝐾 = 0.68 =
𝑥𝑅,𝑏
Solución
Función Principal:
function Sherman()
% Preparación
clc
clear all
close all
% Parametros
30
xo=[100,150,0.5,0.5,0.5,0.5]'; %Vector de condiciones
inniciales
tol=1e-4;
error=100;
% Solución
% --- Jacobiano inicial
dFo=zeros(length(xo),length(xo));
for i=1:length(xo)
h=zeros(length(xo),1);
h(i)=1e-4;
dF=(ecu(xo+h)-ecu(xo))/h(i); %Definicion derivada
dFo(:,i)=dF;
end
% Para el primer dato
Fo=ecu(xo);%Función evaluada en la condición inicial
dFo_inv=inv(dFo);%Inversa Jacobiano inicial
delta=-(dFo_inv*Fo);
xa=xo+delta; %Calculo del primer valor
% --- Algoritmo
while error>tol
Sk=(xa-xo);
Fa=ecu(xa);
yk=Fa-Fo;
dFa_inv=dFo_inv+(((Sk-
dFo_inv*yk)*Sk'*dFo_inv)/(Sk'*dFo_inv*yk));
delta=-(dFa_inv*Fa);
xnew=xa+delta;
error=abs(delta);
xo=xa;%Actualización valor "anterior"
Fo=Fa;%Actualización evaluación función
dFo_inv=dFa_inv;%Actualización matriz
xa=xnew;%Actualización
end
% Reporte
fprintf('R= %g \n',xnew(1))
fprintf('E= %g \n',xnew(2))
fprintf('xRb= %g \n',xnew(3))
fprintf('xRc= %g \n',xnew(4))
fprintf('xEb= %g \n',xnew(5))
fprintf('xEf= %g \n',xnew(6))
Función Secundaria:
function f=ecu(x)
% Variables
R=x(1);
E=x(2);
xRb=x(3);
xRc=x(4);
xEb=x(5);
xEf=x(6);
% Parametros
F=100;
S=150;
xFc=0.9;
xSf=0.9999;
K=0.68;
% Ecuaciones -> Residuales
Ec1=F+S-R-E;
Ec2=F*xFc-R*xRc;
Ec3=S*xSf-E*xEf;
31
Ec4=xRc+xRb-1;
Ec5=xEf+xEb-1;
Ec6=K-xEb/xRb;
f=[Ec1 Ec2 Ec3 Ec4 Ec5 Ec6]';
Resultado
𝑟𝑥𝑛 1: 𝑀 + 𝐻 → 𝑋 + 𝑀𝑒
𝑟𝑥𝑛 2: 𝑋 + 𝐻 → 𝑇 + 𝑀𝑒
Las cinéticas de reacción con respecto a los reactivos son las siguientes:
(𝑓𝑡 3 𝑙𝑏 𝑚𝑜𝑙)0.5
𝑟1𝑀 = 𝑘1 𝐶𝑀 𝐶𝐻0.5 ; 𝑘1 = 55.20
ℎ
(𝑓𝑡 3 𝑙𝑏 𝑚𝑜𝑙)0.5
𝑟2𝑋 = 𝑘2 𝐶𝑋 𝐶𝐻0.5 ; 𝑘2 = 30.20
ℎ
Figura 12. Reacciones para la
producción del m-xileno
Encuentre el comportamiento de las concentraciones de los cinco
compuestos para un rango de tiempo espacial (𝜏) de 0 a 1 h. Las reacciones
se dan en un reactor CSTR a una temperatura constante de 1500ºR, a una
presión constante de 35 atm y a una alimentación de hidrógeno y mesitileno
con fracciones molares de 0.667 y 0.333, respectivamente. Adicionalmente,
encuentre gráficamente el punto en que se debería operar teniendo en
cuenta que el compuesto de interés es el m-xileno.
Planteamiento:
32
Debido a que no hay caída de presión, no hay cambio de temperatura y no
hay cambio en el número de moles (tal y como se puede ver en las
reacciones):
𝝊 = 𝝊𝟎
Mesitileno: 𝑟𝑀 = 𝑟1𝑀
𝑟𝑀 = −𝑘1 𝐶𝑀 𝐶𝐻0.5
Tolueno: 𝑟𝑇 = 𝑟2𝑇
𝑟𝑇 = 𝑟2𝑋
𝑟𝑇 = 𝑘2 𝐶𝑋 𝐶𝐻0.5
33
En términos de métodos numéricos, dado que se tiene un sistema de
ecuaciones múltiples (5 variables y 5 ecuaciones) que deben ser resueltas
para cada valor de 𝜏, los métodos más apropiados para resolverlas son
Newton-Raphson multivariable y Wegstein.
Solución
Método de Wegstein:
Función Principal:
function rxnmultiplesw()
clear all
clc
% Convenciones utilizadas:
% H: Hidrógeno
% M: Mesistileno
% X: Xileno
% Me: Metano
% T: Tolueno
for i=1:length(tau)
x1=ecuaciones(x0,tau(i));
%Recorrido del método
while error>tol && iter<itermax
x2=(x0.*ecuaciones(x1,tau(i))-
x1.*ecuaciones(x0,tau(i)))./(x0-ecuaciones(x0,tau(i))-
x1+ecuaciones(x1,tau(i)));
% Criterio
error=norm((x2-x1));
iter=iter+1;
% Actualización
x0=x1;
x1=x2;
end
ch(i)=x2(1);
cm(i)=x2(2);
cx(i)=x2(3);
cme(i)=x2(4);
ct(i)=x2(5);
end
plot(tau,ch,tau,cm,tau,cx,tau,cme,tau,ct);
34
legend('Hidrógeno','Mesitileno','Xileno','Metano','Toluen
o');
xlabel('tau (h)');
ylabel('Concentración (lb mol/ft3)');
end
Función Secundaria:
%Ecuaciones a resolver
function ans=ecuaciones(c,tau)
%Temperatura (constante)
T=1500; %R
%Presión (constante)
P=35; %atm
ch=c(1);
cm=c(2);
cx=c(3);
cme=c(4);
ct=c(5);
%Ecuaciones en la forma x=f(x)
ans1=ch0-(k1*(ch^0.5)*cm+k2*(ch^0.5)*cx)*tau;
ans2=cm0-k1*(ch^0.5)*cm*tau;
ans3=(k1*(ch^0.5)*cm-k2*(ch^0.5)*cx)*tau;
ans4=(k1*(ch^0.5)*cm+k2*(ch^0.5)*cx)*tau;
ans5=k2*(ch^0.5)*cx*tau;
ans=[ans1;ans2;ans3;ans4;ans5];
end
Función Principal:
function rxnmultiples()
clear all
clc
35
% Convenciones utilizadas:
% H: Hidrógeno
% M: Mesistileno
% X: Xileno
% Me: Metano
% T: Tolueno
for i=1:length(tau)
iter=0;
itermax=1000;
error=1000;
tol=1e-6;
fx0=ecuaciones(x0,tau(i));
jx0=jacobian(x0,tau(i));
delta=-inv(jx0)*fx0;
xnew=x0+delta;
%Criterio
error=norm(delta);
%Actualización
x0=xnew;
end
ch(i)=xnew(1);
cm(i)=xnew(2);
cx(i)=xnew(3);
cme(i)=xnew(4);
ct(i)=xnew(5);
end
plot(tau,ch,tau,cm,tau,cx,tau,cme,tau,ct);
legend('Hidrógeno','Mesitileno','Xileno','Metano','Toluen
o');
xlabel('tau (h)');
ylabel('Concentración (lb mol/ft3)');
ylim([0,0.023]);
end
Función Jacobiano:
% Función que calcula el jacobiano
function j=jacobian(x,tau)
36
n=length(x);
h=1e-9;
for i=1:n
dh=zeros(n,1);
dh(i)=h;
der=(ecuaciones(x+dh,tau)-ecuaciones(x,tau))/(h);
j(:,i)=der;
end
end
Función Secundaria:
%Ecuaciones a resolver
function ans=ecuaciones(c,tau)
%Temperatura (constante)
T=1500; %R
%Presión (constante)
P=35; %atm
ch=c(1);
cm=c(2);
cx=c(3);
cme=c(4);
ct=c(5);
ans=[ans1;ans2;ans3;ans4;ans5];
end
37
Resultados
Los resultados obtenidos para este problema por medio del método de
Wegstein se pueden ver en la figura 13 mientras que los resultados
obtenidos por medio del método de Newton Multivariable se pueden ver
en la figura 14.
𝑨 (𝑩 + 𝑪) = 𝑨𝑩 + 𝑨𝑪 (32)
38
𝑨 (𝑩𝑪) = (𝑨𝑩)𝑪 (33)
(𝑨 + 𝑩)′ = 𝑨′ + 𝑩′ (34)
(𝑨𝑩)′ = 𝑩′ 𝑨′ (35)
39
Ecuación General
Procedimiento
1) Descomposición de la matriz:
𝐴 = (𝐿 + 𝐷 + 𝑈) (38)
2) Ecuación de recurrencia:
𝑥𝑛+1 = 𝑇𝑔 𝑥𝑛 + 𝐶𝑔 (39)
𝑇𝑔 = (𝐷 − 𝐿)−1 𝑈 (40)
𝐶𝑔 = (𝐷 − 𝐿)−1 𝑏 (41)
Ejemplo
3𝑥1 + 2𝑥2 − 𝑥3 = 4
Función Principal:
function EJ_GS()
% Preparación Codigo
clc
40
clear all
close all
% Parametros
error=100;
tol=1e-6;
x0=[1;1;1];
% Sistema Lineal
A=[2 -1 2
3 2 -1
4 3 -3];
b=[6;4;1];
% Descomposición
D=diag(diag(A));
L=tril(-A,-1);
U=triu(-A,1);
% Gauss-Seidel
Tg=inv(D-L)*U;
Cg=inv(D-L)*b;
while error>tol
xnew=Tg*x0+Cg;
error=norm(xnew-x0);
x0=xnew;
end
% R: Gauss Seidel
disp('Resultado')
disp(xnew)
Resultado:
𝑥1 = 1 ; 𝑥2 = 2 ; 𝑥3 = 3
Ecuación General
Procedimiento
2. Ecuación de recurrencia:
41
Ejemplo
2𝑥1 + 3𝑥2 + 𝑥3 = 3
𝑥1 + 2𝑥2 + 𝑥3 = 1
−𝑥1 + 4𝑥2 = −2
Solución
Función Principal:
function EJ_J()
% Preparación Codigo
clc
clear all
close all
% Parámetros
error=100;
tol=1e-6;
x0=[0;0;0];
% Sistema Lineal
A= [2 3 1
-1 4 0
1 2 1];
b=[3;-2;1];
% Descomposición
D=diag(diag(A));
I=eye(length(x0));
% Gauss-Seidel
while error>tol
xnew=(D^-1)*b-((D^-1)*A-I)*x0;
error=norm(xnew-x0);
x0=xnew;
end
% R: Gauss Seidel
disp('Jacobi')
disp(xnew)
Resultado:
𝑥1 = 2 ; 𝑥2 = 0 ; 𝑥3 = −1
42
𝐶𝑂2 han sido producidas y 90 kg de glucosa sin reaccionar permanecen en
la mezcla de granos.
𝑖𝑛𝑖𝑐𝑖𝑎𝑙
4000(0.88)
𝑛𝐻2𝑂
= = 195.3 𝑘𝑚𝑜𝑙
18.02
4000(0.12)
𝑛𝐶𝑖𝑛𝑖𝑐𝑖𝑎𝑙
6 𝐻12 𝑂6
= = 2.665 𝑘𝑚𝑜𝑙
180.1
𝑓𝑖𝑛𝑎𝑙 90
𝑛𝐶6 𝐻12 𝑂6 = = 0.5 𝑘𝑚𝑜𝑙
180.1
120
𝑛𝐶𝑂2 = = 2.727 𝑘𝑚𝑜𝑙
44
Para resolver este problema se plantea el siguiente sistema de ecuaciones
lineales para el balance de masa con reacción de las especies del proceso:
𝑓𝑖𝑛𝑎𝑙
- 𝑛𝐶2 𝐻5 𝑂𝐻 = 0 + 2𝜉1 + (0)𝜉2
𝑓𝑖𝑛𝑎𝑙
0 = 2𝜉1 + (0)𝜉2 − 𝑛𝐶2 𝐻5 𝑂𝐻
𝑓𝑖𝑛𝑎𝑙
- 𝑛𝐶2 𝐻3 𝐶𝑂2𝐻 = 0 + (0)𝜉1 + (2)𝜉2
𝑓𝑖𝑛𝑎𝑙
0 = (0)𝜉1 + (2)𝜉2 − 𝑛𝐶2 𝐻3 𝐶𝑂2 𝐻
𝑓𝑖𝑛𝑎𝑙
- 𝑛𝐻2 𝑂 = 195.3 + (0)𝜉1 + (2)𝜉2
𝑓𝑖𝑛𝑎𝑙
195.3 = (0)𝜉1 + (2)𝜉2 − 𝑛𝐻2 𝑂
La matriz A queda:
43
2.727
2.165
0
0
-195.3
Solución
Función Principal:
function GaussSeidel ()
clc
%Preparación método
error = 1000;
iter = 0;
itermax= 1000;
tol = 1e-5;
k = 1;
%Matriz A
A = [2,0,0,0,0;
1,1,0,0,0;
2,0,-1,0,0;
0,2,0,-1,0;
0,2,0,0,-1];
%Vector respuesta
b = [2.727;2.165;0;0;-195.3];
%Método
D = diag(diag(A)); %Matriz diagonal con ceros superior e
inferior
L = tril(-A, -1); %Parte inferior
U = triu(-A,1); %Parte superior
Tg = inv(D-L)*U;
Cg = inv(D-L)*b;
%Ciclo iterativo
n = size(A,1);
x = zeros(n,1); %inicialización
while error>tol && iter<itermax
x(:,k+1) = Tg*x(:,k) + Cg;
error = norm(x(:,k+1) - x(:,k));
iter = iter + 1;
k = k+1;
end
%Respuesta
disp(x(:,k))
end
- Número de iteraciones: 2
- Tiempo de convergencia: 0.003996 s
Método de Jacobi:
Función Principal:
function Jacobi()
clc
%Preparación método
44
error = 1000;
iter = 0;
itermax= 1000;
tol = 1e-5;
k = 1;
%Matriz A
A = [2,0,0,0,0;
1,1,0,0,0;
2,0,-1,0,0;
0,2,0,-1,0;
0,2,0,0,-1];
%Vector respuesta
b = [2.727;2.165;0;0;-195.3];
%Parámetros
n = size(A,1);
x = zeros(n,1); %inicialización
%Método
D = diag(diag(A)); %Matriz diagonal con ceros superior e
inferior
I =eye(n);
%Ciclo iterativo
while error>tol && iter<itermax
x(:,k+1) = (inv(D))*b-(inv(D)*A-I)*x(:,k)
error = norm(x(:,k+1) - x(:,k));
iter = iter + 1;
k = k+1;
end
%Respuesta
disp(x(:,k))
end
- Número de iteraciones: 4
- Tiempo de convergencia: 0.008994 s
Resultado:
𝜉1 (gmol) 1.3635
𝜉2 (gmol) 0.8015
𝑓𝑖𝑛𝑎𝑙
𝑛𝐶2 𝐻5𝑂𝐻 (gmol) 2.7270
𝑓𝑖𝑛𝑎𝑙
𝑛𝐶2 𝐻3𝐶𝑂2 𝐻 (gmol) 1.6030
𝑓𝑖𝑛𝑎𝑙
𝑛𝐻2𝑂 (gmol) 196.9030
45
I. Matriz completa
II. Triangulación
Ecuación general
𝑐𝑖 − ∑𝑛𝑗=𝑖+1 𝑢𝑖𝑗 𝑥𝑗
𝑥𝑖 = ; 𝑖 = 𝑛, 𝑛 − 1, … ,1 (45)
𝑢𝑖𝑖
Procedimiento
1) Matriz aumentada
𝑀 = [𝐴|𝑏] (46)
2) Eliminación
𝑀(𝑖, 𝑘)𝑛
𝑀(𝑖, 𝑗)𝑛+1 = 𝑀(𝑖, 𝑗)𝑛 − 𝑀(𝑘, 𝑗)𝑛 (47)
𝑀(𝑘, 𝑘)𝑛
46
Donde:
𝑗 = 𝑛 + 1, 𝑛, … , 𝑘
𝑖 = 𝑘 + 1, 𝑘 + 2, … , 𝑛
𝑘 = 1,2, … , 𝑛 − 1
Ejemplo
𝑥1 − 𝑥2 − 𝑥3 = 0
𝑥1 + 2𝑥2 − 5𝑥3 = 2
Solución
Función Principal:
function EJ_EG()
% Preparación Código
clc
clear all
close all
% Sistema Lineal
A= [2 -1 2
3 2 -1
4 3 -3];
b=[6;4;1];
M=[A,b];
% Método
n=length(b);
for i=1:n
for j=[1:i-1,i+1:n]
k=M(j,i)/M(i,i);
M(j,:)=M(j,:)-k*M(i,:);
end
end
b=M(:,n+1);
sol=b./diag(M);
% Resultados
disp('Resultado')
disp(sol)
end
Resultado
𝑥1 = 3 ; 𝑥2 = 2 ; 𝑥3 = 1
47
identidad 𝐼𝑛𝑥𝑛 . Por lo tanto, el método de Gauss – Jordan se basa en
transformar el sistema de ecuaciones lineales 𝐴𝑥 = 𝑏 en un sistema
equivalente 𝐷𝑥 = 𝑐, donde D es una matriz diagonal. El algoritmo de
eliminación se desarrolla en n etapas: en cada etapa k-ésima se hacen ceros
en toda la columna k excepto en el elemento diagonal, es decir que se deben
𝑘 𝑘 𝑘
hacer cero las posiciones 𝑎1𝑘 , … , 𝑎𝑘−1,𝑘 , … , 𝑎𝑛,𝑘 donde 𝑘 =
1, … , 𝑛 (𝑛𝑒𝑡𝑎𝑝𝑎𝑠).
Procedimiento
1) Matriz aumentada
𝑀 = [𝐴|𝑏] (48)
2) Normalización
𝑀(𝑘, 𝑗)𝑛
𝑀(𝑘, 𝑗)𝑛+1 = (49)
𝑀(𝑘, 𝑘)𝑛
Donde:
𝑗 = 𝑛 + 1, 𝑛, … , 𝑘
𝑘 = 1,2, … , 𝑛
3) Eliminación
Donde:
𝑗 = 𝑛 + 1, 𝑛, … , 𝑘
𝑖 = 1,2, … , 𝑛
Figura 19. Método de eliminación de 𝑘 = 1,2, … , 𝑛
Gauss-Jordan ilustrado paso por paso
Ejemplo
𝑥1 − 3𝑥2 + 2𝑥3 = −3
5𝑥1 + 6𝑥2 − 𝑥3 = 13
4𝑥1 − 𝑥2 + 3𝑥3 = 8
Solución
Función Principal:
function EJ_GJ()
% Preparación Codigo
clc
clear all
close all
48
% Sistema Lineal
A=[1 -3 2
5 6 -1
4 -1 3];
b=[-3;13;8];
M=[A,b];
% Metodo: Parte 1 (Reducción Superior)
[f,c]=size(M);
for i=1:c-1
M(i,:)=M(i,:)/M(i,i);
for j=i+1:f
M(j,:)=M(j,:)-M(i,:)*M(j,i);
end
end
% Método: Parte 2 (Reducción Inferior)
for i=2:f
ii=f-i+2;
for j=1:ii-1
jj=ii-j;
M(jj,:)=M(jj,:)-M(ii,:)*M(jj,ii);
end
end
sol=M(:,end);
% Resultados
disp('Resultado')
disp(sol)
Resultado
𝑥1 = −2 ; 𝑥2 = 5 ; 𝑥3 = 7
Mallas:
Nodos:
𝑖32 + 𝑖12 − 𝑖25 = 0 𝑛𝑜𝑑𝑜 2
−𝑖32 + 𝑖63 − 𝑖34 = 0 𝑛𝑜𝑑𝑜 3
𝑖34 − 𝑖47 = 0 𝑛𝑜𝑑𝑜 4
𝑖25 − 𝑖58 + 𝑖65 = 0 𝑛𝑜𝑑𝑜 5
−𝑖63 − 𝑖65 + 𝑖76 = 0 𝑛𝑜𝑑𝑜 6
49
𝑖47 + 𝑖97 − 𝑖76 = 0 𝑛𝑜𝑑𝑜 7
𝑖58 − 𝑖89 − 𝑖810 = 0 𝑛𝑜𝑑𝑜 8
𝑖89 − 𝑖97 = 0 𝑛𝑜𝑑𝑜 9
𝒊𝟑𝟐 𝒊𝟏𝟐 𝒊𝟐𝟓 𝒊𝟔𝟑 𝒊𝟖𝟗 𝒊𝟓𝟖 𝒊𝟑𝟒 𝒊𝟒𝟕 𝒊𝟗𝟕 𝒊𝟕𝟔 𝒊𝟖𝟏𝟎 𝒊𝟔𝟓
Nodo
-1 0 0 1 0 0 -1 0 0 0 0 0
3
Nodo
1 1 -1 0 0 0 0 0 0 0 0 0
2
Nodo
0 0 1 0 0 -1 0 0 0 0 0 1
5
Malla
0 0 0 5 0 0 20 5 0 20 0 0
1
Nodo
0 0 0 0 1 0 0 0 -1 0 0 0
9
Figura 20. Circuito eléctrico del Malla
0 0 0 0 -15 -50 0 0 0 -20 0 -10
ejemplo 2
Nodo
0 0 0 0 0 0 1 -1 0 0 0 0
4
Nodo
0 0 0 0 0 0 0 1 1 -1 0 0
7
Nodo
0 0 0 -1 0 0 0 0 0 1 0 -1
6
Malla
0 0 20 0 0 50 0 0 0 0 0 0
3
Nodo
0 0 0 0 -1 1 0 0 0 0 -1 0
8
Malla
-5 0 -20 -5 0 0 0 0 0 0 0 10
4
𝑏 = [0 0 0 0 0 0 0 0 0 − 80 0 0]′ ;
Solución
Eliminación de Gauss
Función Principal:
function EliminacionGauss()
%Preparacion
close all; clear all; clc
%Matriz
A= [-1 0 0 1 0 0 -1 0 0 0 0 0; %nodo 2
1 1 -1 0 0 0 0 0 0 0 0 0; %nodo 3
0 0 1 0 0 -1 0 0 0 0 0 1; %nodo 5
0 0 0 5 0 0 20 5 0 20 0 0; %malla 1
0 0 0 0 1 0 0 0 -1 0 0 0; %nodo 9
0 0 0 0 -15 -50 0 0 0 -20 0 -10; %malla 2
0 0 0 0 0 0 1 -1 0 0 0 0; %nodo 4
0 0 0 0 0 0 0 1 1 -1 0 0; %nodo 7
0 0 0 -1 0 0 0 0 0 1 0 -1; %nodo 6
0 0 20 0 0 50 0 0 0 0 0 0; %malla 3
0 0 0 0 -1 1 0 0 0 0 -1 0; %nodo 8
50
-5 0 -20 -5 0 0 0 0 0 0 0 10]; %malla 4
%Vector respuesta
b=[0 0 0 0 0 0 0 0 0 -80 0 0]';
n = size(A,1);
%Eliminacion
for i=1:n-1 %Recorre columnas
for k=i+1:n %Recorre filas
m=A(k,i)/A(i,i); %Factor (multiplicacion escalar)
for j=i+1:n %Cambio columnas de una fila
A(k,j)=A(k,j)-m*A(i,j); %Resta de filas
end
A(k,i)=0;
b(k)=b(k)-m*b(i); %Actualiza el vector de
respuesta
end
end
%Sustitución hacia atrás
for c=n:-1:1
if c==n
x(c)=b(c)/A(c,c);
end
a=b(c); %Inicializar
for g=c+1:n
a=a-A(c,g)*x(g); %Coeficientes por x encontrados
end
x(c)=a/A(c,c);
end
disp(x')
Función Principal:
function EliminacionGaussJordan()
%Preparación
close all; clear all; clc
%Matriz
A=[-1 0 0 1 0 0 -1 0 0 0 0 0; %nodo 2
1 1 -1 0 0 0 0 0 0 0 0 0; %nodo 3
0 0 1 0 0 -1 0 0 0 0 0 1; %nodo 5
0 0 0 5 0 0 20 5 0 20 0 0; %malla 1
0 0 0 0 1 0 0 0 -1 0 0 0; %nodo 9
0 0 0 0 -15 -50 0 0 0 -20 0 -10; %malla 2
0 0 0 0 0 0 1 -1 0 0 0 0; %nodo 4
0 0 0 0 0 0 0 1 1 -1 0 0; %nodo 7
0 0 0 -1 0 0 0 0 0 1 0 -1; %nodo 6
0 0 20 0 0 50 0 0 0 0 0 0; %malla 3
0 0 0 0 -1 1 0 0 0 0 -1 0; %nodo 8
-5 0 -20 -5 0 0 0 0 0 0 0 10]; %malla 4
%Vector respuesta
b=[0 0 0 0 0 0 0 0 0 -80 0 0]';
%Método
M=[A,b];
%Reducción Superior
[n,k]=size(M);
for i=1:k-1
M(i,:)=M(i,:)/M(i,i);
for j=i+1:n
M(j,:)=M(j,:)-M(i,:)*M(j,i);
end
51
end
% Método: Parte 2 (Reducción Inferior)
for i=2:n
h=n-i+2;
for j=1:h-1
p=h-j;
M(p,:)=M(p,:)-M(h,:)*M(p,h);
end
end
disp(M(:,end));
𝑽𝟐 𝑽𝟑 𝑽𝟒 𝑽𝟓
108.834 124.327 127.958 134.765
52
En la ecuación 51, la cantidad derivada, v, se llama variable dependiente. La
cantidad con respecto a la que v está siendo derivada, t, se llama variable
independiente. Cuando la función tiene una variable independiente la
ecuación se llama ecuación diferencial ordinaria (o ODE). Esto es lo
contrario a una ecuación diferencial parcial (o PDE) la cual incluye una
o más variables independientes.
𝑑𝑣 𝑐
=𝑔− 𝑣 (51)
𝑑𝑡 𝑚
𝑑2 𝑥 𝑑𝑥
𝑚 2 +𝑐 + 𝑘𝑐 = 0 (52)
𝑑𝑡 𝑑𝑡
𝑑𝑥
𝑦= (53)
𝑑𝑦
𝑑𝑦 𝑑 2 𝑥
= (54)
𝑑𝑡 𝑑𝑡 2
La ecuación 53 y la ecuación 54 se pueden sustituir en la ecuación 52 para
obtener:
𝑑𝑦 𝑑𝑦 𝑐𝑦 + 𝑘𝑥
𝑚 + 𝑐𝑦 + 𝑘𝑥 = 0 (55) 𝑜 =− (56)
𝑑𝑡 𝑑𝑡 𝑚
Así, la ecuación 53 y la ecuación 56 son un par de ecuaciones de primer
orden que son equivalente a la ecuación original de segundo orden. Como
otras ecuaciones diferenciales de orden n se pueden reducir de una forma
similar, este apartado se enfocará en la solución de ecuaciones de primer
orden.
53
5.1. CONDICIONES INICIALES
A continuación, se mostrarán los métodos para resolver sistemas de
ecuaciones diferenciales ordinarias a partir de condiciones iniciales:
𝑑𝑦
(𝑡, 𝑦) = 𝑦 ′ (𝑡, 𝑦) = 𝑓(𝑡, 𝑦) ; 𝑎≤𝑡≤𝑏 ; 𝑦(𝑎) = 𝑎 (57)
𝑑𝑡
Ecuación general
𝑏−𝑎
ℎ= (59)
𝑁
𝑡𝑖 = 𝑎 + 𝑖ℎ (60)
Este método parte del punto inicial dado, a partir del cual, se puede calcular
la pendiente de la curva en ese punto y asimismo la recta tangente. Así, se
van dando pequeños pasos realizando el mismo procedimiento hasta
obtener la aproximación más cercana a la curva de una determinada
función. Por esta razón, es de gran importancia el valor h, ya que se busca
que éste sea lo más pequeño posible para que el error entre ambas curvas
sea el mínimo.
Ejemplo
𝑑𝑦 3𝑡
= 𝑒𝑡 − 2
𝑑𝑡 𝑡 −1
2≤𝑡≤5 ; 𝑦(2) = 1
Solución
Función Principal:
function EJ_RK1()
% Preparación Codigo
clc
close all
% Parámetros
54
dt=0.01;
t=2:dt:5;
140 y0=1;
% Método Numérico
120 y=zeros(1,length(t));
y(1)=y0;
100 for i=1:length(t)-1
y(i+1)=y(i)+dt*ecu(t(i),y(i));
80 end
% Solución
y
60 plot(t,y)
xlabel('t')
40 ylabel('y')
20
0
2 2.5 3 3.5 4 4.5 5 Función Secundaria:
t
function f=ecu(t,y)
Figura 21. Solución del perfil de y por % Ecuación
el método de Euler (Runge Kutta f=exp(t)-(3*t)/(t^2-1);
Primer Orden)
Resultados
Ecuación general
ℎ
𝑦𝑖+1 = 𝑦𝑖 + (𝑘1 + 𝑘2 ) (61)
2
1) Coeficientes:
𝑘1 = 𝑓(𝑡𝑖 , 𝑦𝐼 ) (62)
𝑘2 = 𝑓(𝑡𝑖 + ℎ, 𝑦𝑖 + 𝑘1 ∗ ℎ) (63)
𝑏−𝑎
ℎ= (64)
𝑁
𝑡𝑖 = 𝑎 + 𝑖ℎ (65)
Ejemplo
55
𝑑𝑦
= 7 − 3𝑡 + 2𝑡 2
𝑑𝑡
1 ≤ 𝑡 ≤ 10 ; 𝑦(1) = 5
Solución
Función Principal:
function EJ_RK2()
% Preparación Código
clc
600
close all
% Parámetros
500 dt=0.01;
t=1:dt:10;
y0=5;
400
% Método Numérico
y=zeros(1,length(t));
y(1)=y0;
y
300
for i=1:length(t)-1
k1=dt*ecu(t(i),y(i));
200 k2=dt*ecu(t(i)+dt,y(i)+k1);
y(i+1)=y(i)+(1/2)*(k1+k2);
100
end
% Solución
plot(t,y)
0
1 2 3 4 5 6 7 8 9 10
xlabel('t')
t ylabel('y')
Figura 22. Solución del perfil de y por el end
método de Runge Kutta Segundo Orden
Función Secundaria:
function f=ecu(t,y)
% Ecuacion
f=7-3*t+2*t^2;
end
Resultados
Ecuación general
ℎ
𝑦𝑖+1 = 𝑦𝑖 + (𝑘1 + 2𝑘2 + 2𝑘3 + 𝑘4 ) (66)
6
1) Coeficientes:
𝑘1 = 𝑓(𝑡𝑖 , 𝑦𝑖 ) (67)
56
ℎ 1
𝑘2 = 𝑓 (𝑡𝑖 + , 𝑦𝑖 + 𝑘1 ∗ ℎ) (68)
2 2
ℎ 1
𝑘3 = 𝑓 (𝑡𝑖 + , 𝑦𝑖 + 𝑘2 ∗ ℎ) (69)
2 2
𝑘4 = 𝑓(𝑡𝑖 + ℎ, 𝑦𝑖 + 𝑘3 ∗ ℎ) (70)
𝑏−𝑎
ℎ= (71)
𝑁
𝑡𝑖 = 𝑎 + 𝑖ℎ (72)
Ejemplo
𝑑𝑦 𝑡 2𝑡𝑦
= −
𝑑𝑡 1 + 𝑡 2 1 + 𝑡 2
0 ≤ 𝑡 ≤ 10 ; 𝑦(0) = 0
Solución
Función Principal:
0.5 function EJ_RK2()
% Preparación Codigo
0.45
clc
0.4 close all
% Parametros
0.35
dt=0.01;
0.3 t=0:dt:10;
y0=0;
y
Función Secundaria:
function f=ecu(t, y)
57
% Ecuación
f=(t)/ (1+t^2)-(2*t*y)/ (1+t^2);
Resultados
Ecuación general
1) Coeficientes:
ℎ
𝑇 (2) (𝑡𝑖 , 𝑦𝐼 ) = 𝑓(𝑡𝑖 , 𝑦𝑖 ) + 𝑓 ′ (𝑡𝑖 , 𝑦𝑖 ) (74)
2
2) Pasos (cantidad N) de la variable independiente:
𝑏−𝑎
ℎ= (75)
𝑁
𝑡𝑖 = 𝑎 + 𝑖ℎ (76)
Ejemplo
𝑑𝑦
= 𝑦 − 𝑡2 + 2
𝑑𝑡
Solución
Primera derivada
𝑓 ′ (𝑡𝑖 , 𝑦𝑖 ) = 𝑦 − 𝑡 2 − 2𝑡 + 2
58
12
Función Principal:
10 function EJ_T2()
% Preparación Codigo
clc
8
close all
% Parametros
dt=0.01;
y
6
t=0:dt:2;
y0=0.5;
4
% Método Numérico
y=zeros(1,length(t));
2 function f=ecu(t,y)
y(1)=y0;
for i=1:length(t)-1
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 T2=ecu(t(i),y(i))+(dt/2)*der(t(i),y(i));
t y(i+1)=y(i)+dt*T2;
end
Figura 24. Solución del perfil de y por el % Solución
método de Taylor de Segundo orden. plot(t,y)
xlabel('t')
ylabel('y')
Funciones Secundarias:
% Ecuacion
f=y-t^2+2;
function f=der(t,y)
% Ecuacion
f=y-t^2-2*t+2;
Resultados
Ecuación general
1) Coeficientes:
(4) ℎ ℎ2
𝑇 (𝑡𝑖 , 𝑦𝑖 ) = 𝑓(𝑡𝑖 , 𝑦𝐼 ) + 𝑓 ′ (𝑡𝐼 , 𝑦𝑖 ) + 𝑓 ′′ (𝑡𝑖 , 𝑦𝑖 )
2 3!
ℎ3 ′′′
+ 𝑓 (𝑡𝑖 , 𝑦𝐼 ) (78)
4!
2) Pasos (cantidad N) de la variable independiente:
𝑏−𝑎
ℎ= (79)
𝑁
59
𝑡𝑖 = 𝑎 + 𝑖ℎ (80)
12
Ejemplo
2
Solución
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Primera derivada
t 𝑓 ′ (𝑡𝑖 , 𝑦𝑖 ) = 𝑦 − 𝑡 2 − 2𝑡 + 2
Figura 25. Solución del perfil de y por el 𝑓 ′′ (𝑡𝑖 , 𝑦𝑖 ) = 𝑦 − 𝑡 2 − 2𝑡
método de Taylor de Cuarto orden. 𝑓 ′′′ (𝑡𝑖 , 𝑦𝑖 ) = 𝑦 − 𝑡 2 − 2𝑡
Función Principal:
function EJ_T4()
% Preparación Codigo
clc
close all
% Parametros
dt=0.01;
t=0:dt:2;
y0=0.5;
% Método Numérico
y=zeros(1,length(t));
y(1)=y0;
for i=1:length(t)-1
DER=der(t(i),y(i));
T4=ecu(t(i),y(i))+(dt/2)*DER(1)+((dt^2)/6)*DER(2)+((dt^3)
/24)*DER(3);
y(i+1)=y(i)+dt*T4;
end
% Solución
plot(t,y)
xlabel('t')
ylabel('y')
Funciones Secundarias:
function f=ecu(t,y)
% Ecuacion
f=y-t^2+2;
function f=der(t,y)
% Ecuacion
f(1)=y-t^2-2*t+2;
f(2)=y-t^2-2*t;
f(3)=y-t^2-2*t;
60
Resultados
𝐴+𝐵 →𝐶
La ley de velocidad es
1 1
−𝑟𝐴 = 𝑘1 𝐶𝐴2 𝐶𝐵2 − 𝑘2 𝐶𝐶
𝑚𝑜𝑙
𝐶𝐴0 = 0.1 𝐶𝑝𝐴 = 25 𝐽/𝑚𝑜𝑙 𝐾
𝑑𝑚3
𝑚𝑜𝑙
𝐶𝐵0 = 0.125 𝐶𝑝𝐵 = 25 𝐽/𝑚𝑜𝑙 𝐾
𝑑𝑚3
0 (298
𝐽
∆𝐻𝑅𝑥𝑛 𝐾) = −41800 𝐴 𝐶𝑝𝐶 = 40 𝐽/𝑚𝑜𝑙 𝐾
𝑚𝑜𝑙
Solución
61
𝐸1 1 1
𝑘1′ = 𝑘1 (@373 𝐾) ∗ 𝑒𝑥𝑝 ((− ) ∗ (( ) − ( )))
𝑅 𝑇 𝑇0
𝐸2 1 1
𝑘2′ = 𝑘2 (@373 𝐾) ∗ 𝑒𝑥𝑝 ((− ) ∗ (( ) − ( )))
𝑅 𝑇 𝑇0
- Balance Molar
𝑑𝑁𝑖
𝑟𝑖 𝑉 =
𝑑𝑡
𝑆𝑎𝑏𝑖𝑒𝑛𝑑𝑜 𝑞𝑢𝑒: 𝑁𝑖 = 𝐶𝑖 𝑉
𝑑(𝐶𝑖 )
= 𝑟𝑖 ; 𝑝𝑎𝑟𝑎 𝐴, 𝐵 𝑦 𝐶
𝑑𝑡
De este modo se tienen 3 ecuaciones:
- A
𝑑(𝐶𝐴 )
= 𝑟𝐴
𝑑𝑡
- B
𝑑(𝐶𝐵 )
= 𝑟𝐵
𝑑𝑡
- C
𝑑(𝐶𝐶 )
= 𝑟𝐶
𝑑𝑡
Adicionalmente, como el sistema no es isotérmico, es necesario desarrollar
un balance de energía.
- Balance de energía
𝑑𝑇 𝑄 + ∆𝐻𝑅𝑥𝑛 𝑟𝐴 𝑉
=
𝑑𝑡 ∑𝑁𝑖 𝐶𝑝𝑖
𝑑𝑇 ∆𝐻𝑅𝑥𝑛 𝑟𝐴 𝑉
=
𝑑𝑡 ∑𝑁𝑖 𝐶𝑝𝑖
𝑑𝑇 ∆𝐻𝑅𝑥𝑛 𝑟𝐴
=
𝑑𝑡 ∑𝐶𝑖 𝐶𝑝𝑖
Donde
62
0
∆𝐻𝑅𝑥𝑛 + ∆𝐶𝑝 ∗ (𝑇 − 298.15 𝐾)
Función Principal:
function BatchNotas()
%Variables
global CA0 CB0 DHR k1 k2 CP v DCP T0 E1 E2 R
CA0=0.1/0.001;% mol/m3
CB0=0.125/0.001; %mol/m3
DHR=-4180; %J/mol A
k1=2e-3; %s^-1
k2=3e-5; %s^-1;
v=[-1; -1; 1];%coeficientes estequiometricos
CP=[25; 25; 40]; %J/mol K
DCP=sum(v.*CP);
T0=100+273.15; %k
E1=100e3; %J/mol
E2=150e3; %J/mol
R=8.314;%J/mol K
%Paso de tiempo
h=0.01;
%Paso de tiempo Euler
hE=(120-0)/1000;
%Vector de tiempo
tspan=0:h:120;
%Inicializacion
y0=[CA0 CB0 0 T0]';
%RK4
[tsol4,ysol4]=RK4(tspan,y0,h);
CA=ysol4(1,:);
CB=ysol4(2,:);
CC=ysol4(3,:);
%EULER
[tsol,ysol]=Euler(tspan,y0,hE);
CAE=ysol(1,:);
CBE=ysol(2,:);
CCE=ysol(3,:);
%RK2
[tsol2,ysol2]=RK2(tspan,y0,h);
CA2=ysol2(1,:);
CB2=ysol2(2,:);
CC2=ysol2(3,:);
%RK3
[tsol3,ysol3]=RK3(tspan,y0,h);
CA3=ysol3(1,:);
CB3=ysol3(2,:);
CC3=ysol3(3,:);
%% RK4
figure(1)
%CONCENTRACIONES
63
plot(tsol4,CA,tsol4,CB,tsol4,CC)
legend('CA','CB','CC')
xlabel('Tiempo (s)')
ylabel 'Concentración (mol/m3)'
grid minor
%TEMPERATURA
figure (2)
plot(tsol4,ysol4(4,:))
legend 'T'
xlabel('Tiempo (s)')
ylabel 'Temperatura (K)'
grid minor
%% EULER
figure(3)
%CONCENTRACIONES
plot(tsol,CAE,tsol,CBE,tsol,CCE)
legend('CA','CB','CC')
xlabel('Tiempo (s)')
ylabel 'Concentración (mol/m3)'
grid minor
%TEMPERATURA
figure (4)
plot(tsol3,ysol(4,:))
legend 'T'
xlabel('Tiempo (s)')
ylabel 'Temperatura (K)'
grid minor
%% RK2
figure(5)
%CONCENTRACIONES
plot(tsol2,CA2,tsol2,CB2,tsol2,CC2)
legend('CA','CB','CC')
xlabel('Tiempo (s)')
ylabel 'Concentración (mol/m3)'
grid minor
%TEMPERATURA
figure (6)
plot(tsol2,ysol2(4,:))
legend 'T'
xlabel('Tiempo (s)')
ylabel 'Temperatura (K)'
grid minor
%% RK3
figure(7)
%CONCENTRACIONES
plot(tsol3,CA3,tsol3,CB3,tsol3,CC3)
legend('CA','CB','CC')
xlabel('Tiempo (s)')
ylabel 'Concentración (mol/m3)'
grid minor
%TEMPERATURA
figure (8)
plot(tsol3,ysol3(4,:))
legend 'T'
xlabel('Tiempo (s)')
ylabel 'Temperatura (K)'
grid minor
end
64
Método de Euler:
function [tspan,y]=Euler(tspan,y0,h)
y=y0;
%Euler
for i=1:length(tspan)-1 %Para todos los tiempos
%Parametros
t=tspan(i);
yi=y(:,i);
%Constantes RK1
k1=h*ecu(t,yi);
%SOLRK1
y(:,i+1)=yi+h*k1;
end
end
Método de RK2:
function [tspan,y]=RK2(tspan,y0,h)
y=y0;
%RK2
for i=1:length(tspan)-1
t=tspan(i);
yi=y(:,i);
%Constantes RK2
k1=h*ecu(t,yi);
k2=h*ecu(t+h,yi+(k1));
%Solucion RK2
y(:,i+1)=yi+(1/2)*(k1+k2);
end
end
Figura 26. Solución del perfil de temperatura para
los 4 casos.
Método de RK3:
function [tspan,y]=RK3(tspan,y0,h)
y=y0;
%RK3
for i=1:length(tspan)-1
t=tspan(i);
yi=y(:,i);
%Constantes RK3
k1=h*ecu(t,yi);
k2=h*ecu(t+(h/2),yi+(k1/2));
k3=h*ecu(t+(h),yi-k1+2*k2);
%Solucion RK3
y(:,i+1)=yi+(1/6)*(k1+4*k2+k3);
end
end
65
k3=ecu(t+(h/2),yi+(k2/2)*h);
k4=ecu(t+h,yi+k3*h);
%Solucion RK4
y(:,i+1)=yi+(h/6)*(k1+2*k2+2*k3+k4);
end
end
Gráficas
De este modo, se procede a graficar la concentración y temperatura en
función del tiempo, obteniendo para los 4 casos la figura 26 y la figura 27.
Ecuación general
1) Función objetivo:
66
2) Ecuación:
−[𝑦(𝑡𝑓 , 𝛾) − 𝑦𝑜𝑏𝑗 ]
∆𝛾 = (83)
𝜕𝑦(𝑡𝑓 , 𝛾)
[ ]
𝜕𝛾
Ejemplo
𝑑𝑦1
= 𝑦1 − 3𝑦2
𝑑𝑡
𝑑𝑦2
= 3𝑦1 − 2𝑦2
𝑑𝑡
Solución
Función Principal:
function EJ_NS1()
% Preparación Codigo
clc
close all
% Parametros
tspan=0:0.01:1;
tol=1e-6;
h=1e-3;
cond=true;
cF=1;
c0=1;
% Método Númerico
while cond==true
[t,y]=ode45(@ecu,tspan,[3;c0]);
[t,ynew]=ode45(@ecu,tspan,[3;c0+h]);
der=(ynew(end,2)-y(end,2))/h;
Figura 28. Solución del perfil de y1 y y2. c0new=c0-(y(end,2)-cF)/der;
error=abs(y(end,2)-cF);
if error<tol
break
else
c0=c0new;
end
end
% Solución
plot(t,y(:,1),'r')
hold on
plot(t,y(:,2),'b')
grid on
67
legend('y1','y2')
Funciones Secundarias:
function f=ecu(t,y)
% Variables
y1=y(1);
y2=y(2);
% ODEs
f(1,1)=y1-3*y2;
f(2,1)=3*y1-2*y2;
Resultados
Ecuación general
1) Función objetivo:
Donde 𝑦𝑜𝑏𝑗 son las condiciones de frontera y 𝑦(𝑡, 𝑦0 ) son los valores de
y a un tiempo (t) según las condiciones iniciales (𝑦0 ) utilizadas:
2) Ecuación:
Ejemplo
68
𝑑𝑦2
= 𝑦1 − 2𝑦2 − 𝑦3
𝑑𝑡
𝑑𝑦3
= 𝑦1 + 𝑦2 − 2𝑦3
𝑑𝑡
Solución
Función Principal:
function EJ_NS2()
% Preparación Codigo
clc
close all
% Parametros
tspan=0:0.01:1;
tol=1e-6;
h=1e-3;
cond=true;
cF=[0.4;0.2];
c0=[1;1;0];
% Método Númerico
while cond==true
% Paso 1
[t,y]=ode45(@ecu,tspan,c0);
[t,yd1]=ode45(@ecu,tspan,c0+[h;0;0]);
[t,yd2]=ode45(@ecu,tspan,c0+[0;h;0]);
% Paso 2
d11=(yd1(end,1)-y(end,1))/h;
d12=(yd2(end,1)-y(end,1))/h;
d21=(yd1(end,2)-y(end,2))/h;
d22=(yd2(end,2)-y(end,2))/h;
J=[d11,d12;d21,d22];
% Paso 3
c0new=c0(1:2)'-(y(end,1:2)-cF')*inv(J);
error=abs(y(end,1:2)-cF');
% Paso 4
if error<tol
Figura 29. Solución del perfil de y1, y2 y y3. break
else
c0(1:2)=c0new';
end
end
% Solución
plot(t,y(:,1),'r')
hold on
plot(t,y(:,2),'b')
plot(t,y(:,3),'m')
grid on
legend('y1','y2','y3')
Funciones Secundarias:
function f=ecu(t,y)
% Variables
y1=y(1);
69
y2=y(2);
y3=y(3);
% ODEs
f(1,1)=-2*y1+y2;
f(2,1)=y1-2*y2-y3;
f(3,1)=y1+y2-2*y3;
Resultados
𝑑 2 𝐶𝐴 𝑘
= 𝐶
𝑑𝑧 2 𝐷𝐴𝐵 𝐴
𝐶𝐴 = 𝐶𝐴0 𝑝𝑎𝑟𝑎 𝑧 = 0
𝑑𝐶𝐴
=0 𝑝𝑎𝑟𝑎 𝑧 = 𝐿
𝑑𝑧
Los datos que determinan un caso en particular son:
𝑚𝑜𝑙 −3 −1 −9
𝑚2
𝐶𝐴0 = 0.2 𝑘𝑔 3 𝑘 = 10 𝑠 𝐷𝐴𝐵 = 1.2𝑥10 𝐿
𝑚 𝑠
−3
= 10 𝑚
Solución
𝑑𝐶𝐴
=𝑤
𝑑𝑧
70
𝑑𝑤 𝑑2 𝐶𝐴 𝑘
= = 𝐶
𝑑𝑧 𝑑𝑧 2 𝐷𝐴𝐵 𝐴
Función Principal:
function NewtonShootNotas()
global CA0 k DAB L
CA0=0.2;%kg mol/m3
k=(10^-3);%s-1
DAB=1.2e-9;%m2/s
L=(10^-3);%m
%Parametros
cond=true;
tol=1e-6;
h=1e-3;
%Paso de tiempo
dx=0.0001;
%Vector de variable independiente
xspan=[0:dx:L];
%Condiciones iniciales
y0=[1;CA0];
%Condiciones finales
CF=0;
%Newton Shooting
while cond==true
[x,y]=ode45(@ecu,xspan,y0);
[x,yd1]=ode45(@ecu,xspan,y0+[h;0]);
der=(yd1(end,1)-y(end,1))/h;
%Newton
y0new=y0(1)-((y(end,1)-CF)/der);
error=abs(y(end,1)-CF);
if error<tol
break
Figura 30. Solución para el perfil de else
concentración. y0(1)=y0new;
end
end
figure(1)
plot(x,y(:,1))
title('Gradiente en función de la longitud')
xlabel('Longitud (m)')
ylabel('Gradiente')
grid minor
figure(2)
plot(x,y(:,2),'r')
title('Concentración en función de la longitud')
xlabel('Longitud (m)')
ylabel('Concentración(kg mol/m3)')
grid minor
Figura 31. Solución del perfil del gradiente de
end
concentración.
Función Secundaria:
function sol=ecu(x,w)
global k DAB
y1=w(1);
CA=w(2);
sol(1,1)=(k/DAB)*CA;
sol(2,1)=y1;
end
71
Resultados
𝐹(𝑡, 𝑥, 𝑥̇ ) = 0 (89)
Para garantizar la única solución del sistema, se deben tener en cuenta los
problemas de condiciones iniciales tal que se cumpla la siguiente condición:
𝑥(𝑡0 ) = 𝑥0
72
6.1. SOLUCIÓN DE SISTEMAS DAE DE ÍNDICE 1
Estas ecuaciones son aquellas en las que el número de veces que debe ser
derivada la función 𝐹(𝑡, 𝑥, 𝑥̇ ) = 0 debe ser derivada para obtener un
sistema de ecuaciones diferenciales ordinarias, es decir un sistema de
ODE´s puro.
Ejemplo
𝑑𝐿 𝐿
=
𝑑𝑥2 𝑥2 (𝑘2 − 1)
73
Donde 𝑘2 es la constante de equilibrio vapor-liquido del compuesto 2.
Asumiendo que el sistema es ideal, la constante de equilibrio vapor-liquido
puede calcularse utilizando la siguiente relación:
𝑃𝑖
𝑘𝑖 =
𝑃
𝑘1 𝑥1 + 𝑘2 𝑥2 = 1
Solución
Función Principal:
function EjDestBatch()
% Preparacion del codigo
clc
clear all
close all
% Matriz Masa
M=[1,0;0,0];
options=odeset('Mass',M);
% Temperatura Inicial
T0=100;
Tin=fsolve(@temp0,T0)
disp(Tin)
% Solución
x2span=[0.4 0.8];
xo=[100,95.5851];
[x2,sol]=ode15s(@DAE,x2span,xo,options);
% Reporte
figure(1)
plot(x2,sol(:,1))
74
title('Destilacion Batch')
xlabel('Composición de Tolueno')
ylabel('Moles del Liquido (mol)')
grid on
figure(2)
plot(x2,sol(:,2))
title('Destilacion Batch')
xlabel('Composición de Tolueno')
ylabel('Temperatura (°C)')
grid on
Función Secundaria:
function f=DAE(x2,y)
% Variables
L=y(1);
T=y(2);
% Parametros
P=1.2*760; % mmHg
% Calculos intermedios
A=[6.90565,6.95464];
Figura 34. Moles de líquido vs composición de B=[1211.033,1344.8];
Tolueno C=[220.79,219.482];
Pvap=10.^(A-(B)./(T+C));
k=Pvap./P;
x1=1-x2;
% Modelo DAE
f(1,1)=L/(x2*(k(2)-1));
f(2,1)=k(1)*x1+k(2)*x2-1;
function f=temp0(T)
% Calculos intermedios
x1=0.6;
x2=0.4;
P=1.2*760;
A=[6.90565,6.95464];
B=[1211.033,1344.8];
Figura 35. Temperatura vs Composición de C=[220.79,219.482];
Tolueno Pvap=10.^(A-(B)./(T+C));
k=Pvap./P;
% Ecuación
f(1)=k(1)*x1+k(2)*x2-1;
Resultados
75
presentan cuando la función desconocida F presentada en la ecuación 91,
debe ser derivada más de una vez con el fin de obtener un sistema de
ecuaciones diferenciales puro. Unos ejemplos de estos sistemas se pueden
ver a continuación:
Índice 2:
𝑦2 ´ = 𝑦1 + 𝛾1 0 = 𝑦2 + 𝛾2
𝑦2 ´ = −𝛾2 ´ (91)
𝑦1 ´ = 𝛾2 ´´ − 𝛾1 ´ (92)
76
la cual solo se tiene la diferencia entre los nodos, los cuales son separados
por un conjunto de ecuaciones diferenciales. La solución para la
temperatura en los nodos se obtiene cuando se realiza la inversión de la
matriz obtenida. Una cualidad particular de este método es que los
espaciamientos no tienen que ser exactamente iguales, más sin embargo
deben mantener cierta proporcionalidad en su crecimiento/decrecimiento.
Ecuación general
𝑓(𝑥 + ℎ) − 𝑓(𝑥)
𝑓 ′ (𝑥) = (93)
Δ𝑥
𝑓(𝑥) − 𝑓(𝑥 − ℎ)
𝑓 ′ (𝑥) = (94)
Δ𝑥
3. Discretización centrada:
𝑓(𝑥 + ℎ) − 𝑓(𝑥 − ℎ)
𝑓 ′ (𝑥) = (95)
2Δ𝑥
Ejemplo
𝜕𝑢 𝜕𝑢
+𝑐 =0
𝜕𝑡 𝜕𝑥
0≤𝑥≤2
0 ≤ 𝑡 ≤ 0.25
En donde 𝑐 representa la rapidez cuya magnitud es constante (en este caso
𝑐 = 1 m/s). Esta ecuación describe la variación de 𝑢 en cada punto
estudiando por el efecto de un campo vectorial.
Solución
77
Función Principal:
function EJ_PDE_DF()
% Preparación Codigo
clc
close all
% Parametros
c=1;
dt=0.02;
dx=0.04;
tspan=0:dt:0.25;
xspan=0:dx:2;
% Inicialización
for i=1:length(xspan)
if xspan(i)<1
u0(i)=1;
elseif xspan(i)>1.5
Figura 36. Solución en t=0 s u0(i)=1;
else
u0(i)=2;
end
end
% Solución
u(1,:)=u0;
for j=1:length(tspan)
for i=1:length(xspan)
if i==1
u(j+1,i)=1;
else
u(j+1,i)=u(j,i)+c*(dt/dx)*(u(j,i-1)-u(j,i));
end
end
end
% Graficas
Figura 37. Solución en t=0.25 s figure(1)
plot(xspan,u(1,:))
ylim([0.8 2.2])
figure(2)
plot(xspan,u(end,:))
ylim([0.8 2.2])
Resultados
78
Solución
2ℎ∆𝑥 ℎ∆𝑥
10: 2𝑇11 + 𝑇1 + 𝑇19 + 𝑇𝑠𝑛𝑜𝑤 − 2 ( + 2) 𝑇10 = 0
𝑘 𝑘
ℎ∆𝑥 ℎ∆𝑥
19: 𝑇20 + 𝑇10 + 2 𝑇𝑠𝑛𝑜𝑤 − (2 + ) 𝑇19 = 0
𝑘 𝑘
Para los nodos 38 al 44 son nodos planos sin convección por lo que el
término relacionado a la convección es 0, esta ecuación se puede ver a
continuación:
Resultados
79
La temperatura del nodo 3 es: 275.24
La temperatura del nodo 4 es: 275.94
La temperatura del nodo 5 es: 276.01
La temperatura del nodo 6 es: 275.94
La temperatura del nodo 7 es: 275.69
La temperatura del nodo 8 es: 275.24
La temperatura del nodo 9 es: 274.50
La temperatura del nodo 10 es: 274.02
La temperatura del nodo 11 es: 274.66
La temperatura del nodo 12 es: 275.08
La temperatura del nodo 13 es: 275.32
La temperatura del nodo 14 es: 275.40
La temperatura del nodo 15 es: 275.32
La temperatura del nodo 16 es: 275.08
La temperatura del nodo 17 es: 274.66
La temperatura del nodo 18 es: 274.02
La temperatura del nodo 19 es: 273.77
La temperatura del nodo 20 es: 274.29
La temperatura del nodo 21 es: 274.65
La temperatura del nodo 22 es: 274.87
La temperatura del nodo 23 es: 274.95
La temperatura del nodo 24 es: 274.87
La temperatura del nodo 25 es: 274.65
La temperatura del nodo 26 es: 274.29
La temperatura del nodo 27 es: 273.77
La temperatura del nodo 28 es: 273.64
La temperatura del nodo 29 es: 274.06
La temperatura del nodo 30 es: 274.37
La temperatura del nodo 31 es: 274.57
La temperatura del nodo 32 es: 274.64
La temperatura del nodo 33 es: 274.57
La temperatura del nodo 34 es: 274.37
La temperatura del nodo 35 es: 274.06
La temperatura del nodo 36 es: 273.64
La temperatura del nodo 37 es: 273.57
La temperatura del nodo 38 es: 273.93
La temperatura del nodo 39 es: 274.22
La temperatura del nodo 40 es: 274.40
La temperatura del nodo 41 es: 274.46
La temperatura del nodo 42 es: 274.40
La temperatura del nodo 43 es: 274.22
La temperatura del nodo 44 es: 273.93
La temperatura del nodo 45 es: 273.57
80
8. MESH
Propósito
Ecuaciones MESH
81
𝑀𝑖,𝑗 : 𝐿𝑗−1 𝑥𝑖,𝑗−1 + 𝑉𝑗+1 𝑦𝑖,𝑗+1 + 𝐹𝑗 𝑧𝑖,𝑗 − (𝐿𝑗 − 𝑈𝑗 )𝑥𝑖,𝑗 − (𝑉𝑗 − 𝑊𝑗 )𝑦𝑖,𝑗 = 0 (96)
Figura 40. Modelo general de una etapa de Ecuaciones de entalpia (H): Se compone de los balances de entalpia en cada
equilibrio en contracorriente etapa, es decir que siempre va a existir una única ecuación de entalpia por
etapa.
Algoritmo de Thomas
Donde:
𝑗−1
𝑗−1
82
𝐷𝑗 = −𝐹𝑗 𝑧𝑖,𝑗 , 1≤𝑗≤𝑁
𝐶𝑗 𝐷𝑗 − 𝐴𝑗 𝑞𝑗−1
𝑝𝑗 = 𝑞𝑗 =
𝐵𝑗 − 𝐴𝑗 𝑝𝑗−1 𝐵𝑗 − 𝐴𝑗 𝑝𝑗−1
Figura 42. Sistema de ecuaciones tridiagonal para
las ecuaciones M modificadas
Por lo tanto,
𝑥𝑖,𝑗 = 𝑞𝑗 − 𝑝𝑗 𝑥𝑖,𝑗+1
Ejemplo
𝐶1 𝐶2 𝐶3 𝐶4 𝐶5
Metano 39.205 -1324.4 -3.4366 -3.10E-05 2
Etano 51.857 -2598.7 -5.1283 1.49E-05 2
Propano 59.078 -3492.6 -6.0669 1.09E-05 2
n-Butano 66.343 -4363.2 -7.046 9.45E-06 2
n-Pentano 78.741 -5420.3 -8.8253 9.62E-06 2
Solución
83
Información general de los flujos.
Etapa 1 2 3 4 5
L [kmol/h] 30000 30000 30000 45000 6000
V [kmol/h] 0 39000 39000 39000 39000
F [kmol/h] 0 0 15000 0 0
W [kmol/h] 0 0 0 0 0
U [kmol/h] 9000 0 0 0 0
Etapa 1 2 3 4 5
T (ºC) -90 -70 -50 -30 -10
Con esta presión de saturación y sabiendo que cada etapa en la torre opera
a 101325 Pa se puede calcular la constante de equilibrio para cada uno de
los componentes en cada etapa con la siguiente ecuación:
𝑃 𝑠𝑎𝑡
𝐾𝑖,𝑗 =
𝑃
Esto nos queda que para la inicialización planteada las constantes son las
siguientes:
84
Matriz tridiagonal
B1 C1 0 0 0
A2 B2 C2 0 0
0 A3 B3 C3 0
0 0 A4 B4 C4
0 0 0 A5 B5
Di
D1
D2
D3
D4
D5
Metano
Etapa Di
1 -39000 196585.74 0 0 0 0
2 30000 -226585.7 196023.5 0 0 0
3 0.004856 0.50430 1.78365 3.9204 6.25518 -3000
4 0.000174 0.06251 0.306175 0.81773 1.45754 0
5 5.8413E-6 0.008106 0.056244 0.18483 0.370635 0
Para el caso de la matriz del metano nos queda la siguiente matriz después
de la eliminación:
85
Etapa Matriz metano qi
1 1 -5.04066 0 0 0 0
2 0 1 -2.600956827 0 0 0
3 0 0 1 -1.0924605 0 0.0184
4 0 0 0 1 -0.86231844 0.0048
5 0 0 0 0 1 0.0018
x1 x2 x3 x4 x5
0.3321137 0.0658869 0.0253318 0.0063401 0.0018
Este procedimiento se repite para cada uno de los componentes. Una vez
se tiene la concentración de x para cada componente en cada etapa se
construye la siguiente matriz:
Composiciones X
Metano 0.332113 0.0658869 0.025331 0.0063401 0.001829
Etano 0.333181 0.135077 0.033195 0.0036432 0.000227
Propano 0.193356 0.8070550 0.9581547 0.6484365 0.209964
n-Butano 0.000455 0.0186650 0.154546 0.3640814 0.499316
n-Pentano 3.199E-06 0.001248 0.072391 0.1316182 0.49999
Suma 0.859111 1.0279324 1.243620 1.1541196 1.211333
Como se puede ver, la suma de las fracciones no suma 1 por lo cual se debe
normalizar la matriz anterior. Esta normalización se lleva a cabo con la
siguiente fórmula para cada etapa:
𝑥𝑖,𝑗
𝑋𝑖,𝑗 = ∀ 𝑖 ∈ 𝐶, 𝑗 ∈ 𝑁
∑𝐶𝑚=1 𝑥𝑚,𝑗
Composiciones X normalizadas
Metano 0.386578 0.0640965 0.020369 0.0054934 0.001510
Etano 0.387821 0.1314066 0.026692 0.0031567 0.000187
Propano 0.225065 0.7851245 0.770456 0.5618451 0.173333
n-Butano 0.000530 0.0181578 0.124271 0.3154624 0.412204
n-Pentano 3.723E-06 0.0012142 0.058210 0.1140421 0.412764
Suma 1 1 1 1 1
86
Composiciones y normalizadas
Metano 1.490583 0.3230891 0.102381 0.025081 0.005806
Etano 0.358802 0.3241281 0.145376 0.033157 0.003441
Propano 0.014218 0.1881025 0.535076 0.9299389 0.590996
n-Butano 2.392E-06 0.0004432 0.011629 0.0879500 0.283386
n-Pentano 1.200E-09 3.112E-06 0.000772 0.0057241 0.061869
1-Suma 0.863607 -0.164233 -0.204762 0.0818525 -0.0544984
En este caso, la última fila corresponde a 1 − ∑𝐶𝑖=1 𝑦𝑖,𝑗 ya que esta fila va
a ser la que se utiliza como parámetro del solver de Excel. Cuando se tienen
estas matrices se procede a realizar la solución del sistema por medio del
solver de Excel. Para llevar a cabo este solver, se le dice que debe variar las
temperaturas de las etapas. Se establece como objetivo la celda roja con un
valor de 0. Las celdas amarillas se añaden como restricción y se les asigna
un valor de 0. Por último, en la parte donde dice que “Convertir variables
sin restricción en no negativas” en la pestaña del solver, se debe asegurar
que esta casilla no este activa. Cuando se hace este procedimiento, se le da
click al botón de solucionar y se debería obtener la solución del problema.
Esto nos da el siguiente perfil de presión para cada uno de las etapas:
Etapa 1 2 3 4 5
T (ºC) -118.24954 -56.47159 -28.08725 -5.71135 9.80457
Composiciones X normalizadas
Metano 0.331245 0.0651061 0.028084 0.0086880 0.003131
Etano 0.333315 0.0777494 0.012293 0.0006927 2.680E-05
Propano 0.322205 0.6389061 0.317226 0.0927105 0.016691
n-Butano 0.013172 0.2107214 0.539341 0.6706748 0.480241
n-Pentano 6.09E-05 0.0075167 0.103053 0.2272338 0.49990
Composiciones y normalizadas
Metano 0.950951 0.3312455 0.126522 0.0319233 0.009542
Etano 0.047481 0.3333154 0.136726 0.0141810 0.000795
Propano 0.001564 0.3222059 0.565821 0.3634624 0.104405
n-Butano 2.29E-06 0.0131721 0.165133 0.5484337 0.699972
n-Pentano 3.55E-10 6.093E-05 0.005796 0.0419993 0.185283
87