0% encontró este documento útil (0 votos)
31 vistas31 páginas

Herramientas de Python para Cálculo Científico

Este documento describe el uso de Python y sus herramientas científicas como NumPy y SciPy para resolver la ecuación de calor mediante diferencias finitas. Se presenta un ejemplo numérico que discretiza la ecuación en el espacio y tiempo y resuelve el sistema resultante usando métodos directos e iterativos de SciPy. Finalmente, se discuten las ventajas de Python para cálculos numéricos como su sintaxis simple y compatibilidad con otros lenguajes.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
31 vistas31 páginas

Herramientas de Python para Cálculo Científico

Este documento describe el uso de Python y sus herramientas científicas como NumPy y SciPy para resolver la ecuación de calor mediante diferencias finitas. Se presenta un ejemplo numérico que discretiza la ecuación en el espacio y tiempo y resuelve el sistema resultante usando métodos directos e iterativos de SciPy. Finalmente, se discuten las ventajas de Python para cálculos numéricos como su sintaxis simple y compatibilidad con otros lenguajes.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Python y sus Herramientas de computo cientı́fico

NumPy
SciPy

Daniel Vela
Emilio Zavala

Modelación Matemática Computacional

March 23, 2011

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Ejemplo de Aplicación
Ecuación de calor
∂u
− ∇2 u = 0
∂t
u = u(x, y , t), {x, y ∈ [−1, 1]x[−1, 1]; t ∈ R}
Condiciones iniciales:
u(x, y , 0) = sen(πx)sen(πy )
Condiciones de frontera (Dirichlet):
u(−1, y , t) = 0
u(1, y , t) = 0
u(x, −1, t) = 0
u(x, 1, t) = 0
Solución Analı́tica:
2t
u(x, y , t) = sen(πx)sen(πy )e −2π
Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Ejemplo de Aplicación

Ecuación de calor
∂u
− ∇2 u = 0 (1)
∂t
Diferencias Finitas Centradas
n+1 n n n + un
ui+1,j − 2ui,j n
ui,j+1 n + un
− 2ui,j
u −u i−1,j i,j−1
= + (2)
∆t ∆x 2 ∆y 2
Discretización en tiempo con Crank Nicolson (esquema θ = 1/2)
∂u u n+1 − u n 1 n+1
(x) + f n (x)

≈ = f (3)
∂t ∂t 2
f n+1 (x) = Au n+1 ; f n (x) = Au n (4)
   
∆t ∆t
I− A u n+1 = I + A un (5)
2 2
0
A u n+1 = b
Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Código ecuación de calor

Inicialización de parámetros
import numpy as np

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Código ecuación de calor
Numeración de nodos

NDom ; equivale a generar un arreglo de memoria dinámica en c++

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Código ecuación de calor

Condiciones iniciales

meshgrid : regresa una matriz de coordenadas a partir de dos


arreglos
mgrid : regresa una malla densa, soporta mallas
multidimensionales, los argumentos de entrada son de forma
indicial
ogrid : similar a mgrid, regresa mallas abiertas (ahorra memoria)
Grafica condición inicial
import [Link] as srf

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Código ecuación de calor
import [Link] as sparse

[Link](); [Link](); [Link](); [Link](); [Link](); [Link]()


Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Formatos de almacenamiento de Matrices

[Link]

Matrices dispersas
1 coo matrix : Construye matriz por coordenadas (i,j)
2 dia matrix : Almacena por diagonales
3 csc matrix : Matriz dispersa comprimida en formato por
columnas
4 csr matrix : Matriz dispersa comprimida en formato por
renglones
5 bsr matrix : Matriz dispersa por bloques en formato por
renglones
6 lil matrix : Matriz en formato de listas
7 dok matrix : Formato de diccionario de claves

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Código ecuación de calor

Solucion en tiempo
   
∆t n+1 ∆t
I− A u = I+ A un
2 2
0
A u n+1 = b

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Solución de sistemas de ecuaciones lineales

[Link]

Métodos iterativos (isolve)

1 bicg(A, b, x0=None, tol= float32, maxiter=None, ...) Gradiente bi-conjugado


2 bicgstab(A, b, x0=None, tol=float32, maxiter=None, ...) Gradiente conjugado estabilizado
3 cg(A, b, x0=None, tol=float32, maxiter=None, ...) Gradiente Conjugado
4 cgs(A, b, x0=None, tol=float32, maxiter=None, ...)Gradiente Conjugado de iteracion cuadrática
5 gmres(A, b, x0=None, tol= float32, restart=None, maxiter= None, ...)”Generalized Minimal RESidual
iteration”
6 lgmres(A, b, x0=None, tol= float32, maxiter=None, ...)Loose GMRES, evita problemas de convergencia al
reinicial GMRES,y converge mas rapido
7 lobpcg(A, X, B=None, M=None, Y=None, tol=None, maxiter=20, ...)Implementa ”Locally Optimal
Block Preconditioned Conjugate Gradient Method ”
8 lsqr(A, b, damp=0.0, atol=1e-08, btol=1e-08, ... )Encuentra la solución por mı́nimos cuadrados de un
sistema de ecuaciones lineal
9 minres(A, b, x0=None, shift=0.0, tol= float32 , maxiter=None, ...)Resuelve un sistema Ax=b por
”MINimum RESidual iteration” (mı́nimos residuales)
10 qmr(A, b, x0=None, tol= float32, maxiter=None, ... )”Quasi- Minimal Residual iteration”

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Solución de sistemas de ecuaciones lineales

[Link]

Métodos directos (dsolve)

1 spilu(A, drop tol=None, fill factor=None, . . .)Calcula la descomposicion


LU (incompleta) de una matriz cuadrada
2 splu(A, permc spec=None, diag pivot thresh=None, ...)Descomposición
LU de una matriz
3 factorized(A)Regresa una función para resolver un sistema lineal disperso
con una matriz pre-factorizada
4 spsolve(A, b, permc spec=None, use umfpack=True)Resuelve un sistema
lineal disperso utilizando librerı́as Umfpack
5 use solver(∗ ∗ kwargs)Utiliza SuperLU o Umfpack, requiere de formatos
csc o csr

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Sistemas de ecuaciones NO lineales ?

Python es compatible con FEniCS


1 FEniCS tiene métodos para linealizar ecuaciones No lineales
con Newton-Raphson

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Sistemas de ecuaciones NO lineales ?

Python es compatible con FEniCS


1 FEniCS tiene métodos para linealizar ecuaciones No lineales
con Newton-Raphson
2 FEniCS utiliza sintaxis de Python

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
porque Python?
Rendimiento razonable en cálculos numéricos.
Matriz tiempo(segs)
1444 x 1444 0.55
39204 x 39204 21.42
158404 x 158404 118.36
996004 x 996004 1724.23

Sintaxis simple (muy parecido a Matlab).

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
porque Python?
Rendimiento razonable en cálculos numéricos.
Matriz tiempo(segs)
1444 x 1444 0.55
39204 x 39204 21.42
158404 x 158404 118.36
996004 x 996004 1724.23

Sintaxis simple (muy parecido a Matlab).


Compatibilidad con C++ y FORTRAN.

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
porque Python?
Rendimiento razonable en cálculos numéricos.
Matriz tiempo(segs)
1444 x 1444 0.55
39204 x 39204 21.42
158404 x 158404 118.36
996004 x 996004 1724.23

Sintaxis simple (muy parecido a Matlab).


Compatibilidad con C++ y FORTRAN.
Puedes fortalecer Python al añadir módulos y paquetes.

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
porque Python?
Rendimiento razonable en cálculos numéricos.
Matriz tiempo(segs)
1444 x 1444 0.55
39204 x 39204 21.42
158404 x 158404 118.36
996004 x 996004 1724.23

Sintaxis simple (muy parecido a Matlab).


Compatibilidad con C++ y FORTRAN.
Puedes fortalecer Python al añadir módulos y paquetes.
Uso de herramientas algebraicas de alto rendimiento
BLAS/LAPACK

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
porque Python?
Rendimiento razonable en cálculos numéricos.
Matriz tiempo(segs)
1444 x 1444 0.55
39204 x 39204 21.42
158404 x 158404 118.36
996004 x 996004 1724.23

Sintaxis simple (muy parecido a Matlab).


Compatibilidad con C++ y FORTRAN.
Puedes fortalecer Python al añadir módulos y paquetes.
Uso de herramientas algebraicas de alto rendimiento
BLAS/LAPACK
Modulos para generar código en paralelo con GPU’s:
Python + CUDA = PyCUDA
Python + OpenCL = PyOpenCL

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
porque Python?
Rendimiento razonable en cálculos numéricos.
Matriz tiempo(segs)
1444 x 1444 0.55
39204 x 39204 21.42
158404 x 158404 118.36
996004 x 996004 1724.23

Sintaxis simple (muy parecido a Matlab).


Compatibilidad con C++ y FORTRAN.
Puedes fortalecer Python al añadir módulos y paquetes.
Uso de herramientas algebraicas de alto rendimiento
BLAS/LAPACK
Modulos para generar código en paralelo con GPU’s:
Python + CUDA = PyCUDA
Python + OpenCL = PyOpenCL
Modulo para paralelizar con MPI, mpi4py.
Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
OpenCL vs CUDA
OpenCL (Open Computing Language) CUDA

Créditos: Andreas Klȯckner/ PASI , Chile (2011).

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Que hay de especial con PyOpenCL y PyCUDA?
PyCUDA
Limpieza de objetos de acuerdo a
PyOpenCL su tiempo de vida. Conocido
Limpieza de objetos de acuerdo a como RAII en C++.PyCUDA
su tiempo de vida. Conocido reconoce dependencias(ej. no
como RAII en C++. continuara con otra instrucción si
Complementación. PyOpenCL no se ha reservado memoria en
tiene a su disposición todos los dispositivos)
API’s de OpenCL. Abstracciones. es mas simple la
Chequeo automático de errores. sintaxis que Nvidia basado en C.
Estos son traducidos excepciones Complementación. PyCUDA
en Python. tiene a su disposición todos los
Documentación útil. API’s de CUDA.

Licencia libre. PyOpenCL es Chequeo automático de errores.


código libre. Estos son traducidos excepciones
en Python.
Documentación útil.
[Link]

[Link]

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Ejemplitos

[Link]

[Link]

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
Ejemplitos

[Link]

[Link]

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
mpi4py

Ejemplo:
Aproximación del valor de π en paralelo

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
import [Link] / 2D

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
import [Link] / 2D

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
import [Link] / 3D

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
import [Link] / Combinaciones

Cookbook/ MayaVi/ Examples

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
import [Link] / Combinaciones

Cookbook/ MayaVi/ Examples

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
import [Link] / Combinaciones

Cookbook/ MayaVi/ Examples

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy
import [Link] / Combinaciones

Cookbook/ MayaVi/ Examples

Daniel Vela Emilio Zavala Python y sus Herramientas de computo cientı́fico NumPy SciPy

También podría gustarte