introduccion a python para el c´ omputo´...
TRANSCRIPT
Python para el computo cientıfico – David P. Sanders p. 1
Introducci on a Python para el C omputoCientıfico
David P. Sanders
Departamento de FısicaFacultad de Ciencias, UNAM
http://sistemas.fciencias.unam.mx/ ˜ [email protected]
Seminario de Fısica y C omputo11/03/2010
Contenido
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 2
❏ Computo cientıfico y Python
❏ Herramientas de visualizacion en 2D
❏ Herramientas de computo cientıfico
❏ Herramientas de visualizacion en 3D
❏ Entornos integrados
❏ Conclusiones
Computo cientıfico moderno
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 3
❏ ¿Que necesitamos para computo cientıfico moderno?
Computo cientıfico moderno
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 3
❏ ¿Que necesitamos para computo cientıfico moderno?
❏ Lenguaje de alto nivel
❏ Pensemos en algoritmo, no detalles de implementacion
Computo cientıfico moderno
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 3
❏ ¿Que necesitamos para computo cientıfico moderno?
❏ Lenguaje de alto nivel
❏ Pensemos en algoritmo, no detalles de implementacion
❏ Codigo facil de entender, isomorfo al problema matematico
Computo cientıfico moderno
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 3
❏ ¿Que necesitamos para computo cientıfico moderno?
❏ Lenguaje de alto nivel
❏ Pensemos en algoritmo, no detalles de implementacion
❏ Codigo facil de entender, isomorfo al problema matematico
❏ Soluciones: Python, C++, Fortran90
Computo cientıfico moderno
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 3
❏ ¿Que necesitamos para computo cientıfico moderno?
❏ Lenguaje de alto nivel
❏ Pensemos en algoritmo, no detalles de implementacion
❏ Codigo facil de entender, isomorfo al problema matematico
❏ Soluciones: Python, C++, Fortran90
❏ Esta platica: presentar Python y su “ecosistema”
El lenguaje Python
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 4
Python
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 5
❏ Lenguaje de programacion interpretado:
Python
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 5
❏ Lenguaje de programacion interpretado:
muy bueno
Python
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 5
❏ Lenguaje de programacion interpretado:
muy bueno muy bonito
Python
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 5
❏ Lenguaje de programacion interpretado:
muy bueno muy bonito. . . muy, pero muy barato
Python
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 5
❏ Lenguaje de programacion interpretado:
muy bueno muy bonito. . . muy, pero muy barato
Software librehttp://www.python.org
Python
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 5
❏ Lenguaje de programacion interpretado:
muy bueno muy bonito. . . muy, pero muy barato
Software librehttp://www.python.org
❏ Sencillo de aprender
❏ Facil de utilizar
❏ Poderoso
Entorno interactivo
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 6
❏ Entorno interactivo: ipython
❏ sudo apt-get install ipython
Entorno interactivo
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 6
❏ Entorno interactivo: ipython
❏ sudo apt-get install ipython
2 + 22 ** 2 ** 2 ** 2
Entorno interactivo
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 6
❏ Entorno interactivo: ipython
❏ sudo apt-get install ipython
2 + 22 ** 2 ** 2 ** 2
2 ** 2 ** 2 ** 2 ** 2
Entorno interactivo
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 6
❏ Entorno interactivo: ipython
❏ sudo apt-get install ipython
2 + 22 ** 2 ** 2 ** 2
2 ** 2 ** 2 ** 2 ** 2
❏ Variables:
x = -3.2 + 1j # numeros complejosy = x ** 2 - 7.5print y
Listas y bucles
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 7
❏ Listas:
l = [3, 4, 5]l. <TAB>l.append?
Listas y bucles
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 7
❏ Listas:
l = [3, 4, 5]l. <TAB>l.append?
❏ Introspeccion: examinar objetos
Listas y bucles
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 7
❏ Listas:
l = [3, 4, 5]l. <TAB>l.append?
❏ Introspeccion: examinar objetos
❏ Bucles:
for i in l:print 2* i
Listas y bucles
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 7
❏ Listas:
l = [3, 4, 5]l. <TAB>l.append?
❏ Introspeccion: examinar objetos
❏ Bucles:
for i in l:print 2* i
❏ Estructura: espacio en blanco
Listas y bucles
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 7
❏ Listas:
l = [3, 4, 5]l. <TAB>l.append?
❏ Introspeccion: examinar objetos
❏ Bucles:
for i in l:print 2* i
❏ Estructura: espacio en blanco
a, b = 1, 1while a < 100:print a,a, b = b, a+b
Condicionales y funciones
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 8
❏ Condicionales:
a = 1000; b = -3if a > 0 and b > 0:print "Positivos"
else:print "Al menos uno negativo"
Condicionales y funciones
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 8
❏ Condicionales:
a = 1000; b = -3if a > 0 and b > 0:print "Positivos"
else:print "Al menos uno negativo"
❏ Funciones:
Condicionales y funciones
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 8
❏ Condicionales:
a = 1000; b = -3if a > 0 and b > 0:print "Positivos"
else:print "Al menos uno negativo"
❏ Funciones:
def duplicar(x):return 2* x
duplicar(3)duplicar( "David" )
❏ Tipos son automaticos
❏ Todo tiene un valor
Programas y librerıas
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 9
❏ Poner comandos en archivo: script
❏ Incluir bibliotecas con import
Programas y librerıas
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 9
❏ Poner comandos en archivo: script
❏ Incluir bibliotecas con import
❏ Calculo de e:
import mathee = 1.0factorial = 1resultados = []
Programas y librerıas
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 9
❏ Poner comandos en archivo: script
❏ Incluir bibliotecas con import
❏ Calculo de e:
import mathee = 1.0factorial = 1resultados = []
for i in range(1, 10):factorial * = i # factorial = factorial * iee += 1. / factorialresultados.append(math.exp(1) - ee)
Programas y librerıas
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles• Condicionales yfunciones• Programas ylibrerıas
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 9
❏ Poner comandos en archivo: script
❏ Incluir bibliotecas con import
❏ Calculo de e:
import mathee = 1.0factorial = 1resultados = []
for i in range(1, 10):factorial * = i # factorial = factorial * iee += 1. / factorialresultados.append(math.exp(1) - ee)
❏ Lista es estructura de datos flexible e importante
❏ Correr desde ipython con run exp
Visualizaci on en 2D
• Moderno
El lenguaje Python
Visualizaci on en 2D
• Graficas en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 10
Graficas en 2D
• Moderno
El lenguaje Python
Visualizaci on en 2D
• Graficas en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 11
❏ Paquete: matplotlib / pylab
❏ Parecido a MATLAB
❏ ipython -pylab
Graficas en 2D
• Moderno
El lenguaje Python
Visualizaci on en 2D
• Graficas en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 11
❏ Paquete: matplotlib / pylab
❏ Parecido a MATLAB
❏ ipython -pylab
plot(res, 'o' ) # puntosplot(res, 'o-' ) # puntos y lineas
xlabel( 'Numero terminos $n$' )ylabel( 'Aproximacion $\sum_ { i=0 } ˆn x_i$' )
clf() # limpiar pantallasemilogy(res, 'o' )
❏ Posibilidad de utilizar etiquetas estilo LATEX
Graficas en 2D
• Moderno
El lenguaje Python
Visualizaci on en 2D
• Graficas en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 11
❏ Paquete: matplotlib / pylab
❏ Parecido a MATLAB
❏ ipython -pylab
plot(res, 'o' ) # puntosplot(res, 'o-' ) # puntos y lineas
xlabel( 'Numero terminos $n$' )ylabel( 'Aproximacion $\sum_ { i=0 } ˆn x_i$' )
clf() # limpiar pantallasemilogy(res, 'o' )
❏ Posibilidad de utilizar etiquetas estilo LATEX
❏ Trivial de guardar en calidad para publicacion (PDF):
savefig( 'exp.pdf' )
Computo cientıfico
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 12
Arreglos, vectores, matrices
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 13
❏ Paquete numpy provee arreglos, vectores y matrices
❏ sudo apt-get install python-numpy
Arreglos, vectores, matrices
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 13
❏ Paquete numpy provee arreglos, vectores y matrices
❏ sudo apt-get install python-numpy
❏ Objeto basico: array :
from numpy import *x = array([3., 4.])v = array([0.1, 2.])dt = 0.1
x = x + v * dtx += v * dt
Arreglos, vectores, matrices
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 13
❏ Paquete numpy provee arreglos, vectores y matrices
❏ sudo apt-get install python-numpy
❏ Objeto basico: array :
from numpy import *x = array([3., 4.])v = array([0.1, 2.])dt = 0.1
x = x + v * dtx += v * dt
❏ Concepto basico en programacion cientıfica moderna:
Tratar a vectores como unidad indivisible
Caminatas aleatorias en 1D
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 14
❏ Cada caminante brinca a la izquierda o derecha al azar
Caminatas aleatorias en 1D
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 14
❏ Cada caminante brinca a la izquierda o derecha al azar
from pylab import *N = 1e6pos = zeros(N)for t in range(10):
pos += uniform(-1, 1, N)h = hist(pos, 100)
Caminatas aleatorias en 1D
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 14
❏ Cada caminante brinca a la izquierda o derecha al azar
from pylab import *N = 1e6pos = zeros(N)for t in range(10):
pos += uniform(-1, 1, N)h = hist(pos, 100)
❏ Discreto:
from pylab import *N = 1e5pos = zeros(N)for veces in range(10):for t in range(1):
pos += 2 * (uniform(-1, 1, N) > 0) - 1h = hist(pos, 100, histtype= 'step' , normed= True)
Caminatas aleatorias en 1D
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 14
❏ Cada caminante brinca a la izquierda o derecha al azar
from pylab import *N = 1e6pos = zeros(N)for t in range(10):
pos += uniform(-1, 1, N)h = hist(pos, 100)
❏ Discreto:
from pylab import *N = 1e5pos = zeros(N)for veces in range(10):for t in range(1):
pos += 2 * (uniform(-1, 1, N) > 0) - 1h = hist(pos, 100, histtype= 'step' , normed= True)
❏ Utilizar timeit para ver cual es mas rapido
Caminatas aleatorias en 2D
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 15
❏ Animar con pylab :
from pylab import *ion()N = 1e5pos = zeros((N,2))
figure(figsize=(10,10))p, = plot(pos[:,0], pos[:,1], ',' )axis([-30,30,-30,30])
for t in range(1000):pos += 2 * uniform(-1,1,N * 2).reshape(N,2)p.recache()draw()
Valores propios
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 16
❏ Matriz aleatoria, hacer simetrica:
M = rand(1000, 1000)M = M + M.T
Valores propios
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 16
❏ Matriz aleatoria, hacer simetrica:
M = rand(1000, 1000)M = M + M.T
❏ Encontrar valores propios y ordenar:
time lamb = eigvalsh(M)lamb.sort()lamb = lamb[:-1] # remover ultimo
❏ Encontrar diferencias de valores propios consecutivos:
diff = lamb[1:] - lamb[:-1]hist(diff, 100, normed= True )
Valores propios
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 16
❏ Matriz aleatoria, hacer simetrica:
M = rand(1000, 1000)M = M + M.T
❏ Encontrar valores propios y ordenar:
time lamb = eigvalsh(M)lamb.sort()lamb = lamb[:-1] # remover ultimo
❏ Encontrar diferencias de valores propios consecutivos:
diff = lamb[1:] - lamb[:-1]hist(diff, 100, normed= True )
❏ Repetir para mejor estadıstica:
diff.extend( list (lamb[1:] - lamb[:-1]) )
Metodo de Euler
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 17
❏ Resolver x = f (x,t) con metodo de Euler
from pylab import *
def paso_euler(x, t, f):return f(x,t)
Metodo de Euler
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 17
❏ Resolver x = f (x,t) con metodo de Euler
from pylab import *
def paso_euler(x, t, f):return f(x,t)
def integrar(x0, t_final, h, f):lista_t = []; lista_x = []x = x0; t = 0.
while t < t_final:lista_t.append(t); lista_x.append(x)
derivada = paso_euler(x, t, h, f)x += h * derivada; t += h
return lista_t, lista_x
Euler II
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 18
❏ Definir funcion que integrar:
def logistica(x, t):return x* (5. - x)
Euler II
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 18
❏ Definir funcion que integrar:
def logistica(x, t):return x* (5. - x)
❏ Integrar y dibujar:
dt = 0.2; t_final = 5; x0 = 0.1t, x = integrar(x0, t_final, dt, logistica, euler)plot(t, x, 'bo-' , label= 'euler' )show()
Extendiendo a m as metodos
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 19
❏ Runge–Kutta II:
def rk2(x, t, h, f):k1 = f(x,t)k2 = f(x + 0.5 * h* k1, t+0.5 * h)return k2
Extendiendo a m as metodos
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 19
❏ Runge–Kutta II:
def rk2(x, t, h, f):k1 = f(x,t)k2 = f(x + 0.5 * h* k1, t+0.5 * h)return k2
❏ Tratar funciones como objetos:
metodos = [euler, rk2, rk4]
for metodo in metodos:t, x = integrar(x0, t_final, dt, logistica, \
metodo)plot(t, x, 'o-' , label=metodo.__name__)
legend(); show()
Ecuaciones diferenciales vectoriales
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 20
❏ Funcion 2D:
def harmonico(x_vec, t):xx, yy = x_vec # separar componentesreturn array([yy, -xx]) # regresar vector
Ecuaciones diferenciales vectoriales
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 20
❏ Funcion 2D:
def harmonico(x_vec, t):xx, yy = x_vec # separar componentesreturn array([yy, -xx]) # regresar vector
❏ Cambiar lista_x.append(x) alista_x.append(array(x)) – crea copia
Ecuaciones diferenciales vectoriales
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 20
❏ Funcion 2D:
def harmonico(x_vec, t):xx, yy = x_vec # separar componentesreturn array([yy, -xx]) # regresar vector
❏ Cambiar lista_x.append(x) alista_x.append(array(x)) – crea copia
❏ Punto:
¡Mismısimo codigo funciona para escalares o vectores!
Librerıas para c omputo cientıfico
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 21
❏ Librerıa scipy : apt-get install python-scipy
❏ Funciones especiales:
from scipy import specialt = arange(0., 30., 0.1)plot( t, special.j0(t), t, zeros( len(t)) )
Librerıas para c omputo cientıfico
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 21
❏ Librerıa scipy : apt-get install python-scipy
❏ Funciones especiales:
from scipy import specialt = arange(0., 30., 0.1)plot( t, special.j0(t), t, zeros( len(t)) )
❏ Diferencias finitas:
N = 20; A = zeros( (N, N) )for i in range(1,N-1):
A[i, i-1:i+2] = 1, -2, 1
Librerıas para c omputo cientıfico
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 21
❏ Librerıa scipy : apt-get install python-scipy
❏ Funciones especiales:
from scipy import specialt = arange(0., 30., 0.1)plot( t, special.j0(t), t, zeros( len(t)) )
❏ Diferencias finitas:
N = 20; A = zeros( (N, N) )for i in range(1,N-1):
A[i, i-1:i+2] = 1, -2, 1
lamb, v = eig(A)v = v.Tindice = argsort(lamb)lamb = lamb[indice]; v = v[indice]plot(v[-3], 'o' )
Librerıas para c omputo cientıfico
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 21
❏ Librerıa scipy : apt-get install python-scipy
❏ Funciones especiales:
from scipy import specialt = arange(0., 30., 0.1)plot( t, special.j0(t), t, zeros( len(t)) )
❏ Diferencias finitas:
N = 20; A = zeros( (N, N) )for i in range(1,N-1):
A[i, i-1:i+2] = 1, -2, 1
lamb, v = eig(A)v = v.Tindice = argsort(lamb)lamb = lamb[indice]; v = v[indice]plot(v[-3], 'o' )
❏ Contiene estadıstica, raıces, optimizacion, transformadasde Fourier,. . .
Python como pegamento
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 22
❏ Uso muy comun (e.g. Google): “pegamento”
❏ Mejor shell para correr simulaciones:
import (s)nombre = "wang_landau"L = 10; traslape = 3pos = 0ventanas = []
Python como pegamento
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Mas metodos
• Vectorial
• Scipy
• Pegamento
Visualizaci on en 3D
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 22
❏ Uso muy comun (e.g. Google): “pegamento”
❏ Mejor shell para correr simulaciones:
import (s)nombre = "wang_landau"L = 10; traslape = 3pos = 0ventanas = []
for i in range(10):ventanas.append( (pos, pos+L) )pos += L - traslape
for i in ventanas:comando = "%s %d %d" % (nombre, i[0], i[1])print comandoos.system(comando)
Visualizaci on en 3D
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 23
Visual Python
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 24
❏ Visual Python: Herramienta para animaciones en 2D y 3D
❏ Sumamente facil de utilizar desde el primer momento
Visual Python
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 24
❏ Visual Python: Herramienta para animaciones en 2D y 3D
❏ Sumamente facil de utilizar desde el primer momento
❏ sudo apt-get install python-visual
Visual Python
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 24
❏ Visual Python: Herramienta para animaciones en 2D y 3D
❏ Sumamente facil de utilizar desde el primer momento
❏ sudo apt-get install python-visual
from visual import *s = sphere()
Visual Python
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 24
❏ Visual Python: Herramienta para animaciones en 2D y 3D
❏ Sumamente facil de utilizar desde el primer momento
❏ sudo apt-get install python-visual
from visual import *s = sphere()
s.color = color.red()s.pos = 1, 0, 0
Visual Python
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 24
❏ Visual Python: Herramienta para animaciones en 2D y 3D
❏ Sumamente facil de utilizar desde el primer momento
❏ sudo apt-get install python-visual
from visual import *s = sphere()
s.color = color.red()s.pos = 1, 0, 0
❏ Animacion: mover un poco cada vez
Visual Python
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 24
❏ Visual Python: Herramienta para animaciones en 2D y 3D
❏ Sumamente facil de utilizar desde el primer momento
❏ sudo apt-get install python-visual
from visual import *s = sphere()
s.color = color.red()s.pos = 1, 0, 0
❏ Animacion: mover un poco cada vez
b = box(); b.height = 0.1s = sphere(radius = 0.2)s2 = sphere(radius=0.2)s2.color = color.bluefor i in xrange(1000):
rate(100) # limitar velocidad de animacions.pos = i/1000., 0, 0
Visualizaci on de datos en 3D
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 25
❏ MayaVi2: visualizacion de datos en 3D, equivalente depylab
❏ sudo apt-get install mayavi2
❏ Interactivo con ipython -wthread
Visualizaci on de datos en 3D
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 25
❏ MayaVi2: visualizacion de datos en 3D, equivalente depylab
❏ sudo apt-get install mayavi2
❏ Interactivo con ipython -wthread
from enthought.mayavi import mlabx = rand(10); y = rand(10); z = rand(10)mlab.points3d(x, y, z)c = rand(10)mlab.points3d(x, y, z, c)
Visualizaci on de datos en 3D
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 25
❏ MayaVi2: visualizacion de datos en 3D, equivalente depylab
❏ sudo apt-get install mayavi2
❏ Interactivo con ipython -wthread
from enthought.mayavi import mlabx = rand(10); y = rand(10); z = rand(10)mlab.points3d(x, y, z)c = rand(10)mlab.points3d(x, y, z, c)
MayaVi avanzado
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 26
❏ Partıcula en potencial 3D:
import numpy as npdef V(x, y, z):return np.cos(10 * x) + np.cos(10 * y) + \np.cos(10 * z) + 2 * (x ** 2 + y ** 2 + z ** 2)
MayaVi avanzado
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 26
❏ Partıcula en potencial 3D:
import numpy as npdef V(x, y, z):return np.cos(10 * x) + np.cos(10 * y) + \np.cos(10 * z) + 2 * (x ** 2 + y ** 2 + z ** 2)
from enthought.mayavi import mlabmlab.contour3d(X, Y, Z, V)
MayaVi avanzado
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el computo cientıfico – David P. Sanders p. 26
❏ Partıcula en potencial 3D:
import numpy as npdef V(x, y, z):return np.cos(10 * x) + np.cos(10 * y) + \np.cos(10 * z) + 2 * (x ** 2 + y ** 2 + z ** 2)
from enthought.mayavi import mlabmlab.contour3d(X, Y, Z, V)
❏ Clic en ıcono para interactuar
Entornos integrados
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 27
Sage
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 28
❏ Interfaz “pitonico” para software libre de matematicas
❏ http://www.sagemath.org (no por paquete)
Sage
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 28
❏ Interfaz “pitonico” para software libre de matematicas
❏ http://www.sagemath.org (no por paquete)
❏ Incluye numpy, scipy
❏ Incluye calculos simbolicos
Sage
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 28
❏ Interfaz “pitonico” para software libre de matematicas
❏ http://www.sagemath.org (no por paquete)
❏ Incluye numpy, scipy
❏ Incluye calculos simbolicos
❏ Interfaz por web –no necesario instalar– e.g. para cursos
Sage
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 28
❏ Interfaz “pitonico” para software libre de matematicas
❏ http://www.sagemath.org (no por paquete)
❏ Incluye numpy, scipy
❏ Incluye calculos simbolicos
❏ Interfaz por web –no necesario instalar– e.g. para cursos
x, y = var( 'x y' )s = (x+y) ** 2s.expand()
Sage
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 28
❏ Interfaz “pitonico” para software libre de matematicas
❏ http://www.sagemath.org (no por paquete)
❏ Incluye numpy, scipy
❏ Incluye calculos simbolicos
❏ Interfaz por web –no necesario instalar– e.g. para cursos
x, y = var( 'x y' )s = (x+y) ** 2s.expand()
plot(x ** 2, (-2, 2) )def f(x,y): return xˆ2 + yˆ2 - xˆ3plot3d(f, (-2, 2), (-2, 2))
Sage
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 28
❏ Interfaz “pitonico” para software libre de matematicas
❏ http://www.sagemath.org (no por paquete)
❏ Incluye numpy, scipy
❏ Incluye calculos simbolicos
❏ Interfaz por web –no necesario instalar– e.g. para cursos
x, y = var( 'x y' )s = (x+y) ** 2s.expand()
plot(x ** 2, (-2, 2) )def f(x,y): return xˆ2 + yˆ2 - xˆ3plot3d(f, (-2, 2), (-2, 2))
❏ Cambiar de manera interactiva
Sage
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 28
❏ Interfaz “pitonico” para software libre de matematicas
❏ http://www.sagemath.org (no por paquete)
❏ Incluye numpy, scipy
❏ Incluye calculos simbolicos
❏ Interfaz por web –no necesario instalar– e.g. para cursos
x, y = var( 'x y' )s = (x+y) ** 2s.expand()
plot(x ** 2, (-2, 2) )def f(x,y): return xˆ2 + yˆ2 - xˆ3plot3d(f, (-2, 2), (-2, 2))
❏ Cambiar de manera interactiva
❏ Otros: spyder, pythonxy, Enthought Python Distribution
Ensenanza
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 29
❏ Python es perfecto como primer (y casi ultimo) lenguaje
Ensenanza
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 29
❏ Python es perfecto como primer (y casi ultimo) lenguaje
❏ Ensenar desde primer semestre
Ensenanza
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 29
❏ Python es perfecto como primer (y casi ultimo) lenguaje
❏ Ensenar desde primer semestre
❏ Herramientas de visualizacion, calculos
Ensenanza
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 29
❏ Python es perfecto como primer (y casi ultimo) lenguaje
❏ Ensenar desde primer semestre
❏ Herramientas de visualizacion, calculos
❏ Facil de experimentar
Conclusiones
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 30
❏ Conjunto de herramientas poderosas
Conclusiones
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 30
❏ Conjunto de herramientas poderosas
❏ Ideal para ensenanza de fısica
Conclusiones
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 30
❏ Conjunto de herramientas poderosas
❏ Ideal para ensenanza de fısica
❏ Ideal como entorno para investigacion
❏ Para todo excepto simulaciones “hard-core”
Conclusiones
• Moderno
El lenguaje Python
Visualizaci on en 2D
Computo cientıfico
Visualizaci on en 3D
Entornos integrados
• Sage
• Ensenanza
• Conclusiones
Python para el computo cientıfico – David P. Sanders p. 30
❏ Conjunto de herramientas poderosas
❏ Ideal para ensenanza de fısica
❏ Ideal como entorno para investigacion
❏ Para todo excepto simulaciones “hard-core”
❏ Contacto:http://sistemas.fciencias.unam.mx/ ˜ [email protected]