Crecimiento algas unicelulares
Enviado por Stella • 9 de Enero de 2019 • 4.180 Palabras (17 Páginas) • 425 Visitas
...
Concentraciones muy altas de fosfatos, detritus y nitratos, sugieren un excesivo crecimiento de algas en el medio, por lo que las algas actúan también como indicadores de contaminantes presentes en el agua, aún después de haber sido tratada.
- Definición del problema
Determinar la tasa de crecimiento de las algas unicelulares flotantes debajo de la descarga de una planta de tratamiento de aguas de drenaje mediante un sistema de cuatro Ecuaciones Diferenciales Ordinarias y una ecuación auxiliar la cual depende de:
- Tiempo de viaje
- Concentración de clorofila
- Concentración de nitrógeno inorgánico
- Concentración de fósforo inorgánico
- Concentración de detritus
- Tasa de mortandad de las algas
- Tasa de asentamiento de las algas
- Tasa de hidrólisis de detritus
- Relación nitrógeno a carbono
- Relación fósforo a carbono
- Relación nitrógeno a clorofila
- Constante media de saturación del fósforo
- Constante media de saturación del nitrógeno
- Metodología de solución
El problema que se resolvió fue elegido del libro: Métodos numéricos para ingenieros, de Steven C. Chapra y Raymond P. Canale. Se obtuvo del capítulo 28, correspondiente al tema de estudios de caso para la solución de sistemas de ecuaciones diferenciales ordinarias.
Para familiarizarnos con el problema creamos un archivo .m para resolver el sistema de 4 ecuaciones ordinarias dependientes de una ecuación algebraica auxiliar, considerando los parámetros y valores iniciales sugeridos por el autor. El sistema de ecuaciones diferenciales ordinarias que se resolvió fue el siguiente:
(1) [pic 4]
(2) [pic 5]
(3) [pic 6]
(4) [pic 7]
Donde:
[pic 8]
[pic 9]
[pic 10]
[pic 11]
[pic 12]
[pic 13]
[pic 14]
[pic 15]
[pic 16]
[pic 17]
[pic 18]
[pic 19]
[pic 20]
Definido como:
(5) [pic 21]
Donde:
[pic 22]
[pic 23]
[pic 24]
La relación matemática anterior define a como el producto entre la y el mínimo valor obtenido entre la relación del fósforo y su constante media de saturación o la del nitrógeno y su constante media de saturación.[pic 25][pic 26]
Los valores iniciales y parámetros obtenidos de la bibliografía son los siguientes:
a = 1 μg/L; n = 4000 μg/L; p = 800 μg/L; c = 0.
Kd = 0.1 1/d; Ks = 0.15 1/d; Kh = 0.025 1/d; rnc = 0.18; rpc = 0.25; rna = 7.2; rca = 40; rpa = 1; kg = 0.5 1/d, ksp = 2, ksn = 15.
Para resolver las ecuaciones diferenciales se creó una función donde se declararon las ecuaciones y los parámetros, posteriormente se creó otra función para resolver dicho sistema con la sintaxis ode15s, estableciendo un tiempo de integración como:
Tr = linspace(0,50,1000)
Y un vector de valores iniciales de la siguiente forma:
Xo = [1 4000 800 0];
En cada función se creó un if que tomara en cuenta el mínimo valor de Kg (n,p) que debía usar el programa para la resolución de las ecuaciones diferenciales. Su estructura se resume a lo siguiente:
if n>P
kg=kg1*P/(ksp+P);
else
kg=kg1*n/(ksn+n);
end
Con el ode15s se obtuvo una matriz con 4 columnas, cada una correspondiente a las concentraciones de las variables a través del tiempo. Se obtuvo el perfil de dichas concentraciones en el tiempo y también se obtuvo kg para los distintos tiempos tomando en cuenta las concentraciones de nitrógeno y fósforo. Posteriormente se graficó dicha tasa contra el tiempo.
Programación de GUI
Para el diseño de la interfaz se tomó como base una plataforma principal de la cual se derivarían algunas otras. Dicha plataforma cuenta con 3 paneles:
- Panel para modificar valores iniciales y tiempo de integración: se colocaron 4 textos editables con sus respectivas etiquetas (tags) programables, además se colocaron 2 botones; uno para calcular y otro para limpiar los textos editables.
- Programación de botón para calcular: en el archivo .m del GUI se escribe el script con el que se declaró y resolvió el sistema de ecuaciones diferenciales en una función llamada: calcular_callback, además se declara el vector de valores iniciales utilizando una etiqueta str2num(get(handles.tag,'string')). Cuando se proporcionan los valores iniciales y el tiempo de integración se tiene que indicar dónde se va a graficar el perfil deseado. Para ello se insertan ‘axes’ en el GUI y se accede a ellos con la sintaxis: axes(handles.axes#).
- Programación de botón para limpiar valores: en la función limpiar_callback se declaran los textos editables que se desea limpiar de la siguiente forma: set(handles.tag,'String','').
- Panel para obtener los valores de concentraciones y kg a un tiempo determinado: este panel cuenta con un texto editable y 5 textos
...