Download Introducci ´on a Python para el C ´omputo Cientıfico

Document related concepts
no text concepts found
Transcript
Introducción a Python para el Cómputo
Cientı́fico
David P. Sanders
Departamento de Fı́sica
Facultad de Ciencias, UNAM
http://sistemas.fciencias.unam.mx/˜dsanders
[email protected]
Seminario de Fı́sica y Cómputo
11/03/2010
Python para el cómputo cientı́fico – David P. Sanders
p. 1
Contenido
❏ Cómputo cientı́fico y Python
❏ Herramientas de visualización en 2D
• Moderno
El lenguaje Python
❏ Herramientas de cómputo cientı́fico
❏ Herramientas de visualización en 3D
❏ Entornos integrados
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
❏ Conclusiones
Python para el cómputo cientı́fico – David P. Sanders
p. 2
Cómputo cientı́fico moderno
❏ ¿Qué necesitamos para cómputo cientı́fico moderno?
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 3
Cómputo cientı́fico moderno
❏ ¿Qué necesitamos para cómputo cientı́fico moderno?
• Moderno
❏ Lenguaje de alto nivel
❏ Pensemos en algoritmo, no detalles de implementación
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 3
Cómputo cientı́fico moderno
❏ ¿Qué necesitamos para cómputo cientı́fico moderno?
• Moderno
❏ Lenguaje de alto nivel
❏ Pensemos en algoritmo, no detalles de implementación
❏ Código fácil de entender, isomorfo al problema matemático
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 3
Cómputo cientı́fico moderno
❏ ¿Qué necesitamos para cómputo cientı́fico moderno?
• Moderno
❏ Lenguaje de alto nivel
❏ Pensemos en algoritmo, no detalles de implementación
❏ Código fácil de entender, isomorfo al problema matemático
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
❏ Soluciones: Python, C++, Fortran90
Python para el cómputo cientı́fico – David P. Sanders
p. 3
Cómputo cientı́fico moderno
❏ ¿Qué necesitamos para cómputo cientı́fico moderno?
• Moderno
❏ Lenguaje de alto nivel
❏ Pensemos en algoritmo, no detalles de implementación
❏ Código fácil de entender, isomorfo al problema matemático
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
❏ Soluciones: Python, C++, Fortran90
❏ Esta plática: presentar Python y su “ecosistema”
Python para el cómputo cientı́fico – David P. Sanders
p. 3
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
El lenguaje Python
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 4
Python
❏ Lenguaje de programación interpretado:
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 5
Python
❏ Lenguaje de programación interpretado:
• Moderno
muy bueno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 5
Python
❏ Lenguaje de programación interpretado:
• Moderno
muy bueno
muy bonito
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 5
Python
❏ Lenguaje de programación interpretado:
• Moderno
muy bonito
muy bueno
. . . muy, pero muy barato
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 5
Python
❏ Lenguaje de programación interpretado:
• Moderno
muy bonito
muy bueno
. . . muy, pero muy barato
Software libre
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
http://www.python.org
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 5
Python
❏ Lenguaje de programación interpretado:
• Moderno
muy bonito
muy bueno
. . . muy, pero muy barato
Software libre
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
http://www.python.org
Visualización en 3D
Entornos integrados
❏ Sencillo de aprender
❏ Fácil de utilizar
❏ Poderoso
Python para el cómputo cientı́fico – David P. Sanders
p. 5
Entorno interactivo
❏ Entorno interactivo:
ipython
❏ sudo apt-get install ipython
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 6
Entorno interactivo
❏ Entorno interactivo:
ipython
❏ sudo apt-get install ipython
• Moderno
El lenguaje Python
2 + 2
2 ** 2 ** 2 ** 2
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 6
Entorno interactivo
❏ Entorno interactivo:
ipython
❏ sudo apt-get install ipython
• Moderno
El lenguaje Python
2 + 2
2 ** 2 ** 2 ** 2
• Python
• Interactivo
• Listas y bucles
• Condicionales y
2 ** 2 ** 2 ** 2 ** 2
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 6
Entorno interactivo
❏ Entorno interactivo:
ipython
❏ sudo apt-get install ipython
• Moderno
El lenguaje Python
2 + 2
2 ** 2 ** 2 ** 2
• Python
• Interactivo
• Listas y bucles
• Condicionales y
2 ** 2 ** 2 ** 2 ** 2
funciones
• Programas y
librerı́as
Visualización en 2D
❏ Variables:
x = -3.2 + 1j # numeros complejos
y = x**2 - 7.5
print y
Python para el cómputo cientı́fico – David P. Sanders
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
p. 6
Listas y bucles
❏ Listas:
l = [3, 4, 5]
l. <TAB>
l.append?
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 7
Listas y bucles
❏ Listas:
l = [3, 4, 5]
l. <TAB>
l.append?
❏ Introspección: examinar objetos
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 7
Listas y bucles
❏ Listas:
l = [3, 4, 5]
l. <TAB>
l.append?
❏ Introspección: examinar objetos
❏ Bucles:
for i in l:
print 2*i
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 7
Listas y bucles
❏ Listas:
l = [3, 4, 5]
l. <TAB>
l.append?
❏ Introspección: examinar objetos
❏ Bucles:
for i in l:
print 2*i
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
❏ Estructura: espacio en blanco
Python para el cómputo cientı́fico – David P. Sanders
p. 7
Listas y bucles
❏ Listas:
l = [3, 4, 5]
l. <TAB>
l.append?
❏ Introspección: examinar objetos
❏ Bucles:
for i in l:
print 2*i
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
❏ Estructura: espacio en blanco
a, b = 1, 1
while a < 100:
print a,
a, b = b, a+b
Python para el cómputo cientı́fico – David P. Sanders
p. 7
Condicionales y funciones
❏ Condicionales:
a = 1000; b = -3
if a > 0 and b > 0:
print "Positivos"
else:
print "Al menos uno negativo"
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 8
Condicionales y funciones
❏ Condicionales:
a = 1000; b = -3
if a > 0 and b > 0:
print "Positivos"
else:
print "Al menos uno negativo"
❏ Funciones:
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 8
Condicionales y funciones
❏ Condicionales:
a = 1000; b = -3
if a > 0 and b > 0:
print "Positivos"
else:
print "Al menos uno negativo"
❏ Funciones:
def duplicar(x):
return 2*x
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
duplicar(3)
duplicar("David")
❏ Tipos son automáticos
❏ Todo tiene un valor
Python para el cómputo cientı́fico – David P. Sanders
p. 8
Programas y librerı́as
❏ Poner comandos en archivo: script
❏ Incluir bibliotecas con import
• Moderno
El lenguaje Python
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 9
Programas y librerı́as
❏ Poner comandos en archivo: script
❏ Incluir bibliotecas con import
• Moderno
El lenguaje Python
❏ Cálculo de e:
import math
ee = 1.0
factorial = 1
resultados = []
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 9
Programas y librerı́as
❏ Poner comandos en archivo: script
❏ Incluir bibliotecas con import
• Moderno
El lenguaje Python
❏ Cálculo de e:
import math
ee = 1.0
factorial = 1
resultados = []
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
for i in range(1, 10):
factorial *= i # factorial = factorial * i
ee += 1. / factorial
resultados.append(math.exp(1) - ee)
Python para el cómputo cientı́fico – David P. Sanders
Visualización en 3D
Entornos integrados
p. 9
Programas y librerı́as
❏ Poner comandos en archivo: script
❏ Incluir bibliotecas con import
• Moderno
El lenguaje Python
❏ Cálculo de e:
import math
ee = 1.0
factorial = 1
resultados = []
• Python
• Interactivo
• Listas y bucles
• Condicionales y
funciones
• Programas y
librerı́as
Visualización en 2D
Cómputo cientı́fico
for i in range(1, 10):
factorial *= i # factorial = factorial * i
ee += 1. / factorial
resultados.append(math.exp(1) - ee)
Visualización en 3D
Entornos integrados
❏ Lista es estructura de datos flexible e importante
❏ Correr desde
ipython con run exp
Python para el cómputo cientı́fico – David P. Sanders
p. 9
• Moderno
El lenguaje Python
Visualización en 2D
• Gráficas en 2D
Cómputo cientı́fico
Visualización en 3D
Visualización en 2D
Python para el cómputo cientı́fico – David P. Sanders
Entornos integrados
p. 10
Gráficas en 2D
❏ Paquete: matplotlib / pylab
❏ Parecido a
MATLAB
• Moderno
El lenguaje Python
❏
ipython -pylab
Visualización en 2D
• Gráficas en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 11
Gráficas en 2D
❏ Paquete: matplotlib / pylab
❏ Parecido a
MATLAB
• Moderno
El lenguaje Python
❏
ipython -pylab
Visualización en 2D
• Gráficas en 2D
plot(res, 'o') # puntos
plot(res, 'o-') # puntos y lineas
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
xlabel('Numero terminos $n$')
ylabel('Aproximacion $\sum_{i=0}ˆn x_i$')
clf() # limpiar pantalla
semilogy(res, 'o')
❏ Posibilidad de utilizar etiquetas estilo LATEX
Python para el cómputo cientı́fico – David P. Sanders
p. 11
Gráficas en 2D
❏ Paquete: matplotlib / pylab
❏ Parecido a
MATLAB
• Moderno
El lenguaje Python
❏
ipython -pylab
Visualización en 2D
• Gráficas en 2D
plot(res, 'o') # puntos
plot(res, 'o-') # puntos y lineas
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
xlabel('Numero terminos $n$')
ylabel('Aproximacion $\sum_{i=0}ˆn x_i$')
clf() # limpiar pantalla
semilogy(res, 'o')
❏ Posibilidad de utilizar etiquetas estilo LATEX
❏ Trivial de guardar en calidad para publicación (PDF):
savefig('exp.pdf')
Python para el cómputo cientı́fico – David P. Sanders
p. 11
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 12
Arreglos, vectores, matrices
❏ Paquete
❏
numpy provee arreglos, vectores y matrices
sudo apt-get install python-numpy
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 13
Arreglos, vectores, matrices
❏ Paquete
❏
numpy provee arreglos, vectores y matrices
sudo apt-get install python-numpy
• Moderno
El lenguaje Python
❏ Objeto básico: array:
from numpy import *
x = array([3., 4.])
v = array([0.1, 2.])
dt = 0.1
x = x + v * dt
x += v * dt
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 13
Arreglos, vectores, matrices
❏ Paquete
❏
numpy provee arreglos, vectores y matrices
sudo apt-get install python-numpy
• Moderno
El lenguaje Python
❏ Objeto básico: array:
from numpy import *
x = array([3., 4.])
v = array([0.1, 2.])
dt = 0.1
x = x + v * dt
x += v * dt
❏ Concepto básico en programación cientı́fica moderna:
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Tratar a vectores como unidad indivisible
Python para el cómputo cientı́fico – David P. Sanders
p. 13
Caminatas aleatorias en 1D
❏ Cada caminante brinca a la izquierda o derecha al azar
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 14
Caminatas aleatorias en 1D
❏ Cada caminante brinca a la izquierda o derecha al azar
from pylab import *
N = 1e6
pos = zeros(N)
for t in range(10):
pos += uniform(-1, 1, N)
h = hist(pos, 100)
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 14
Caminatas aleatorias en 1D
❏ Cada caminante brinca a la izquierda o derecha al azar
from pylab import *
N = 1e6
pos = zeros(N)
for t in range(10):
pos += uniform(-1, 1, N)
h = hist(pos, 100)
❏ Discreto:
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
from pylab import *
N = 1e5
pos = zeros(N)
Visualización en 3D
for veces in range(10):
Entornos integrados
for t in range(1):
pos += 2* (uniform(-1, 1, N) > 0) - 1
h = hist(pos, 100, histtype='step', normed=True)
Python para el cómputo cientı́fico – David P. Sanders
p. 14
Caminatas aleatorias en 1D
❏ Cada caminante brinca a la izquierda o derecha al azar
from pylab import *
N = 1e6
pos = zeros(N)
for t in range(10):
pos += uniform(-1, 1, N)
h = hist(pos, 100)
❏ Discreto:
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
from pylab import *
N = 1e5
pos = zeros(N)
Visualización en 3D
for veces in range(10):
Entornos integrados
for t in range(1):
pos += 2* (uniform(-1, 1, N) > 0) - 1
h = hist(pos, 100, histtype='step', normed=True)
❏ Utilizar timeit para ver cuál es más rápido
Python para el cómputo cientı́fico – David P. Sanders
p. 14
Caminatas aleatorias en 2D
❏ Animar con
pylab:
from pylab import *
ion()
N = 1e5
pos = 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()
Python para el cómputo cientı́fico – David P. Sanders
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
p. 15
Valores propios
❏ Matriz aleatoria, hacer simétrica:
M = rand(1000, 1000)
M = M + M.T
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 16
Valores propios
❏ Matriz aleatoria, hacer simétrica:
M = rand(1000, 1000)
M = M + M.T
• Moderno
El lenguaje Python
Visualización en 2D
❏ 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 )
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 16
Valores propios
❏ Matriz aleatoria, hacer simétrica:
M = rand(1000, 1000)
M = M + M.T
• Moderno
El lenguaje Python
Visualización en 2D
❏ 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 )
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
❏ Repetir para mejor estadı́stica:
diff.extend( list (lamb[1:] - lamb[:-1]) )
Python para el cómputo cientı́fico – David P. Sanders
p. 16
Método de Euler
❏ Resolver
ẋ = f (x,t)
con método de Euler
from pylab import *
• Moderno
El lenguaje Python
def paso_euler(x, t, f):
return f(x,t)
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 17
Método de Euler
❏ Resolver
ẋ = f (x,t)
con método de Euler
• Moderno
from pylab import *
El lenguaje Python
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)
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
derivada = paso_euler(x, t, h, f)
x += h * derivada; t += h
Entornos integrados
return lista_t, lista_x
Python para el cómputo cientı́fico – David P. Sanders
p. 17
Euler II
❏ Definir función que integrar:
def logistica(x, t):
return x*(5. - x)
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 18
Euler II
❏ Definir función que integrar:
def logistica(x, t):
return x*(5. - x)
• Moderno
El lenguaje Python
Visualización en 2D
❏ Integrar y dibujar:
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
dt = 0.2; t_final = 5; x0 = 0.1
t, x = integrar(x0, t_final, dt, logistica, euler)
plot(t, x, 'bo-', label='euler')
show()
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 18
Extendiendo a más métodos
❏ 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
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 19
Extendiendo a más métodos
❏ 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()
Python para el cómputo cientı́fico – David P. Sanders
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
p. 19
Ecuaciones diferenciales vectoriales
❏ Función 2D:
def harmonico(x_vec, t):
xx, yy = x_vec
# separar componentes
return array([yy, -xx])
# regresar vector
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 20
Ecuaciones diferenciales vectoriales
❏ Función 2D:
def harmonico(x_vec, t):
xx, yy = x_vec
# separar componentes
return array([yy, -xx])
# regresar vector
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
❏ Cambiar lista_x.append(x) a
lista_x.append(array(x)) – crea copia
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 20
Ecuaciones diferenciales vectoriales
❏ Función 2D:
def harmonico(x_vec, t):
xx, yy = x_vec
# separar componentes
return array([yy, -xx])
# regresar vector
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
❏ Cambiar lista_x.append(x) a
lista_x.append(array(x)) – crea copia
❏ Punto:
¡Mismı́simo código funciona para escalares o vectores!
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 20
Librerı́as para cómputo cientı́fico
❏ Librerı́a
scipy:
apt-get install python-scipy
❏ Funciones especiales:
• Moderno
El lenguaje Python
from scipy import special
t = arange(0., 30., 0.1)
plot( t, special.j0(t), t, zeros(len(t)) )
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 21
Librerı́as para cómputo cientı́fico
❏ Librerı́a
scipy:
apt-get install python-scipy
❏ Funciones especiales:
• Moderno
El lenguaje Python
from scipy import special
t = 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
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 21
Librerı́as para cómputo cientı́fico
❏ Librerı́a
scipy:
apt-get install python-scipy
❏ Funciones especiales:
• Moderno
El lenguaje Python
from scipy import special
t = 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.T
indice = argsort(lamb)
lamb = lamb[indice]; v = v[indice]
plot(v[-3], 'o')
Python para el cómputo cientı́fico – David P. Sanders
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
p. 21
Librerı́as para cómputo cientı́fico
❏ Librerı́a
scipy:
apt-get install python-scipy
❏ Funciones especiales:
• Moderno
El lenguaje Python
from scipy import special
t = 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.T
indice = argsort(lamb)
lamb = lamb[indice]; v = v[indice]
plot(v[-3], 'o')
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
❏ Contiene estadı́stica, raı́ces, optimización, transformadas
de Fourier,. . .
Python para el cómputo cientı́fico – David P. Sanders
p. 21
Python como pegamento
❏ Uso muy común (e.g. Google): “pegamento”
❏ Mejor shell para correr simulaciones:
• Moderno
El lenguaje Python
import (s)
nombre = "wang_landau"
L = 10; traslape = 3
pos = 0
ventanas = []
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 22
Python como pegamento
❏ Uso muy común (e.g. Google): “pegamento”
❏ Mejor shell para correr simulaciones:
• Moderno
El lenguaje Python
import (s)
nombre = "wang_landau"
L = 10; traslape = 3
pos = 0
ventanas = []
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 comando
os.system(comando)
Python para el cómputo cientı́fico – David P. Sanders
Visualización en 2D
Cómputo cientı́fico
• Numpy
• Caminatas
• Caminatas 2D
• Valores propios
• Euler
• Euler II
• Más métodos
• Vectorial
• Scipy
• Pegamento
Visualización en 3D
Entornos integrados
p. 22
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Visualización en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 23
Visual Python
❏ Visual Python: Herramienta para animaciones en 2D y 3D
❏ Sumamente fácil de utilizar desde el primer momento
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 24
Visual Python
❏ Visual Python: Herramienta para animaciones en 2D y 3D
❏ Sumamente fácil de utilizar desde el primer momento
• Moderno
El lenguaje Python
❏
sudo apt-get install python-visual
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 24
Visual Python
❏ Visual Python: Herramienta para animaciones en 2D y 3D
❏ Sumamente fácil de utilizar desde el primer momento
• Moderno
El lenguaje Python
❏
sudo apt-get install python-visual
Visualización en 2D
Cómputo cientı́fico
from visual import *
s = sphere()
Visualización en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 24
Visual Python
❏ Visual Python: Herramienta para animaciones en 2D y 3D
❏ Sumamente fácil de utilizar desde el primer momento
• Moderno
El lenguaje Python
❏
sudo apt-get install python-visual
Visualización en 2D
Cómputo cientı́fico
from visual import *
s = sphere()
s.color = color.red()
s.pos = 1, 0, 0
Python para el cómputo cientı́fico – David P. Sanders
Visualización en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
p. 24
Visual Python
❏ Visual Python: Herramienta para animaciones en 2D y 3D
❏ Sumamente fácil de utilizar desde el primer momento
• Moderno
El lenguaje Python
❏
sudo apt-get install python-visual
Visualización en 2D
Cómputo cientı́fico
from visual import *
s = sphere()
s.color = color.red()
s.pos = 1, 0, 0
Visualización en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
❏ Animación: mover un poco cada vez
Python para el cómputo cientı́fico – David P. Sanders
p. 24
Visual Python
❏ Visual Python: Herramienta para animaciones en 2D y 3D
❏ Sumamente fácil de utilizar desde el primer momento
• Moderno
El lenguaje Python
❏
sudo apt-get install python-visual
Visualización en 2D
Cómputo cientı́fico
from visual import *
s = sphere()
s.color = color.red()
s.pos = 1, 0, 0
Visualización en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
❏ Animación: mover un poco cada vez
b = box(); b.height = 0.1
s = sphere(radius = 0.2)
s2 = sphere(radius=0.2)
s2.color = color.blue
for i in xrange(1000):
rate(100) # limitar velocidad de animacion
s.pos = i/1000., 0, 0
Python para el cómputo cientı́fico – David P. Sanders
p. 24
Visualización de datos en 3D
❏ MayaVi2: visualización de datos en 3D, equivalente de
pylab
❏
• Moderno
sudo apt-get install mayavi2
El lenguaje Python
Visualización en 2D
❏ Interactivo con
ipython -wthread
Cómputo cientı́fico
Visualización en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 25
Visualización de datos en 3D
❏ MayaVi2: visualización de datos en 3D, equivalente de
pylab
❏
• Moderno
sudo apt-get install mayavi2
El lenguaje Python
Visualización en 2D
❏ Interactivo con
ipython -wthread
from enthought.mayavi import mlab
x = rand(10); y = rand(10); z = rand(10)
mlab.points3d(x, y, z)
c = rand(10)
mlab.points3d(x, y, z, c)
Python para el cómputo cientı́fico – David P. Sanders
Cómputo cientı́fico
Visualización en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
p. 25
Visualización de datos en 3D
❏ MayaVi2: visualización de datos en 3D, equivalente de
pylab
❏
• Moderno
sudo apt-get install mayavi2
El lenguaje Python
Visualización en 2D
❏ Interactivo con
ipython -wthread
from enthought.mayavi import mlab
x = rand(10); y = rand(10); z = rand(10)
mlab.points3d(x, y, z)
c = rand(10)
mlab.points3d(x, y, z, c)
Python para el cómputo cientı́fico – David P. Sanders
Cómputo cientı́fico
Visualización en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
p. 25
MayaVi avanzado
❏ Partı́cula en potencial 3D:
import numpy as np
def V(x, y, z):
return np.cos(10*x) + np.cos(10*y) + \
np.cos(10*z) + 2*(x**2 + y**2 + z**2)
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 26
MayaVi avanzado
❏ Partı́cula en potencial 3D:
import numpy as np
def V(x, y, z):
return np.cos(10*x) + np.cos(10*y) + \
np.cos(10*z) + 2*(x**2 + y**2 + z**2)
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
from enthought.mayavi import mlab
mlab.contour3d(X, Y, Z, V)
• Visual
• MayaVi
• MayaVi
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
p. 26
MayaVi avanzado
❏ Partı́cula en potencial 3D:
import numpy as np
def V(x, y, z):
return np.cos(10*x) + np.cos(10*y) + \
np.cos(10*z) + 2*(x**2 + y**2 + z**2)
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
from enthought.mayavi import mlab
mlab.contour3d(X, Y, Z, V)
• Visual
• MayaVi
• MayaVi
Entornos integrados
❏ Clic en ı́cono para interactuar
Python para el cómputo cientı́fico – David P. Sanders
p. 26
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
Entornos integrados
Python para el cómputo cientı́fico – David P. Sanders
• Sage
• Enseñanza
• Conclusiones
p. 27
Sage
❏ Interfaz “pitónico” para software libre de matemáticas
❏
http://www.sagemath.org
(no por paquete)
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
Python para el cómputo cientı́fico – David P. Sanders
p. 28
Sage
❏ Interfaz “pitónico” para software libre de matemáticas
❏
http://www.sagemath.org
(no por paquete)
• Moderno
El lenguaje Python
❏ Incluye numpy, scipy
❏ Incluye cálculos simbólicos
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
Python para el cómputo cientı́fico – David P. Sanders
p. 28
Sage
❏ Interfaz “pitónico” para software libre de matemáticas
❏
http://www.sagemath.org
(no por paquete)
• Moderno
El lenguaje Python
❏ Incluye numpy, scipy
❏ Incluye cálculos simbólicos
❏ Interfaz por web –no necesario instalar– e.g. para cursos
Python para el cómputo cientı́fico – David P. Sanders
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
p. 28
Sage
❏ Interfaz “pitónico” para software libre de matemáticas
❏
http://www.sagemath.org
(no por paquete)
• Moderno
El lenguaje Python
❏ Incluye numpy, scipy
❏ Incluye cálculos simbólicos
❏ Interfaz por web –no necesario instalar– e.g. para cursos
x, y = var('x y')
s = (x+y)**2
s.expand()
Python para el cómputo cientı́fico – David P. Sanders
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
p. 28
Sage
❏ Interfaz “pitónico” para software libre de matemáticas
❏
http://www.sagemath.org
(no por paquete)
• Moderno
El lenguaje Python
❏ Incluye numpy, scipy
❏ Incluye cálculos simbólicos
❏ Interfaz por web –no necesario instalar– e.g. para cursos
x, y = var('x y')
s = (x+y)**2
s.expand()
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
plot(x**2, (-2, 2) )
def f(x,y): return xˆ2 + yˆ2 - xˆ3
plot3d(f, (-2, 2), (-2, 2))
Python para el cómputo cientı́fico – David P. Sanders
p. 28
Sage
❏ Interfaz “pitónico” para software libre de matemáticas
❏
http://www.sagemath.org
(no por paquete)
• Moderno
El lenguaje Python
❏ Incluye numpy, scipy
❏ Incluye cálculos simbólicos
❏ Interfaz por web –no necesario instalar– e.g. para cursos
x, y = var('x y')
s = (x+y)**2
s.expand()
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
plot(x**2, (-2, 2) )
def f(x,y): return xˆ2 + yˆ2 - xˆ3
plot3d(f, (-2, 2), (-2, 2))
❏ Cambiar de manera interactiva
Python para el cómputo cientı́fico – David P. Sanders
p. 28
Sage
❏ Interfaz “pitónico” para software libre de matemáticas
❏
http://www.sagemath.org
(no por paquete)
• Moderno
El lenguaje Python
❏ Incluye numpy, scipy
❏ Incluye cálculos simbólicos
❏ Interfaz por web –no necesario instalar– e.g. para cursos
x, y = var('x y')
s = (x+y)**2
s.expand()
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
plot(x**2, (-2, 2) )
def f(x,y): return xˆ2 + yˆ2 - xˆ3
plot3d(f, (-2, 2), (-2, 2))
❏ Cambiar de manera interactiva
❏ Otros: spyder, pythonxy, Enthought Python Distribution
Python para el cómputo cientı́fico – David P. Sanders
p. 28
Enseñanza
❏ Python es perfecto como primer (y casi último) lenguaje
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
Python para el cómputo cientı́fico – David P. Sanders
p. 29
Enseñanza
❏ Python es perfecto como primer (y casi último) lenguaje
❏ Enseñar desde primer semestre
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
Python para el cómputo cientı́fico – David P. Sanders
p. 29
Enseñanza
❏ Python es perfecto como primer (y casi último) lenguaje
❏ Enseñar desde primer semestre
• Moderno
El lenguaje Python
❏ Herramientas de visualización, cálculos
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
Python para el cómputo cientı́fico – David P. Sanders
p. 29
Enseñanza
❏ Python es perfecto como primer (y casi último) lenguaje
❏ Enseñar desde primer semestre
• Moderno
El lenguaje Python
❏ Herramientas de visualización, cálculos
Visualización en 2D
Cómputo cientı́fico
❏ Fácil de experimentar
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
Python para el cómputo cientı́fico – David P. Sanders
p. 29
Conclusiones
❏ Conjunto de herramientas poderosas
• Moderno
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
Python para el cómputo cientı́fico – David P. Sanders
p. 30
Conclusiones
❏ Conjunto de herramientas poderosas
• Moderno
❏ Ideal para enseñanza de fı́sica
El lenguaje Python
Visualización en 2D
Cómputo cientı́fico
Visualización en 3D
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
Python para el cómputo cientı́fico – David P. Sanders
p. 30
Conclusiones
❏ Conjunto de herramientas poderosas
• Moderno
❏ Ideal para enseñanza de fı́sica
El lenguaje Python
Visualización en 2D
❏ Ideal como entorno para investigación
Cómputo cientı́fico
Visualización en 3D
❏ Para todo excepto simulaciones “hard-core”
Entornos integrados
• Sage
• Enseñanza
• Conclusiones
Python para el cómputo cientı́fico – David P. Sanders
p. 30
Conclusiones
❏ Conjunto de herramientas poderosas
• Moderno
❏ Ideal para enseñanza de fı́sica
El lenguaje Python
Visualización en 2D
❏ Ideal como entorno para investigación
Cómputo cientı́fico
Visualización en 3D
❏ Para todo excepto simulaciones “hard-core”
Entornos integrados
❏ Contacto:
• Sage
• Enseñanza
• Conclusiones
http://sistemas.fciencias.unam.mx/˜dsanders
[email protected]
Python para el cómputo cientı́fico – David P. Sanders
p. 30