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 dps@fciencias.unam.mx 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 dps@fciencias.unam.mx Python para el cómputo cientı́fico – David P. Sanders p. 30