domingo, 8 de marzo de 2015

Funciones Matemáticas en Python.

¿Que es Python?

Python es un gran lenguaje que puede servir para desarrollar fácilmente tanto aplicaciones pequeñas como aplicaciones de gran embergadura. Entre muchas características que hacen de Python un gran lenguaje de programación acá encontramos las tres principales:
  • Alto nivel - Ya que su sintaxis es sencilla, lo hace un gran lenguaje para aprender a programar por primera vez. A su vez facilita el desarrollo de aplicaciones, ya que acorta el número de líneas de código a desarrollar con respecto a otros lenguajes de programación.
  • Multipropósito - Puede ser usado para desarrollar tanto scripts sencillos como para desarrollar sitios web dinámicos.
  • Posee una gran librería pre-instalada de apoyo - Cabe la posibilidad que dentro de la librería ya estén desarrolladas muchas de las cosas comunes que quieras hacer, así nos evitamos programar un módulo desde cero.

Funciones.


Los programas.


Cosenoidal.


In [1]: import numpy as np
   ...: import matplotlib.pyplot as plt
   ...:
   ...: x=np.arange(0,10,0.1)
   ...: y=25*np.cos(2*x)-x**2+20*x #f(x)=25cos(2x)-x^2+10x
   ...: plt.plot(x,y)
   ...: plt.show()
   ...:

In [2]: import numpy as np
   ...: import matplotlib.pyplot as plt
   ...:
   ...: x=np.arange(0,10,0.1)
   ...: y=25*np.cos(2*x)-x**2+10*x #f(x)=25cos(2x)-x^2+10x
   ...: plt.plot(x,y)
   ...: plt.show()
   ...:

In [3]:

Gaussiana.

In [1]: import numpy as np
   ...: import matplotlib.pyplot as plt
   ...:
   ...: x=np.arange(0,10,0.1)
   ...: y=1*np.sin(1*x)-x**2+10*x #f(x)=1sin(1x)-x^2+10x
   ...: plt.plot(x,y)
   ...: plt.show()
   ...:

In [2]: import numpy as np
   ...: import matplotlib.pyplot as plt
   ...:
   ...: x=np.arange(0,10,0.1)
   ...: y=1*np.sin(1*x)-x**2+10*x #f(x)=1sin(1x)-x^2+10x
   ...: plt.plot(x,y,'r')
   ...: plt.show()
   ...:

In [3]:

Trapecio.

In [1]: from pylab import *
   ...: import matplotlib.pyplot as plt
   ...:
   ...:
   ...: def plot_trapecio(lista_de_x,h,a,b,c,d):
   ...:
   ...: pendiente_1 = h/(b-a)
   ...: pendiente_2 = -h/(d-c)
   ...:
   ...: y = []
   ...: for x in lista_de_x:
   ...:
   ...:
   ...: if x<=a:
   ...: y.append(0)
   ...: elif x>a and x<b:
   ...: y.append( (x-a)*pendiente_1 ) # (h*(x-a)) / (b-a)
   ...: elif x>=b and x<=c:
   ...: y.append(h)
   ...: elif x>c and x<d:
   ...: y.append((x-d)*pendiente_2) # (-h*(x-d)) / (d-c)
   ...: else:
   ...: y.append(0)
   ...:
   ...: figure()
   ...: plot(lista_de_x,y,'r')
   ...: xlabel('X')
   ...: if b!=c:
   ...: ylabel('Trapecio')
   ...: title('Función Miembro Trapezoidal')
   ...: else:
   ...: ylabel('Triángulo')
   ...: title('Función Miembro Triangular')
   ...: show()
   ...:
   ...: def plot_triangulo(lista_de_x,h,a,b,d):
   ...: plot_trapecio(lista_de_x,h,a,b,b,d) #El triangulo es un caso especial de trapecio donde B == C
   ...:
   ...:
   ...:
   ...: #EL PROGRAMA ARRANCA AQUI!
   ...: puntos_en_x = linspace (0,10,100)
   ...:
   ...:
   ...:
   ...: h = 1
   ...: a = 2
   ...: b = 4
   ...: c = 5.5
   ...: d = 8.3
   ...:
   ...: plot_trapecio(puntos_en_x,h,a,b,c,d)
   ...: plot_triangulo(puntos_en_x,h,a,b,d)
   ...:
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-1-625d61e7da31> in <module>()
50 d = 8.3
51
---> 52 plot_trapecio(puntos_en_x,h,a,b,c,d)
53 plot_triangulo(puntos_en_x,h,a,b,d)
54

<ipython-input-1-625d61e7da31> in plot_trapecio(lista_de_x, h, a, b, c, d)
28 if b!=c:
29 ylabel('Trapecio')
---> 30 title('Función Miembro Trapezoidal')
31 else:
32 ylabel('Triángulo')

C:\Anaconda\lib\site-packages\matplotlib\pyplot.pyc in title(s, *args, **kwargs)
1342
1343 """
-> 1344 l = gca().set_title(s, *args, **kwargs)
1345 draw_if_interactive()
1346 return l

C:\Anaconda\lib\site-packages\matplotlib\axes\_axes.pyc in set_title(self, label, fontdict, loc, **kwargs)
140 'verticalalignment': 'baseline',
141 'horizontalalignment': loc.lower()}
--> 142 title.set_text(label)
143 title.update(default)
144 if fontdict is not None:

C:\Anaconda\lib\site-packages\matplotlib\text.pyc in set_text(self, s)
967 ACCEPTS: string or anything printable with '%s' conversion.
968 """
--> 969 self._text = '%s' % (s,)
970
971 @staticmethod

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 5: ordinal not in range(128)

In [2]: from pylab import *
   ...: import matplotlib.pyplot as plt
   ...: import math
   ...:
   ...:
   ...:
   ...:
   ...: def plot_pico(lista_de_x,h,b,c):
   ...: y = []
   ...:
   ...: for x in lista_de_x:
   ...: y.append(math.e ** -abs( c * (x - b)))
   ...:
   ...: figure()
   ...: plot(lista_de_x,y,'r')
   ...: xlabel('x')
   ...: ylabel('pico')
   ...: title('Funcion pico')
   ...: show()
   ...:
   ...:
   ...:
   ...:
   ...: #EL PROGRAMA ARRANCA AQUI!
   ...: puntos_en_x = linspace (0,10,100)
   ...:
   ...: h = 1
   ...: b = 6
   ...: c = 2
   ...:
   ...: plot_pico(puntos_en_x,h,b,c)
   ...:

Sigmoide


In [1]: import numpy as np
   ...: import pylab
   ...: from scipy.optimize import curve_fit
   ...:
   ...: def sigmoid(x, x0, k, a, c):
   ...: y = a / (1 + np.exp(-k*(x-x0))) + c
   ...: return y
   ...:
   ...: xdata = np.array([0.0, 1.0, 3.0, 4.3, 7.0, 8.0, 8.5, 10.0,
   ...: 12.0, 14.0])
   ...: ydata = np.array([0.11, 0.12, 0.14, 0.21, 0.83, 1.45, 1.78, 1.9,
   ...: 1.98, 2.02])
   ...:
   ...: popt, pcov = curve_fit(sigmoid, xdata, ydata)
   ...: print "Fit:"
   ...: print "x0 =", popt[0]
   ...: print "k =", popt[1]
   ...: print "a =", popt[2]
   ...: print "c =", popt[3]
   ...: print "Asymptotes are", popt[3], "and", popt[3] + popt[2]
   ...:
   ...: x = np.linspace(-1, 15, 50)
   ...: y = sigmoid(x, *popt)
   ...:
   ...:
   ...: pylab.plot(xdata, ydata, 'o', label='data')
   ...: pylab.plot(x,y, label='fit')
   ...: pylab.ylim(0, 2.05)
   ...: pylab.legend(loc='upper left')
   ...: pylab.grid(True)
   ...: pylab.show()
   ...:

Gráficas.


Trapecio.

Pico.

Gausiana.

Coseniodal.
Sigmoide.







miércoles, 4 de marzo de 2015

Simulaciones

Empezamos entrando las variables de entrada y de salida en FIS de MatLab.



Una vez definidas nuestras variables de entrada y salida, procedemos a dar las reglas y condiciones de nuestro control fuzzy.


Ya definido las condiciones y reglas de nuestro controlador, y las variables de entradas y salidas podemos visualizar la simulación correspondiente.





INTEGRANTES DEL GRUPO



BRIAN ESTIVEN BULLA CARO


  • Encargado de la investigación, la fusificación y una parte de la exposición
  • Como líder, organizo las labores que debíancumplir los integrantes del equipo. 

LUIS ANDRES ALVAREZ SALGUERO


  • Encargado de hacer simulaciones y aproximaciones para encontrar el punto de equilibrio del sistema.


CARLOS FERNANDO CANGREJO PARRA


  • Encargado del diseño y organización del blog, definir las reglas del controlador y simulaciones .


ANDREA MARCELA 
ESCOBAR H (Lider)


  •    Encargada de investigación, diseño inicial del blog y colaboradora en el diseño de la fusificación.
CAROLINA RUIZ ARTEAGA.


  •     Definir las variables de entrada y porcentajes de salida, ayudar a definir las reglas del controlador.




    martes, 3 de marzo de 2015

    LEVITADOR MAGNÉTICO

    PLANTEAMIENTO DEL PROBLEMA


    Se desea controlar la levitacion de una esfera.
    La levitacion magnética es el proceso por el cual se hace flotar un objeto metálico utilizando un campo electromagnético.


    ¿Cómo lograr que la esfera flotante  se mantenga en un punto específico?







    Para desarrollar nuestro levitador magnético se debe tener en cuenta las variables que afectan el sistema, una vez identificadas podremos entender que variables podemos controlar para el correcto sistema de control a implementar.

    Variables Generales.


    En la siguiente tabla se muestran cada una de las variables generales a las que estará expuesto el sistema.



    Variables de Entrada y Salida.


    En la siguiente tabla se aprecia tanto las variables de entrada como las de salida a tener en cuenta dentro del sistema. 





    Proceso.

    A continuación se describirá el proceso paso a paso del funcionamiento ideal del levitador:

    1. Inicia su proceso teniendo un amplio rango de voltaje y corriente para poder elevar la esfera a  una altura determinada.
    2. Baja el voltaje y la corriente para buscar la altura ideal. 
    3. Suponiendo que el voltaje y la corriente son muy bajos,  la esfera va a descender del punto ideal.
    4. Si por el contrario, la corriente y el voltaje son muy elevados, la esfera corre el riesgo de pegarse a la bobina.
    5. Teniendo el voltaje y la corriente ideal, la esfera se mantendrá en la altura ideal.

    Fusificación. 

    Para llegar a la siguiente tabla de fusificacion, se tuvo que llevar a cabo diversas consultas acerca del comportamiento de estos sistemas, y así definir cuales son los porcentajes ideales para cada distancia.