Saturday, November 13, 2010

Dica Python: Função lambda & Matplotlib para aproximar derivada e visualizar gráfico

O código abaixo mostra como usar o matplotlib e funções lambda em Python para computar a derivada e visualizar o gráfico. No gráfico é possível ver a função \(f(t) = t^2\) e a equação aproximada para tangente num ponto P de f(t).
Em Python lambda é uma função que contém só expressões. Sua forma geral é:
f = lambda [lista de parâmetros] : [expressão].

A biblioteca Matplotlib para Python, serve para visualização de dados em forma de gráficos. (Este código também utilizará recursos do Numpy de forma direta.)

Para mais informações visite:
www.python.org
www.scipy.org
http://matplotlib.sourceforge.net/

Aproximando a derivada
Para calcular a aproximação para derivada, em geral, a partir da definição, utiliza-se a
forma:
$$ f'(x) \approx \lim_{h \to 0} \frac{f(x + h) - f(x)}{h} $$ .
O valor para f' é obtido aplicando-se limite, ou seja, \(f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h}\), que significa que "a medida que tomamos valores da h cada vez mais próximos de 0 o valor do limite se tornará mais próximo de L logo,
$$ \lim_{h \to 0 } f(x) = L$$ .

Para mais informações:
www.openstudy.com/
http://ocw.mit.edu/
www.wikipedia.org/

Nestes sites é possível encontrar video aulas, informações extras e etc.. O código desta dica está abaixo e com comentários.

#-*- encoding: utf-8 -*-
#Este codigo desenha o gráfico de f e uma aproximação
#para sua tangente em P.

import numpy
import numpy as np
import matplotlib.pyplot as plt


#Aproximação da derivada : d/dx(f) = f'(x) ~ (f(x+h) - f(x))/h
#Função que aproxima valor da derivada em P
def deriv(f, x, delta):
return ( (f(x+delta) - f(x))/delta )

#Vetor contendo valores para t. Usada para grfico
t = np.arange(-1.0, 2.5, 0.1)
#Cria "figura" para o gráfico.
plt.figure(1)

#Função y=f(x)
f = lambda x: x**2

#Aproximação para equação da reta tantegente a função
#f(t) em P(x1,y1).
r = lambda x, x1, y1, delta: deriv(f, x1, delta)*(x-x1) + y1

#texto para os eixos de coordenadas
plt.xlabel('t')
plt.ylabel('f(t)')

#titulo
plt.title('Aproximando valor da derivada')

#Definindo P=(x0,y0). Ponto de tangência.
x0, y0 = 1.5, f(1.5)

#f'(x) ~ ( f(x+h) - f(x) )/ h
#Parametro para aproximação
h= 0.00001


#Criando gráfico.
plt.plot(t,f(t), t, r(t,x0, y0, h), x0, y0, 'bo')

#Exibindo o gráfico
plt.show()

Gráfico:





(Para dicas, sugestões e correções e/ou apontamento de erros favor
deixar seu comentário.)

Saturday, June 12, 2010

ChatBot Taina Maria

Acabo de publicar em minha página do Google Code um pequeno código python para criação de chatbot. Ele aproveita recursos do Speech SDK 5.1 Windows para reconhecimento e sintese de voz.
Testei com windows XP usando em inglês. Para Windows XP só encontrei o pacote para reconhecimento de inglês, japonês e chinês simplificado.
Os requerimentos são: Pytho2.6x+, PySpeech, Comtypes, PythonWin32, Speech SDK Windows. Mais informações e o link estão disponiveis em http://www.arttecnologwr.110mb.com.
Dúvidas, comentários e sugestões favor contactar-me.
Minha página: https://sites.google.com/site/wanartsci e http://code.google.com/p/codesart.
Links requerimentos:

www.microsoft.com/speech

www.python.org

http://code.google.com/p/pyspeech/

http://sourceforge.net/projects/comtypes/files/

http://sourceforge.net/projects/pywin32/

http://pyaiml.sourceforge.net/

Links interessantes
http://surguy.net/articles/speechrecognition.xml
http://www.daniweb.com/forums/thread88358.html
http://probing.wikidot.com/speech-recognition-using-sphinx3-and-python
http://www.wxpython.org/