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

martes, 1 de abril de 2014

Introduccion a Sympy parte 1

Perdonen la falta de videotutoriales o  post, ya que  hemos estado algo ocupados, por fin se termino el trimestre y antes de irnos de vacaciones  de semana santa, publicaremos un poco sobre una herramienta de calculo que es mi favorita incluso mas que Matlab, se trata de Sympy. 
SymPy es una biblioteca escrita en Python cuyo objetivo es reunir todas las características de un sistema de álgebra computacional (CAS), ser fácilmente extensible y mantener el código todo lo simple que sea posible. SymPy no requiere ninguna biblioteca externa, salvo para soporte gráfico.

Algo que me sorprende de sympy  es el trato que reciben las constantes. como Pi, e. Son consideradas símbolos lo que permite un calculo de alta precisión.


isra@linuxmint ~ $ python
Python 2.7.4 (default, Sep 26 2013, 03:20:56) 
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from sympy import *  #importamos todo!!!
#.evalf() accede al valor de una  constante o simbolo
>>> pi.evalf()
3.14159265358979
>>> pi.evalf(20)
3.1415926535897932385
>>> pi.evalf(100)
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
#evaluando el numero e
>>> exp(1).evalf()
2.71828182845905
>>> exp(1).evalf(10)
2.718281828
>>> exp(1).evalf(50)
2.7182818284590452353602874713526624977572470937000
También existe una clase para representar al infinito matemático, llamada oo:
>>> #calcularemos un limite
... 
>>> x=Symbol('x')
>>> limit((x**3+2*x-1)/(x**3+4),x,oo)
1
>>> # por la izquierda.
... 
>>> limit((x**3+2*x-1)/(x**3+4),x,-oo)
1

sábado, 22 de marzo de 2014

Aproximación a las Rectas de Duhring 0.1



Como  todos los estudiantes de  ingeniería química  sufrimos por los diagramas,  Mudy, Duhring,  y otros mas que hasta duele la cabeza. 

Esta aplicacion esta provicionalmente desarrollada en lenguaje C, forma parte de un pequeño proyecto personal que iré actualizando con el tiempo sobre la materia de evaporadores, por lo que  les dejo la aplicacion en este enlace el programa es de prueba tal vez contenga algún error, así que espero de sus comentarios para  poder mejorarlo.
como verán en la muestra de ejecución,  la temperatura esta en Fahrenhit, la concentración en fracción masa. Aun que los resultados los expresa  en las  magnitudes mas comunes de  de medición de  temperaturas.


jueves, 13 de marzo de 2014

obtencion de Datos por Interpolacion Usando Matlab

En ingeniería y algunas ciencias es frecuente disponer de un cierto número de puntos obtenidos por muestreo o a partir de un experimento y pretender construir una función que los ajuste.
Por lo que recurrimos a la interpolación que consistes en  la obtención de nuevos puntos partiendo del conocimiento de un conjunto discreto de puntos.
Para eso disponemos de suficiente conocimiento matemático, adquirido durante el tiempo que estamos en la universidad, un que en la práctica se recure siempre a software para resolver este tipo de problemas y más cuando los datos son demasiado extensos.


Problema Tipo
Supongamos que tenemos una serie de Datos de una mezcla de Benceno y Tolueno representado x,y  respectivamente, obtener la concentración correspondiente en x=0.45.

 
>> x= 0:0.1:1.0;
>> y = [0.0 0.211 0.378 0.512 0.623 0.714 0.791 0.856 0.911 0.959 1.00];
>> interp1(x,y,0.45,'lineal')

ans =

    0.6685

>> interp1(x,y,0.45,'cubic')

ans =

    0.6706

>> interp1(x,y,0.45,'spline')%spline cubicos

ans =

    0.6706

>> interp1(x,y,0.45,'nearest')%usando no finito de vecinos proximos(nearest neighbort)

ans =

    0.7140
una pequeña comparacion de los tipos de interpolacion.

%Comparadon métodos de interpolacion
x= 0:0.1:.8;
y = [0 10 5 20 10 30 15 40 20];
x_val = 0:0.01:.8;
y_val1 = interp1(x,y,x_val,'linear');
y_val2 = interp1(x,y,x_val,'spline');
y_val3 = interp1(x,y,x_val,'cubic');
plot(x_val,y_val1,'--',x_val,y_val2,'.',x_val,y_val3,x,y,'o');
title('Comparacion de diferentes tipos de interpolacion');
grid

miércoles, 19 de febrero de 2014

Regresión Lineal-- Usando Lenguaje C


regresion  lineal programa
#include<stdio.h>
#include<stdlib.h>
int main(){
    int i,n;
    float x,y,sumx,sum_sqx,sumy,sumxy,a,b;
    printf("\n Numero de datos: ");
    scanf("%d",&n);
    sumx =0;
    sum_sqx =0;
    sumy=0;
    sumxy=0;
     for(i=0;i<n;i++){
   printf("X: ");
   scanf("%f",&x);
   printf("Y: ");
   scanf("%f",&y);
   sumx = sumx +x;
   sum_sqx = sum_sqx + (x*x);
   sumy= sumy + y;
   sumxy = sumxy + (x*y);
   }
    b = (sumxy-(sumx*sumy)/n)/(sum_sqx-(sumx*sumx)/n);
    a = (sumy/n)-(b*sumx/n);
    printf("\nEcuacion lineal: Y= %f + %fX\n",a,b);
    system("pause");
    return 0;
 }

Numero de datos: 5
X: 1
Y: 4.3
X: 3
Y: 4.64
X: 5
Y: 4.98
X: 7
Y: 5.32
X: 9
Y: 5.7

Ecuacion lineal: Y= 4.117999 + 0.174000X
sh: 1: pause: not found

sábado, 8 de febrero de 2014

For y While en lenguaje C

Seguimos con el pequeño curso introductorio a lenguaje C aplicado a  ing Química.

un Pequeño programa en el que se aplican estas dos estructuras, y en ambos casos se obtiene el mismo resultado de una reacción química  de orden cero de la forma A ---> B, con CAo = 15 gmol/L y una K = 0.0567.


#include <stdio.h>
#include<stdlib.h>
int main()
{
   double conc, inicon,k;
    int tiempo;
    inicon = 15.00;
    k = 0.0567;
    tiempo = 0;
     printf("\n tiempo(s) Conc(gmol/L) \n ");
while(tiempo  <= 60){
 conc = inicon - k*tiempo;
  printf("%d \t \t %1f\n",tiempo,conc);
    tiempo = tiempo +10;

  } 
system ("pause");
    return 0;
} 
// segunda estructura usando For
#include <stdio.h>
#include<stdlib.h>
int main()
{
   double conc, inicon,k;
    int tiempo;
    inicon = 15.00;
    k = 0.0567;
    
     printf("\n tiempo(s) Conc(gmol/L) \n ");
  for (tiempo=0;tiempo<=60; tiempo = tiempo +10) {
   conc = inicon - k*tiempo;
   printf(" %d\t\t %1f\n",tiempo,conc);
   }
system ("pause");
    return 0;
}

Ejecuntando el programa.
tiempo(s) Conc(gmol/L) 
 0     15.000000
10     14.433000
20     13.866000
30     13.299000
40     12.732000
50     12.165000
60     11.598000
sh: 1: pause: not found


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