Este es el repositorio para la materia de "Métodos Numéricos y Optimización (MNO)" impartida en la maestría de ciencia de datos del ITAM por el Prof. Erick Palacios Moreno, github: palmoreck.
Dar click en liga para el temario.
Dar click en el siguiente botón para unirse al chat del semestre enero-mayo 2020 en gitter:
Se puede hacer el registro con su cuenta de github.
En este repositorio se han creado diferentes ramas que pueden ser accesadas como se aprecia en esta imagen:
Seleccionar por ejemplo la rama mno-2018-1 (u otra) para información del curso de MNO de 2018.
Dar click en liga para la rama del curso del semestre enero-mayo 2020.
En la carpeta C encuentran:
-
C/Clases para introducción al lenguaje C de programación.
-
Dentro de C/BLAS y C/LAPACK se tienen funciones para ejecución de algunas rutinas de BLAS, LAPACK en un sistema ubuntu.
-
Dentro de C/extensiones_a_C/ se encuentran las siguientes extensiones al lenguaje de programación C: C/extensiones_a_C/MPI para MPI, C/extensiones_a_C/Phtreads para Pthreads, C/extensiones_a_C/openMP para openMP y C/extensiones_a_C/CUDA para CUDA.
Los directorios de Python y algoritmos serán incorporados a las notas. Este trabajo será realizado durante el semestre enero-mayo 2020.
En el Wiki encuentran información sobre Amazon Web Services.
Normalmente los pull requests no se hacen a la rama master
salvo haya una modificación a realizar en tal rama (modificación para algún código o contenido por ejemplo).
A continuación se presentan links a las notas y material de cada tema. Adicionalmente se encuentran en el directorio temas.
Cada número contiene información del tema respectivo, dar click en el tema de interés. Las notas están escritas en Jupyter notebooks. Ver I python, You R, We Julia para algunas características de tales notebooks.
Adicionalmente, algunos temas tienen un botón de binder para ejecutar de forma interactiva el contenido (ojo: cada botón tiene ambientes de docker distintos por lo que un mismo botón puede no funcionar para notas de capítulos distintos, p.ej. el botón de la nota 1.2 no funciona para la 1.4).
Tenemos otro botón :) Este es de google colab para ejecución de forma interactiva de los notebooks de jupyter en los que se utilizan GPU's para procesamiento.
Ver dockerfiles-for-binder para documentación de las imágenes de docker usadas y en la liga jupyterhub/binderhub encuentran información de binder.
Ver research.google...faq y colab-github-demo para más información de google colab.
Ver Jupyter kernels para una tabla de los kernels disponibles en jupyter.
1.1 Analisis numérico y cómputo científico.
1.2 Sistema de punto flotante. (nota escrita en jupyterlab + kernel de C)
1.3 Condición, estabilidad y normas. (nota escrita en jupyterlab)
Métodos de diferenciación e integración numérica:
1.4 Polinomios de Taylor y diferenciacion_numerica. (nota escrita en jupyterlab + kernel de R)
1.5 Integración numérica (nota escrita en jupyterlab)
1.7 Opciones para resolver bottlenecks:
-
Compilar a C, Python + C: Cython
(nota escrita en jupyterlab)
-
Reescribir funciones a C++: Rcpp
(nota escrita en jupyterlab + kernel de R)
-
Cómputo en paralelo (capítulo II).
-
Uso del caché y operaciones BLAS (capítulo III).
2.1 Un poco de historia y generalidades.
La descripción y uso de las siguientes librerías/módulos/paquetes/API's no tiene el propósito de ser extensa ni completa pues en un futuro pueden existir herramientas con mejor desempeño, documentación o comunidad. En las referencias de cada nota aparecen ligas y libros con documentación para extender su aprendizaje.
2.2 Sistemas de memoria compartida
-
Python
-
Multiprocessing
(nota escrita en jupyterlab)
-
Dask
(nota escrita en jupyterlab)
-
-
R
- Parallel
(nota escrita en jupyterlab + kernel de R)
- Parallel
-
C
-
OpenMP
(nota escrita en jupyterlab + kernel de C)
-
2.3 CUDA
-
C
-
CUDA C
(nota escrita en jupyterlab + kernel de C)
-
-
Python
-
R
- gputools
(nota escrita en jupyterlab + kernel de R)
- Rth (pendiente) ver Rth-org/Rth y más reciente matloff/Rth
- gpuR (pendiente) ver gpuR
- gputools
3.1 Vectorizacion, BLAS y el uso del caché eficientemente
3.2 OpenBLAS
-
Ejemplos:
Nota del prof: estoy reescribendo las notas y añadiendo botones para interactividad.
3.3 Solucion de sistemas de ecuaciones lineales y factorizaciones matriciales
-
Métodos o algoritmos básicos del álgebra lineal para resolver sistemas de ecuaciones lineales y factorizaciones matriciales:
4.1 Mínimos cuadrados lineales con regularización
4.1 Introducción.
4.2 Problemas de optimización convexa.
4.3.1 Teoría de convexidad: conjuntos convexos.
4.3.2 Teoría de convexidad: funciones convexas.
4.4 Dualidad.
4.5.1 Problemas de optimización convexa: definiciones
Ejemplo de métodos de bisección, punto fijo y Newton para resolver ecuaciones no lineales
4.5.2 Algoritmos de optimización sin restricciones
4.5.3 Algoritmos de optimización con restricciones de igualdad
4.5.4 Algoritmos de optimización con restricciones de igualdad y desigualdad
Algoritmos para optimización sin restricciones
Algoritmos para optimización con restricciones de igualdad: ecuaciones lineales
Algoritmos para optimización con restricciones de igualdad: ecuaciones lineales y desigualdad
Ver RAPIDS
Ejemplos de Uso:
AWS.0 Tutorial para activar créditos de Amazon Web Services
AWS.1.1 Configuración de servicios básicos de AWS
AWS.1.2 Instalación de herramientas útiles en AWS
AWS.2 AWS y OpenMPI
AWS.3 AWS y Sun Grid Engine
AWS.4 AWS y Kubernetes
AWS.5 AWS y Dask
AWS.adicional1 [AWS: Relational Database System]
2.2 Sistemas de memoria distribuida: MPI.
2.3 Sistemas de memoria compartida: Pthreads
2.4 Sistemas de memoria compartida: openMP
3.3 Sistemas de ecuaciones lineales: métodos iterativos.
3.4 Tensores. Una introducción.
3.5 Aplicaciones del álgebra lineal numérica.