Mostrando entradas con la etiqueta Heramientas de Ingenieria Quimica. Mostrar todas las entradas
Mostrando entradas con la etiqueta Heramientas de Ingenieria Quimica. Mostrar todas las entradas

jueves, 3 de julio de 2014

Newton-Raphson en C

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<math.h>
#include<process.h>

#define f(x) 3*x -cos(x) -1
#define df(x) 3 -sin(x)

void nwrap();

void main(){
 printf("\n Solucion por el Método de Newton Raphson \n");
 printf("\n F(x): ");
 printf("\n\t\t\t 3*x -cos(x) -1 = 0 \n\t");
 nwrap();
 getch();
}

void nwrap(){
 float x1,x0;
 float f1,f0;
 float df0;
 int i=0, itr=0;
 float TOL;
 float error;
   for(x1=0;;x1 +=0.01){
    f1=f(x1);
    if (f1>0){
     break;
    }
   }
x0 = x1-0.01;
f0 = f(x0);
printf("Numero de Iteraciones: ");
scanf("%d",&itr);
printf("Tolerancia Maxima: ");
scanf("%f",&TOL);
     if(fabs(f0)>f1){
      printf("\n\t\t La raiz es: %0.4f\n",x1);
     }
     if(f1 > fabs(f(x0))){
      printf("\n\t\t La raiz es: %0.4f\n",x1);
 }
x0 = (x0+x1)/2;
for(;i<=itr;i++){
 f0=f(x0);
 df0=df(x0);
 x1 = x0 - (f0/df0);
 printf("\n\t\t iteracion %d  aproximacion: %f",i,x1);
 error = fabs(x1-x0);
   if(error < TOL){
    break;
   }
 x0 = x1;
}
   if(error > TOL){
    printf("\n\n\t Iteraciones No suficientes" );    
   }
printf("\n\n\n\t\t\t--------------------------");
printf("\n\n\t\t Raiz: %0.4f ",x1);
printf("\n\n\n\t\t\t--------------------------");
}

jueves, 3 de abril de 2014

Sympy aplicado a Ingenieria Quimica

from sympy import*
x= Symbol('x')
y=Symbol('y')
z=Symbol('z')
w=Symbol('w')
#C1=x,C2=y,c3=z.,c4=w
res = solve([75*x-25*y-350,-45*y+45*x, 75*x-105*z+30*w,-20*y+30*w-150],[x,y,w,z])
print(res)
El diagrama es el siguiente.

Ejecutando el código:
{x: 7, w: 29/3, z: 163/21, y: 7}


------------------
(program exited with code: 0)
Press return to continue

lunes, 21 de octubre de 2013

Modelo de reacciones en serie, usando Matlab

Tenemos la función en la que planteamos nuestras ecuaciones de balance.
%Modelo basico de reacciones en serie
%esta funcion debe llamarse serie
%x---k1-->y---k2--->z
function dEct = serie(t,C)
global k1 k2
dEct = [-k1*C(1);k1*C(1)-k2*C(2);k2*C(2)];
Ahora  este es nuestro programa principal, en el cual  usamos en este caso la función serie donde tenemos nuestra ecuación plantead como dEct.
%programa principal
clc
clear
global k1 k2
disp('Introduce los siguientes Datos')
Cxo = input('Concentracion inicial de X (mol):_ ');
Cyo = input('Concentracion inicial de Y (mol):_ ');
Czo = input('Concentracion inicial de Z (mol):_ ');
cuadal = input('Cuadal (l /min):_ ');
k1 = input('K1:_ ');
k2 = input('K2:_ ');
tiempolimite = input('Tiempo maximo de reaccion:_ ');
vectiempo = [0:0.0005:tiempolimite];
vecC = [Cxo Cyo   Czo];
[t,C]= ode45('serie',vectiempo,vecC);
plot(t,C(:,1),'-',t,C(:,2),':',t,C(:,3),'--');
xlabel('tiempo (min)');
ylabel('Concentracion (mol/litro)');
title('Modelo de Reaccion en Serie');
legend ('Cx','Cy','Cz');
Cmax = max(C(:,2));
tmax = t(find(C(:,2)==(max(C(:,2)))));
Vol = cuadal*tmax
Corriendo la aplicacion.
Introduce los siguientes Datos
Concentracion inicial de X (mol):_ 3.5
Concentracion inicial de Y (mol):_ 1.23
Concentracion inicial de Z (mol):_ 0
Cuadal (l /min):_ 28.598
K1:_ 0.562
K2:_ 0.123
Tiempo maximo de reaccion:_ 25

Vol =

   83.2488

miércoles, 14 de agosto de 2013

orderseek--Encontrar el orden de una reacción Química en Matlab

Este pequeño programa hecho en Matlab nos sirve para hallar el orden de una reacción química, cabe señalar que este programa no es creación mía, pero lo estoy usando como punto de partida  para crear un propio programa ya que en el caso de reacciones químicas tenemos muchos casos como son, volumen constante, volumen Variable, Reversibles, etc. 

lunes, 5 de agosto de 2013

Diagrama Liquido- Vapor en un proceso Isobarico-- usando Matlab

El modelo de Wilson permite que el programa para tener en cuenta la desviación del comportamiento ideal en la fase líquida. El usuario debe introducir bajo presiones moderadas ya que el término de corrección a alta presión no está incluido.

miércoles, 17 de julio de 2013

Modelo Basico de un BioReactor en Matlab.

Este proyecto SimBiology contiene una versión modificada del modelo bioreactor presentado en la conferencia señala que "Una introducción a la modelización de los biorreactores" por Bengt Carlsson y se puede encontrar aquí: http://www.it.uu.se/edu/course/homepage / modynsyst/vt11/Lecture/DynSystBior2009.pdf
Se puede utilizar como una plantilla para los modelos más complicados de bioprocesos

jueves, 18 de abril de 2013

Ecuacion de Segundo Grado en Python 3 usando Tkinter

En el post anterior (16/abril) publicamos el código para la resolucion de ecuaciones  de segundo grado en python 3.x. Partiendo de este código anterior desarrollamos una aplicacion con interfaz de usuario, usando la librería tkinter, en nuestro intento por aprender programacion en python 3.3. El código queda como sigue.

## graficador de  la funciones
from tkinter import*
from tkinter import messagebox
import matplotlib.pyplot as plt
import numpy as np
ventana = Frame(height = 400, width = 400)
ventana.pack(padx = 10, pady = 10)
### Declarando Variables
a = DoubleVar()
b = DoubleVar()
c= DoubleVar()
restx1 = StringVar()
restx2 = StringVar()

#Declarando funciones 
### funcion graficar
def graficar():
     a = aA.get()
     b = bB.get()
     c = cC.get()
     ax = float(a)
     bx = float(b)
     cx  = float (c)
     x = np.arange(-10,10,0.5)
     y = ax*x**2 + bx*x + cx
     plt.plot(x,y)
     plt.title('a*x^2 + b*x + c = 0')
     plt.xlabel('X')
     plt.ylabel('Y')
     plt.show()

##termina funcion graficar
### inica funcion calcular
def calcular():

        
        a = aA.get()
        b = bB.get()
        c = cC.get()
        ax = float(a)
        bx = float(b)
        cx  = float (c)
        ## calculando Delta
        delta = float(bx**2-4*ax*cx)
           
        if delta<0:
                
                messagebox.showerror('Eror', 'No hay solucion')

        elif delta ==0:
            s == float(-bx/2*ax)
            messagebox.showinfo('resultado','Solucion unica ', s)
        else:
             
             
                  resultado = Label(ventana, text =
                                   "Resultado")
                  resultado.place(bordermode = OUTSIDE, height = 30, width= 100, x = 150, y= 250)
                  resultado1 = Label(ventana, text =
                                   "X1")
                  resultado1.place(bordermode = OUTSIDE, height = 30, width= 50, x = 180, y= 280)
                  resultado2 = Label(ventana, text =
                                   "X2")
                  resultado2.place(bordermode = OUTSIDE, height = 30, width= 50, x = 180, y= 310)
                  x1 = float((-bx+((bx**2 - 4*ax*cx))**0.5)/(2*ax))
                  x2 = float((-bx-((bx**2 - 4*ax*cx))**0.5)/(2*ax))
                  r1 = Label(ventana,textvariable = restx1)
                  r1.place(bordermode = OUTSIDE, height = 30, width= 50, x = 230, y= 280)
                  restx1.set(x1)
                  r2 = Label(ventana,textvariable = restx2) 
                  r2.place(bordermode = OUTSIDE, height = 30, width= 50, x = 230, y= 310)
                  restx2.set(x2)
                  
##iniciando maquetado de  interfaz
aA = Entry(ventana, textvariable = a)
aA.place(bordermode = OUTSIDE, height = 30, width = 50, x = 10, y = 40)
bB = Entry (ventana, textvariable = b)
bB.place(bordermode = OUTSIDE, height = 30, width = 50, x = 130, y = 40)
cC = Entry(ventana, textvariable = c)
cC.place(bordermode = OUTSIDE, height = 30, width = 50, x = 230, y = 40)
## entrada de TExto

xa = Label(ventana, text = "X^2 + ")
xa.place(bordermode = OUTSIDE, height = 30, width = 50, x =70,y=40 )
xb = Label(ventana, text = "X + ")
xb.place(bordermode = OUTSIDE, height = 30, width = 50, x = 180, y = 40)
xc = Label(ventana, text = "= 0 ")
xc.place(bordermode = OUTSIDE, height = 30, width = 50, x=280, y = 40)

### boton de graficar

graficar = Button ( ventana, text = "Graficar", command = graficar)
graficar.place(bordermode= OUTSIDE, height= 40, width = 100, x = 40, y = 200)

## boton calcular
calcular = Button (ventana, text = "Calcular", command = calcular)
calcular.place(bordermode = OUTSIDE, height = 40, width = 100, x = 160, y = 200)
## terminado el  maquetetado de la  GUI

ventana.mainloop()
Nuestro codigo ha crecido en gran manera, en el post anterios solo eran aproximadamente 30 lineas  y en este momento tenemos un total de 100 lineas de codigo  ptyhon 3.3. La apliacion queda de la siguiente manera.



















Compara la cantidad de codigo Python  vs la cantida de  Codigo Matlab, ¿Cual crees que es mas conveniente?, ¿Cual se te hace mas facil?, ¿Cual te enseñan en la facultad de ingenieria? Tu tienes la unica respuesta si deseas aprender python.

martes, 2 de abril de 2013

Ecuacion de Gas Ideal: Pv = nrT en Matlab

Un pequeño programita desarrollado en Matlab para la resolucion decada caso de la ecuacion de gas ideal pv = nrt, la interfaz de usuario es muy simple, Solo hay que elegir un caso  de los que ya estan programados.

  
Despues de seleccionar el caso, este automaticamente reconoce las variables que estan involucradas. y oprimimos calcular. (Ejemplo Caso de volumen)

 
Enlace de descarga:   DESCARGAR

miércoles, 20 de marzo de 2013

Tabla Periodica de los Elementos Quimicos en Java

En estos días que disponemos de algo de tiempo libre y poder encerrarnos un momento e intentar aprender algo nuevo, ¿Por que no aprender Java? Asi que decidí empezar a aprender este lenguaje de programación  claro sin descuidar los otros post acerca de Matlab y Python, motivado por el afán de aprender algo nuevo y darle mayor variedad a este blog. Asi que cree una Tabla periodica de los elementos químicos desarrollada totalmente en java. Al inicio pensé que seria algo complicado pero,  solo bastaban conocimientos sobre estructuras de control y manejo de eventos que comparado con Matlab y Python la lógica de programación es la misma, solo que diferente sintaxis. 





Pueden descargar la aplicación  . Jar en el siguiente enlace: DESCARGAR
Para descargar el Codigo Fuente .java en el siguiente enlace:  DESCARGAR CÓDIGO FUENTE

martes, 29 de enero de 2013

Cálculo de flash isotérmico mediante la ecuación de estado de Soave

Multicomponentes en flash cálculos utilizando una ecuación de estado y reglas de mezcla clásica.


Sólo tiene que ejecutar main01.m, es fácil cambiar la composición y las condiciones de funcionamiento. Si desea agregar nuevos componentes sólo hay que añadir los críticos y definir propiedades del factor acéntrico. También es posible utilizar parámetros de interacción binarios differentes con ZE

D.E.S.C.A.R.G.A.R

Una clase de Antoine orientados a objetos cálculos de equilibrio vapor-líquido


Antoine para facilitar el cálculo de temperaturas de los componentes puros de saturación y presiones. Un objeto que corresponde a un componente puro se crea una instancia mediante la especificación de los parámetros de Antoine. Los métodos incluyen el cálculo de la presión de saturación, la temperatura de saturación, y el trazado.

Los datos de ejemplo se incluye para un pequeño número de compuestos. Un método de búsqueda se incluye para facilitar la búsqueda Webbook NIST Química para los parámetros de Antoine de otros compuestos.

Un extenso tutorial demuestra el uso de la ecuación de Antoine para los cálculos de equilibrio líquido-vapor. Los ejemplos incluyen el punto de burbuja y cálculos de punto de rocío, la construcción de Txy binario y diagramas XY, y la solución de los problemas de flash isotérmicas.

Este fue desarrollado para su uso en cursos de introducción en Ingeniería Química




lunes, 3 de diciembre de 2012

Ley de de Raoult en Matlab


Asumiendo la ley de Raoult es válido (solución ideal), esta interfaz gráfica de usuario permite al usuario elegir dos compuestos de una base de datos de más de 4500 productos químicos y trazar su diagrama Txy largo de un rango de temperatura especificado por el usuario.

Las unidades múltiples de presión y temperatura son compatibles.

Si T-split se define, en el trazado de la figura, el líquido-vapor se divide también será calculado a la temperatura definida.

Si la base de datos no está configurado correctamente, he incluido en el archivo. Accdb.






D.E.S.C.A.R.G.A.R











miércoles, 28 de noviembre de 2012

Transferencia de Calor en Matlab

Programa resuelve numéricamente la ecuación general de transferencia de  calor utilizando las entradas del usuario y las condiciones de contorno.




D.E.S.C.A.R.G.A.R

lunes, 29 de octubre de 2012

Gui de Matlab para identificación Bacteriana

su interfaz gráfica de usuario es para identifcación bacteriana desarrollada por MATLAB. La interfaz gráfica de usuario se basa en la comparación de algunos resultados opcionales bioquímicos con matriz de probabilidad y puede distinguir 288 unidades bacterianas taxonómicas operacionales (Otus). De red neuronal probabilística (PNN) estructura se utiliza para obtener el resultado más probable de la identificación de bacterias. Y cuando un rango apropiado de la distancia que se elija, la bacteria desconocida y sus aliados Otus en el fenotipo bioquímico dentro de ese rango, pueden ser ilustrado en el espacio tridimensional clásico por escalamiento multidimensional (MDS)






















DESCARGAR