Вы находитесь на странице: 1из 21

DEPARTAMENTO DE INGENIERA QUMICA

UNIVERSIDAD DE ALICANTE

REACTORES QUMICOS.
RESOLUCION DE PROBLEMAS CON ORDENADOR

Manuel Rodrguez Pastor

Rev: Junio 2002

Dentro de la denominacin de Reactores Qumicos se encuentra un rea de conocimiento que


normalmente es considerada nicamente como una asignatura mas. Sin embargo, debemos
observar esta asignatura desde un visto de vista mas amplio y considerarla como
conocimientos bsicos que debemos dominar para la mejor asimilacin de otras asignaturas y
reas de conocimiento (como pueden ser la simulacin, operaciones de separacin que
incluyan la posibilidad de reaccin qumica entre componentes, transporte reactivo de
sustancias, simulacin medioambiental, etc.

Mientras que en otras partes de la asignatura (teora y problemas) se explican las bases y se
realizan simplificaciones en los problemas que permiten la resolucin mediante relaciones (mas
o menos) simples de todas las variables implicadas y se introducen trminos como el grado de
conversin y los factores de expansin, en esta parte de la asignatura se realizan estudios de
simulacin sin limitacin de ningn tipo y sin tener que asumir simplificaciones para la
resolucin de los problemas. No nos limitaremos a problemas de una sola reaccin qumica o
a sistemas en que el estudio de la evolucin de todos los compuestos implicados se deban
reducir al estudio de un nico compuesto denominado clave.

Sin embargo, antes de continuar debemos remarcar un aspecto a menudo olvidado por los
alumnos (y en ocasiones por los profesores). Las simplificaciones reducen en gran medida los
problemas, pero debemos llevar cuidado y realizar solo las simplificaciones adecuadas en
base a dos puntos:
a) Simplifican el calculo y no tienen efectos sobre el resultado final (o el efecto se
considera despreciable)
b) Queremos ver el resultado en esta vida

Se estudiaran dos tipos de problemas fundamentalmente: estudios de simulacin en los cuales


se estudiaran como evolucionan las concentraciones (o caudales molares) con el tiempo o la
longitud y problemas de determinacin de constantes cinticas basndonos en datos
experimentales.

En todo caso, debemos tener en cuenta que los estudios que realizaremos partirn siempre de
balances de materia para todos los compuestos implicados (exceptuando los compuestos
cuyo comportamiento pueda ser directamente relacionado con el comportamiento de otros
compuestos implicados) y balances de energa cuando el sistema no sea isotermo.

Puesto que los estudios de simulacin serian intratables mediante el tratamiento con clculos
clsicos con calculadora, todos los problemas se solucionaran mediante la implantacin de los
problemas que resolveremos en programas de ordenador. Para esta asignatura se ha elegido
el programa MATLAB, ya utilizado en asignaturas anteriores y cuya utilizacin no es
demasiado compleja. Es necesario sealar que se debe repasar los apuntes de estas
asignaturas antes del desarrollo de estos problemas.

En el presente tema realizaremos un breve desarrollo de las instrucciones y estructuras que se


utilizaran en la resolucin de los problemas planteados. Asimismo, debemos sealar una
metodologa muy importante para el estudio de esta parte de la asignatura de Reactores
Qumicos y es que a programar se aprende programando, por lo cual el estudiante debe en lo
posible intentar la resolucin de los problemas por su cuenta.

En este tema de introduccin a esta parte de la asignatura veremos en primer lugar una breve
introduccin sobre la definicin y utilizacin de variables y de las diferentes estructuras de
programacin que podemos incluir dentro de un programa, para posteriormente comentar
brevemente la metodologa de resolucin de problemas mediante la tcnica de refinamientos
sucesivos. A continuacin se explicara la forma convencional de plantear un problema que
incluya ecuaciones diferenciales y de problemas de optimizacin.

1. VARIABLES Y VECTORES
La manera de hacer referencia a los diferentes elementos que intervienen en un programa es
darle un nombre particular a cada uno. En programacin se llaman identificadores a los
nombres usados para identificar cada elemento del programa.
En la mayora de los lenguajes de programacin de alto nivel (MATLAB incluido) los
identificadores son una palabra formada con caracteres alfabticos o numricos seguidos, sin
espacios en blanco ni signos de puntuacin intercalados, y que debe comenzar por una letra.
Pueden usarse las 52 letras maysculas y minsculas del alfabeto ingls, y los dgitos decimales
del 0 al 9.
Como precauciones deben tenerse en cuenta las siguientes consideraciones:

Evitar el uso de caracteres especiales. No deben aparecer caracteres especiales, como


son el punto, la coma, la , vocales acentuadas, espacios en blanco, etc
La mayora de lenguajes de programacin diferencia entre maysculas y minsculas.
No se pueden utilizar palabras reservadas, como instrucciones, comandos o funciones.

Ampliando estos conceptos, debemos sealar que en MATLAB podemos usar 31 caracteres
para definir una variable. En el identificador asignado a una variable, dentro de estos 31
caracteres deben tenerse en cuenta lo dicho anteriormente..

MATLAB distingue entre maysculas y minsculas, por lo que deberemos prestar especial
atencin a este hecho. Si en algn momento del desarrollo de un programa, cuando lo
ejecutamos aparece el mensaje ??? Undefined function or variable .... es
porque (con casi total seguridad) estamos haciendo referencia a una variable que no existe, y
que implica en el caso de que el programa este bien elaborado en lo restante que hemos
cometido un error gramatical al hacer referencia a una variable.

Finalmente, para evitar hacer referencia a palabras reservadas, podemos utilizar una
caracterstica sealada anteriormente. En MATLAB todas las funciones estn definidas y se
hace referencia a ellas en minsculas, por lo que definiendo todas las variables con el primer
carcter en maysculas evitaremos estos problemas. Un ejemplo de esto puede ser la
definicin de una variable con el nombre error, que por otra parte no es un identificador
extrao para una variable. En MATLAB existe una funcin denominada error que se utiliza
para detener un programa y devolver un mensaje.
1.1. Tipos de variables
En MATLAB existen dos tipos de variables, siempre identificadas por un nombre. Estas
variables pueden almacenar nmeros o texto.

Para introducir un texto en una variable este texto debe ir entre comillas simples (tecla al lado
del cero). En el editor de MATLAB en sus versiones posteriores a la 5.3 esto aparecer en
color rojo. Como ejemplo, para almacenar dentro de la variable Nombre el texto p38 lo
haremos como sigue:
Nombre='p38';

La introduccin de nmeros dentro de una variable es ms sencilla y solo debemos poner


despus del signo igual el numero que queremos almacenar. Si ponemos una expresin, dentro
de la variable se almacenara el valor numrico del resultado:
A=543;
B=5+2/8;
C=A+B;

Sealaremos que MATLAB no diferencia entre variables que almacenen nmeros enteros,
vectores, matrices, nmeros complejos, etc. Dentro de la variable podemos almacenar un
numero o un vector de 8 elementos (o los que sean) sin incluir ninguna diferencia en su
definicin (como podra ser el $ de BASIC para texto o la definicin de la clase
correspondiente en C++):
D=32:
E=[1, 2, 3, 4, 5, 6, 7, 8];

La nica diferencia, como se puede observar en las lneas anteriores, es que para definir un
vector (fila) los distintos elementos deben ser incluidos entre corchetes y separados por comas
o espacios en blanco.

Si quisiramos definir una matriz, con diferentes filas, las distintas filas de esta matriz deben ser
separadas por un punto y coma (;),

A=[1 2 3; 4 5 6; 7 8 9]
A =
1

1.2. Definicin de vectores y matrices.


Existen algunos mtodos que simplifican la definicin de vectores y matrices, en forma de
funciones implementadas en MATLAB. Solo sealaremos en este apartado los mas simples,
recordando al alumno la existencia de materiales didcticos mas especificos del manejo de
MATLAB.

Para definir un vector que vaya desde 0 hasta 100 y que contenga 200 puntos podemos
utilizar la funcin linspace de acuerdo con el ejemplo siguiente:
Tiempo=linspace(0,100,200)

Esta instruccin creara un vector fila que cumple lo dicho anteriormente y lo almacenara
dentro de la variable Tiempo.

Si conociramos el espaciado entre los puntos solo debemos indicar el primer punto, el
espaciado y el ultimo punto separados por dos puntos cada uno de ellos y sin hacer referencia
a ninguna funcin:
Tiempo=0:1:200

Esta instruccin creara un vector fila que ira desde 0 hasta 200 y sus diferentes elementos se
diferenciaran en una unidad. Si sealamos otro espaciado como por ejemplo 0.5, los
elementos se diferenciaran en ese espaciado:
Tiempo=0:0.5:200

Si queremos crear matrices podemos utilizar las funciones ones o zeros, que crearan matrices
con un numero determinado de filas y columnas llenas de unos o ceros respectivamente.

A=ones(1,2)

crea un vector de 1 fila y dos columnas llenas de unos

B=zeros(3,6)

crea un vector de 3 filas y 6 columnas llena de ceros

1.3. Referencia a elementos de una matriz o un vector.


Para hacer referencia a un elemento de un vector o una matriz debe ponerse entre parntesis
el (o los nmeros) que identifiquen esa posicin:
A(5)

hace referencia al elemento 5 del vector A

A(2,5)

hace referencia al elemento que se encuentra en la 2 fila y quinta columna

Para hacer referencia a rango de elementos podemos usar el operador dos puntos (:). As,
A(:,5) hace referencia a todas las filas de la columna 5 y A(100,:) hace referencia a todas
las columnas de la fila 100.

1.4. Operaciones matemticas entre matrices.


MATLAB puede operar con matrices por medio de operadores y por medio de funciones.
Los operadores matriciales de MATLAB son los siguientes:
+
*

^
/
\
.*
./
.^

adicin o suma
sustraccin o resta
multiplicacin
traspuesta
potenciacin
divisin-izquierda
divisin-derecha
producto elemento a elemento
divisin elemento a elemento
elevar a una potencia elemento a elemento

Estos operadores se aplican tambin a las variables o valores escalares, aunque con algunas
diferencias. Todos estos operadores son coherentes con las correspondientes operaciones
matriciales: no se puede por ejemplo sumar matrices que no sean del mismo tamao. Si los
operadores no se usan de modo correcto se obtiene un mensaje de error. Los operadores
anteriores se pueden aplicar tambin de modo mixto, es decir con un operando escalar y otro
matricial. En este caso la operacin con el escalar se aplica a cada uno de los elementos de la
matriz.

Es muy importante en este punto hacer especial hincapi en las tres operaciones elemento a
elemento. Debemos tener en cuenta que estas operaciones hacen que MATLAB se parezca
mas a MS EXCEL.

Supongamos que tenemos dos vectores:


6

A=linspace(0,10,5)
A =
0

2.5000

5.0000

7.5000

10.0000

0.5985

-0.9589

0.9380

-0.5440

B=sin(A)
B =
0

Si queremos calcular un nuevo vector que corresponda a A/B, pero sin que sea una divisin
matricial (es decir, [0/0, 2.5/0.5985, 5/-0.9589, ...]), debemos utilizar la divisin elemento a
elemento:

A./B
Warning: Divide by zero.
ans =
NaN

4.1773

-5.2142

7.9957

-18.3816

2. CONCEPTO DE SUBPROGRAMA
Un subprograma, como su nombre indica, es una parte de un programa. Como mecanismo de
programacin, un subprograma es una parte de un programa que se desarrolla por separado y
se utiliza invocndolo mediante un nombre simblico.
Desde el punto de vista de una buena metodologa de programacin, el mecanismo de
subprograma debe utilizarse para fragmentos del programa que tengan un cierto sentido en s
mismos. Si se hace as, podramos decir que, al igual que un programa sirve para resolver un
problema, un subprograma sirve para resolver un subproblema.
El empleo de subprogramas, desarrollando por separado ciertas partes del programa, resulta
especialmente ventajoso en los casos siguientes:

En programas complejos: Si el programa se escribe todo seguido resulta muy complicado


de entender, porque se difumina la visin de su estructura global entre la gran cantidad de
operaciones que forman el cdigo del programa. Aislando ciertas partes como
subprogramas separados se reduce la complejidad de la visin global del programa.

Cuando se repiten operaciones anlogas: Definiendo esa operacin como subprograma


separado, su cdigo se escribir slo una vez, aunque luego se use en muchos puntos del
programa. El tamao total del programa ser menor que si se escribiera el cdigo
completo de la operacin cada vez que se necesita.

La tcnica de refinamientos sucesivos sugiere descomponer las operaciones complejas de un


programa en otras ms simples. En sucesivos pasos de refinamiento, cada operacin se vuelve

a descomponer hasta que todo el programa se puede escribir utilizando las sentencias
disponibles en el lenguaje empleado.
Hasta el momento hemos continuado los refinamientos hasta llegar a las sentencias bsicas de
MATLAB. Podemos ver ahora sobre un ejemplo cmo es el programa resultante si las
operaciones intermedias se definen como subprogramas en MATLAB.
Por ejemplo, consideremos un programa para calcular el permetro del tringulo formado por
tres puntos (A, B y C).
Los primeros pasos del refinamiento seran los siguientes:
Calcular e imprimir el permetro --- >
Leer las coordenadas de los vrtices
Calcular el permetro
Imprimir el permetro
A su vez, la operacin de calculo del permetro se puede descomponer en una secuencia de
calculo de las distancias de un punto a otro para los tres puntos del tringulo.
Calcular el permetro ---->
Calcular la distancia desde el punto A al B
Calcular la distancia desde el punto B al C
Calcular la distancia desde el punto C al A
Con lo cual parecera adecuado construir un subprograma al cual si le proporcionamos las
coordenadas de los dos puntos nos devuelva la distancia entre ellos de acuerdo con la formula
matemtica establecida.
A continuacin se estudian las dos formas fundamentales de subprogramas en programacin
imperativa: Funciones y Procedimientos, y su manejo utilizando el lenguaje MATLAB.
3. FUNCIONES
Cuando se disea y desarrolla un programa aparecen con frecuencia operaciones significativas
que dan como resultado un valor simple y nico en funcin de ciertos parmetros. Por
ejemplo:
Potencia:
Volumen de un cubo:
Area de un tringulo:
Distancia entre dos puntos:

xn
Lado3
(Base * Altura) / 2
((x1 - x2)2 + (y1 -y2)2)1/2

Estas operaciones se pueden considerar subprogramas y ms exactamente funciones. Una


funcin es un tipo de subprograma que calcula como resultado un valor simple y nico a partir

de otros valores dados como argumentos. En lneas generales, una funcin se asemeja
bastante a la idea matemtica de funcin F(x, y, ... ), con argumentos x, y,

3.1. Definicin de funciones


El primer paso en el manejo de una funcin es declarar su interfaz. Esta declaracin incluye su
nombre, los argumentos que necesita (teniendo en cuenta cuales deben ser cadenas de texto y
cuales nmeros), y los resultados que proporciona. En MATLAB se define una funcin en un
m-file escribiendo en este la cabecera de funcin de la siguiente forma:
function [Variables de salida] = nombre (Variables de entrada)

La declaracin se inicia con la palabra clave function y a continuacin, entre corchetes, las
variables que contendrn el resultado, separadas por comas. Seguidamente, un nombre
identificador de la funcin (que debe coincidir obligatoriamente con el nombre del fichero en
algunas versiones de MATLAB) y a continuacin la lista de los argumentos, entre parntesis,
y separados por el carcter de coma (,).
Las cabeceras de las funciones para los ejemplos anteriores podran ser:
function x2=potencia(x)
function V=volumen(lado)
......
function S=Area(Base, Altura)

......
Estas cabeceras representan la interfaz entre la definicin de la funcin y su utilizacin
posterior. Los nombres de los argumentos son formales, esto quiere decir que no son
variables del programa, sino slo nombres simblicos que sirven para formalizar la definicin
posterior de la funcin, permitiendo hacer referencia a los argumentos en la definicin de los
clculos.
La definicin completa de una funcin se compone de la cabecera, seguida de un cuerpo que
tiene la misma estructura que un bloque de programa completo. La parte principal de la
funcin estar constituida por una secuencia de sentencias.
Por ejemplo, la definicin completa de las funciones anteriores se realizara de la siguiente
forma:
function x2=potencia(x)
x2=x*x;
function V=volumen(lado)
V=lado*lado*lado;
......
function S=area(lado,altura)
S=(base*altura)/2;

3.2. Uso de funciones


Para usar una funcin en los clculos de un programa se invoca dicha funcin escribiendo su
nombre y a continuacin, entre parntesis, los valores concretos de los argumentos, separados
por comas. Esta invocacin de la funcin representa un valor del tipo de la funcin, que podr
ser usado como operando en una expresin aritmtica, o en general en cualquier parte del
programa en que sea vlido escribir una expresin de ese tipo.
Al invocar una funcin es obligatorio que los valores suministrados para los argumentos
correspondan en nmero y tipo con los argumentos en la definicin. La correspondencia de
tipo significa que el tipo del argumento en la invocacin sea compatible en asignacin con el
tipo de argumento formal.
El efecto de la invocacin de una funcin puede describirse en forma simplificada de la
siguiente manera:
1)
2)
3)
4)

Se evalan las expresiones de los valores de los argumentos.


Se asignan dichos valores a los correspondientes argumentos formales.
Se ejecuta el cdigo de la definicin de la funcin, hasta alcanzar una sentencia de fin.
El valor retornado se usa en el punto donde se invoc la funcin.

4. GRFICOS BIDIMENSIONALES
MATLAB utiliza un tipo especial de ventanas para realizar las operaciones grficas. Ciertos
comandos abren una ventana nueva y otros dibujan sobre la ventana activa, bien sustituyendo
lo que hubiera en ella, bien aadiendo nuevos elementos grficos a un dibujo anterior. Todo
esto se ver con ms detalle en las siguientes secciones.

4.1. Funciones grficas 2D elementales


MATLAB dispone de cuatro funciones bsicas para crear grficos 2-D. Estas funciones se
diferencian principalmente por el tipo de escala que utilizan en los ejes de abscisas y de
ordenadas. Estas cuatro funciones son las siguientes:
plot()
loglog()
semilogx()
semilogy()

crea un grfico a partir de vectores y/o columnas de matrices, con escalas


lineales sobre ambos ejes.
dem con escala logartmica en ambos ejes
dem con escala lineal en el eje de ordenadas y logartmica en el eje de
abscisas
dem con escala lineal en el eje de abscisas y logartmica en el eje de
ordenadas

En lo sucesivo se har referencia casi exclusiva a la primera de estas funciones (plot). Las
dems se pueden utilizar de un modo similar.

10

Existen adems otras funciones orientadas a aadir ttulos al grfico, a cada uno de los ejes, a
dibujar una cuadrcula auxiliar, a introducir texto, ete. Estas funciones son las siguientes:
title('ttulo')
aade un ttulo al dibujo
xlabel('tal')
aade una etiqueta al eje de abscisas. Con xlabel off desaparece
ylabel('cual')
aade una etiqueta al eje de ordenadas. Con ylabel off desaparece
text(x,y,'texto') introduce 'texto' en el lugar especificado por las coordenadas x e y.
gtext('tcxto')
introduce texto con ayuda del ratn: el cursor cambia de forma y se
espera un clic para introducir el texto en esa posicin
legend()
define rtulos para las distintas lneas o ejes utilizados en la figura. Para
ms detalle, consultar el He1p
grid
activa la inclusin de una cuadrcula en el dibujo. Con grid off
desaparece la cuadrcula

4.2. Funcin plot


Esta es la funcin clave de todos los grficos 2-D en MATLAB. Ya se ha dicho que el
elemento bsico de los grficos bidimensionales es el vector. Se utilizan tambin cadenas de 1,
2 3 caracteres para indicar colores y tipos de lnea. La funcin plot(), en sus diversas
variantes, no hace otra cosa que dibujar vectores. Un ejemplo muy sencillo de esta funcin, en
el que se le pasa un nico vector como argumento, es el siguiente:
7

1
1

1.5

2.5

3.5

4.5

El resultado de este comando es que se abre una ventana mostrando el grfico de la figura
anterior. Por defecto, los distintos puntos del grfico se unen con una lnea continua. Tambin
por defecto, el color que se utiliza para la primera lnea es el azul.
La funcin plot() permite tambin dibujar mltiples curvas introduciendo varias parejas de
vectores como argumentos. En este caso, cada uno de los segundos vectores se dibujan en
ordenadas como funcin de los valores del primer vector de la pareja, que se representan en

11

abscisas. Si el usuario no decide otra cosa, para las sucesivas lneas se utilizan colores que son
permutaciones cclicas del azul, verde, rojo, cian, magenta, amarillo y negro. Obsrvese bien
cmo se dibujan el seno y el coseno en el siguiente ejemplo:
x=0:pi/25:6*pi;
Y=sin(x); Z=cos(x);
plot(x,Y,x,Z)
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0

10

12

14

16

18

20

4.3. Estilos de lnea y marcadores en la funcin plot


En la seccin anterior se ha visto cmo la tarea fundamental de la funcin plot() era dibujar los
valores de un vector en ordenadas, frente a los valores de otro vector en abscisas. En el caso
general esto exige que se pasen como argumentos un par de vectores. En realidad, el conjunto
bsico de argumentos de esta funcin es una tripleta formada por dos vectores y una cadena
de 1, 2 3 caracteres que indica el color y el tipo de lnea o de marker. En la tabla siguiente
se pueden observar las distintas posibilidades.
Smbolo
y
m
c
r
G
B
W
k

Color
Yellow
Magenta
cyan
red
green
blue
white
black

Smbolo
:
-.
--

Estilo de lnea
lneas continuas
lneas a puntos
lneas a barra-punto
lneas a trazos

Smbolo
.
o
x
+
+
s
d
^
v
>
<
p
h

Marcadores (markers)
puntos
crculos
marcas en x
marcas en +
marcas en *
marcas cuadradas (square)
marcas en diamante (diamond)
tringulo apuntando arriba
tringulo apuntando abajo
tringulo apuntando a la dcha
tringulo apuntando a la izda
estrella de 5 puntas
estrella de seis puntas

12

4.4. Control de los ejes


Tambin en este punto MATLAB tiene sus opciones por defecto, que en algunas ocasiones
puede interesar cambiar. El comando bsico es el comando axis. Por defecto, MATLAB
ajusta la escala de cada uno de los ejes de modo que vare entre el mnimo y el mximo valor
de los vectores a representar. Este es el llamado modo "auto", o modo automtico. Para
definir de modo explcito los valores mximo y mnimo segn cada eje, se utiliza el comando:
axis([xmin, xmax, ymin, ymax])
mientras que :
axis(auto)
devuelve el escalado de los ejes al valor por defecto o automtico. Otros posibles usos de
este comando son los siguientes:
v=axis
axis(axis)
axis('j')
axis('xy')
axis('equal)
axis('square')
axis('image')

devuelve un vector v con los valores [xmin, xmax, ymin, ymax]


mantiene los ejes en sus actuales valores, de cara a posibles
nuevas grficas aadidas con hold on
utiliza ejes de pantalla, con el origen en la esquina superior izda.
y el eje j en direccin vertical descendente
utiliza ejes cartesianos normales, con el origen en la esquina
inferior izda. y el eje y vertical ascendente
el escalado es igual en ambos ejes
la ventana ser cuadrada
la ventana tendr las proporciones de la imagen que se desea
representar en ella (por ejemplo la de una imagen bitinap que se desee
importar) y el escalado de los ejes ser coherente con dicha imagen

4.5. Control de ventanas grficas: funcin figure


Si se llama a la funcin figure sin argumentos, se crea una nueva ventana grfica con el nmero
consecutivo que le corresponda. El valor de retorno es dicho nmero.
Por otra parte, el comando figure(n) hace que la ventana n pase a ser la ventana o figura
activa. Si dicha ventana no existe, se crea una nueva ventana con el nmero consecutivo que le
corresponda (que se puede obtener como valor de retorno del comando). La funcin close
cierra la figura activa, mientras que close(n) cierra la ventana o figura nmero n.
Si quisiramos abrir varias ventanas donde poner grficos, definimos la primera ventana,
dibujamos el grafico, definimos la segunda, dibujamos los grficos correspondientes y as
todas las que queramos.

13

5. SISTEMAS DE ECUACIONES DIFERENCIALES ACOPLADOS.


Para la resolucin de problemas que impliquen la integracin numrica de sistemas de
ecuaciones diferenciales en este curso utilizaremos la funcin ode113 existente en MATLAB.
En este apartado veremos como utilizarla, los datos necesarios y los resultados que
proporcionan.
Un desarrollo mas amplio de este apartado se puede obtener escribiendo en la linea de
comandos de MATLAB la instruccin help ode113 y consultando toda la informacin
relacionada.
Esta funcin resuelve sistemas de ecuaciones diferenciales mediante un mtodo de tamao de
paso variable y de orden variable, adaptndose a las variaciones que experimentan las
variables.
La lnea de instruccin para utilizar la funcin ode113 es:
[T,Y] = ode113('F',TSPAN,Y0)
donde :
T es un vector columna que incluye los valores de la variable independiente tras su integracin
Y es una matriz que contiene en sus columnas la variacin de las distintas variables
dependientes
F es el nombre del fichero que contiene las ecuaciones diferenciales y del que hablaremos
mas adelante
TSPAN es un vector con los valores de la X inicial y de la X final ([X0 XF]). Si quisiramos
los valores de las distintas variables dependientes para una serie de valores concretos de X,
los indicaramos en este vector ([X0 X1 X2 ... XF])
Y0 es un vector con los valores iniciales para todas las variables dependientes
Las ecuaciones diferenciales se deben escribir en un fichero aparte, en el cual deberemos
indicar como calcular los valores numricos de las diferentes ecuaciones diferenciales y los
valores obtenidos deben ser incluidos en un vector columna al final.
Veamos un ejemplo para ilustrar todo lo dicho anteriormente. Consideremos el siguiente
sistema de ecuaciones diferenciales con las condiciones iniciales indicadas:
dy1
= 2 * y 2 0.1* y1 + y 3
dx
dy 2
= 2 * y 2 + 0.1* y1 + y 3
dx
dy3
= 2 * y 2 0.1* y1 y 3
dx
x=0

y1 = 5; y 2 = 2; y 3 = 10

14

Construiremos un fichero de MATLAB donde incluiremos las ecuaciones diferenciales. Para


ello, debemos indicar como calcular los valores correspondientes de las diferentes pendientes:
F1 = 2 * y 2 0.1* y1 + y 3
F2 = 2 * y 2 + 0.1 * y1 + y 3
F3 = 2 * y 2 0.1* y 1 y3
El fichero quedara como sigue:

function F=prueba(x,y)
%
%
%
%

F es un vector columna con las diferentes ecuaciones dif


x es la variable independiente, y debe ponerse en el encabezado
auqnue luego no aparezca en las ecuaciones diferenciales
y es un vector con las distintas variables dependientes.

F(1)=2*y(2)-0.1*y(1)+y(3);
F(2)=-2*y(2)+0.1*y(1)+y(3);
F(3)=-2*y(2)-0.1*y(1)-y(3);
% En estos momentos el vector F es un vector fila y
% el vector F debe ser columna para solucionarlo lo trasponemos
F=F';

Para resolver el problema, solo nos resta incluir en un programa o a travs de la lnea de
comandos las siguientes ordenes:
% Programa de ejecucin del ejemplo del Tema
A='prueba';
X0=0;
XF=10;
Y0=[5 2 10];

%
%
%
%

Nombre del fichero que contiene el sistema de ec.


Valor de la X inicial
Valor de la X final
Vector con las X iniciales

[X,Y]=ode113(A,[X0 XF],Y0);
plot(X,Y)

Tras la ejecucin, escribiendo en la lnea de comandos el nombre del programa donde hemos
almacenado este texto (ej1.m) sin el .m, obtenemos un dibujo con la representacin de la
evolucin de estas variables y almacenadas en la variable X la evolucin de la variable
independiente en un vector columna y en la matriz Y la evolucin de las distintas variables
dependientes en distintas columnas.

15

14

12

10

-2
0

[X Y]
ans =
0
0.0024
0.0073
0.0170
0.0365
0.0754
0.1532
0.3089
0.4646
0.6203
0.7760
0.9317
1.0873
1.2430
1.3987
1.7101
1.9903
2.2705
2.5227
2.7749
3.0271
3.2793
3.5315
3.7837
4.0359
4.2881
4.5403
4.7926
5.0448
5.2970
5.5492

5.0000
5.0328
5.0984
5.2294
5.4903
6.0064
7.0078
8.8348
10.3648
11.5659
12.4418
13.0183
13.3336
13.4310
13.3544
12.8382
12.1376
11.3534
10.6460
9.9713
9.3447
8.7698
8.2442
7.7629
7.3193
6.9082
6.5247
6.1652
5.8266
5.5071
5.2050

2.0000
2.0157
2.0467
2.1069
2.2202
2.4195
2.7190
2.9947
2.9580
2.7245
2.3814
1.9922
1.6004
1.2342
0.9099
0.4103
0.1239
-0.0391
-0.1112
-0.1375
-0.1372
-0.1233
-0.1049
-0.0864
-0.0707
-0.0583
-0.0491
-0.0427
-0.0382
-0.0351
-0.0329

10.0000
9.9647
9.8942
9.7532
9.4714
8.9106
7.8078
5.7334
3.9038
2.3604
1.1099
0.1363
-0.5898
-1.1044
-1.4452
-1.7466
-1.7465
-1.6207
-1.4681
-1.3132
-1.1735
-1.0552
-0.9586
-0.8807
-0.8174
-0.7650
-0.7201
-0.6806
-0.6444
-0.6106
-0.5786

16

10

5.8014
6.0536
6.5580
6.9836
7.4091
7.8347
8.2603
8.6858
9.1114
10.0000

4.9192
4.6487
4.1506
3.7716
3.4269
3.1137
2.8291
2.5705
2.3356
1.9120

-0.0312
-0.0297
-0.0271
-0.0249
-0.0228
-0.0208
-0.0189
-0.0172
-0.0156
-0.0127

-0.5481
-0.5188
-0.4641
-0.4220
-0.3834
-0.3484
-0.3165
-0.2875
-0.2612
-0.2138

6. OPTIMIZACION DE FUNCIONES
Para obtener los parmetros cinticos de un problema normalmente dispondremos de datos
experimentales y querremos comprobar, en primer lugar si se ajustan bien a una cintica
determinada y de forma simultanea a esto, cual es el valor de los parmetros cinticos (orden,
volar de constantes cinticas y/o factores preexponenciales) que mejor representan el
problema.
Para ello usaremos la funcin fmins, disponible en MATLAB y que minimiza un funcin de
varias variables. El uso de esta funcin es muy sencillo:
x = fmins('f',x0)

devuelve un vector x que es un mnimo local de f(x) cercano al punto inicial x0. Esta claro que
f(x) debe de ser una funcin escalar de un vector. Veamos un ejemplo.
Una serie de experimentos nos ha proporcionado la evolucin de la concentracin de 1
compuesto con el tiempo en un RDTA isotermo. Desconocemos el orden de la reaccin, su
constante cintica y el factor preexponencial siendo conocida la temperatura a la cual se
desarrolla la reaccin.
Los datos experimentales se muestran en la tabla siguiente
Tiempo (s)
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
11.0
12.0
13.0

Ca (mol/L)
10.0
9.5
9.1
8.8
8.4
8.1
7.8
7.5
7.3
7.0
6.8
6.6
6.4
17

14.0
15.0
16.0
17.0
18.0
19.0
20.0
21.0
22.0
23.0
24.0
25.0

6.2
6.0
5.9
5.7
5.6
5.4
5.3
5.2
5.0
4.9
4.8
4.7

La ecuacin que regir el cambio es:


dCA
E 2
= k 0 exp
*C A
dt
298

La resolucin del problema se realizara siguiendo el esquema:


Suponemos valores
para K0, E y n

Calculamos como varia la


concentracion de A de
acuerdo con estos valores

Calculamos un vector
diferencia entre los valores
teoricos y los experimentales

Los ficheros necesarios sern los siguientes:


% Fichero principal. Optimizacion
% Definimos un vector inicial, pero teniendo en cuenta que este vector
inicial
% es solo un conjunto inicial de valores de K0,E y N para probar
X0=[10 2000 1];
X=fmins('f_ej2',X0)
% Con los valores obtenidos representamos para ver la bondad del
ajuste
% Introducimos los valores experimentales
Tiempo=0:1:24;

18

CAexp=[10 9.5 9.1 8.8 8.1 7.8 7.5 7.3 7.0 6.8 6.6 6.4 6.2 6.0 5.9 5.7
5.6 5.4 5.3 5.2 5.0 4.9 4.8 4.7 4.6]';
% Reasignamos las constantes, pero antes las definimos como globales,
para que puedan ser
% utilizadas por el fichero funcion
global K0 E N
K0=X(1);
E=X(2);
N=X(3);
% Preparando la aplicacion del ODE113
PuntoInicial=0;
PuntoFinal=25;
Ca0=10;
[T,CAteo]=ode113('f_ej3',Tiempo,Ca0);
% Hacemos la representacion
figure(1)
plot(Tiempo,CAexp,Tiempo,CAteo)
title('Ejemplo de optimizacion')
xlabel('Tiempo (s)')
ylabel('Ca (mol/L)')
legend('CAexp','CAteo')
grid

function E=f_ej2(X)
%
%
%
%

Fichero de funcion
X(1) Corresponde a
X(2) Corresponde a
X(3) Corresponde a

del ejemplo 2. Minimizacion


la constante K0
la constante E
la constante n

% Introducimos los valores experimentales


Tiempo=0:1:24;
CAexp=[10 9.5 9.1 8.8 8.1 7.8 7.5 7.3 7.0 6.8 6.6 6.4 6.2 6.0 5.9 5.7
5.6 5.4 5.3 5.2 5.0 4.9 4.8 4.7 4.6]';
% Reasignamos las constantes, pero antes las definimos como globales,
para que puedan ser
% utilizadas por el fichero funcion
global K0 E N
K0=X(1);
E=X(2);
N=X(3);
% Preparando la aplicacion del ODE113
PuntoInicial=0;
PuntoFinal=25;
Ca0=10;
[T,CAteo]=ode113('f_ej3',Tiempo,Ca0);

19

%Calculamos un vector error como diferencia de todos los valores al


cuadrado
E=sum((CAexp-CAteo).^2)

function F=f_ej3(t,Ca)
% Fichero de funcion del ejemplo 2. Integracion
% Definimos las variables como globales, para que puedan ser
utilizadas por el fichero funcion
global K0 E N
F=-K0*exp(-E/298)*Ca^N;

La solucin que obtendramos seria:


X =
1.0e+003 *
0.0032

2.1086

0.0023

Y el ajuste se puede observar en la siguiente figura.


Ejemplo de optimizacion
10
CAexp
CAteo
9

Ca (mol/L)

10

15

20

25

Tiempo (s)

Hasta aqu se ha desarrollado una breve explicacin de los apartados que se consideran mas
importantes y cuyo recuerdo era imprescindible para la resolucin de los diferentes problemas
que veremos en la asignatura. A partir de ahora realizaremos una serie de problemas que

20

incluyen casi todos los aspectos posibles en la simulacin de sistemas que incluyen reaccin
qumica.

21