Programación e Introducción a los Métodos Numéricos#
Objetivo General#
Introducir al estudiante a las técnicas básicas de programación y su aplicación numérica usando el lenguaje C++, con aplicaciones a diversos métodos numéricos básicos: diferenciación e integración, problemas matriciales, solución de ecuaciones algebraicas, solución de ecuaciones diferenciales ordinarias, etc.
Simulation: https://youtu.be/lS_qeBy3aQI?si=ECDSZHouSlh2PQLq&t=446
Contenidos generales y programa tentativo#
Módulo I: Fundamentos de Programación de Computadores#
Introducción al curso y al desarrollo en c++ : Entorno de trabajo (google collab, muestra de acceso remoto a la sala de cómputo, binder, etc). Lenguajes de programación. Compiladores, editores (emacs, vs code). Estructura básica, compilación y ejecución de un programa en c++.
Introducción básica a
C++: Funciónmain. Variables y tipos (int, float, double). Operadores aritmeticos (+, -, *, ++, etc), lógicos (&&, and, or), de comparación (==,!=). Precedencia de operadores. Condicionalif,else. Aplicación: números pares, divisores. Introducción a loops.Funciones y modularización de archivos: Más sobre funciones. Modularización de archivos, separando declaración, implementación, y función main. Parámetros de la línea de comandos. Aplicación: Testing de funciones con catch2.
Módulo II: Aplicaciones numéricas básicas#
Loops y funciones: loops clásicos (
for,while,do-while). Loops modernos automáticos en rangos, Funciones básicas como modelo base de programación. Aplicación: Sumas de series, aproximación de número \(\pi\). Búsqueda de raíces.Derivadas numéricas: Método forward, central, y aplicación de la extrapolación de Richardson. Escritura con formato usando ofstream. Introducción a la derivación automática usando clases.
Cuadraturas numéricas: Trapecio, Simpson, y Gauss. Errores matemáticos y errores numéricos.
Módulo III: Aplicaciones matriciales básicas y librerías#
Arreglos modernos
std::vector,std::array: Arreglos modernos, heap y stack, acceso de memoria. Ejemplos con vectores matemáticos, aleatorios y normas. Introducción al deugging y a los sanitizers.Matrices representadas en arreglos: Colapso de índices. problemas matriciales y escalamiento.
Array computing: Operaciones a nivel de coeficientes,
std::valarray. Representación vectorial de las operaciones.Álgebra lineal computacional: Algoritmos, librerías como
eigen, matrices complejas, problemas y aplicaciones. Matrices aleatorias. Problemas de valor propio.
Módulo IV: Ecuaciones differenciales de valor inicial#
ODE y problemas de valor inicial: Ecuaciones diferenciales ordinarias de valor inicial. Algoritmo de Euler, Runge-Kutta, etc. Órdenes de convergencia, Aplicaciones a sistemas dinámicos.
Introducción a la dinamica molecular: Simulaciones de dinámica molecular, algoritmos, modularización, visualización de datos (post-processing), visualización del sistema con opengl.
Módulo V: introducción a Python#
Programación básica en python: Variables, selección, loops y funciones.
Estructuras básicas de datos: Listas, arreglos y diccionarios.
Temas opcionales#
(Opt) Librería estándar de algoritmos STL. Ejemplo: Ordenamiento de datos con la librería estándar, números aleatorios, contenedores.
(Opt) ODE y problemas de valor de frontera: Ecuaciones diferenciales ordinarias de valor inicial. Algoritmo de Euler, Runge-Kutta, etc. Órdenes de convergencia, Aplicaciones a sistemas dinámicos.
(Opt) Introducción a la solución numérica de ecuaciones diferenciales parciales: Ecuación de Laplace y método de relajación.
(Opt) Números aleatorios: Distribuciones, cálculo de integrales, métodos básicos de MonteCarlo.
(Opt) Errores en computación numérica: Substracción cancelativa, round-off, precisión, etc.
Evaluación#
Item |
Porcentaje |
Fecha |
Información adicional |
|---|---|---|---|
Examen Parcial 1 |
15 |
Semana 4-5 |
Presencial |
Examen Parcial 2 |
20 |
Semana 9-11 |
Presencial |
Tareas y práctica |
40 |
Cada clase |
Evaluación permanente |
Proyecto Final |
25 |
Última semana |
Se sustenta con video, informe y código |
Atención de dudas:
Reservas usando el calendario de google
Foro en moodle: micampus.unal.edu.co
Email con la pregunta claramente detallada.
Email proponiendo al menos dos horarios de reunión e indicando la pregunta
Metodología de evaluación#
La metodología de evaluacion es mixta, usando diferentes recursos que evalúan diferentes aspectos del aprendizaje:
a) Tareas normales que se califican sobre 5.0. Estas puede ser tareas sencillas de un día para otro, o workshops en donde ustedes entregan y además revisan el trabajo de sus compañeros, y la nota final depende de la calidad de lo que entregó y de lo bien que evaluó (se castigan calificaciones demasiado buenas, demasiado malas, etc)
b) Minitareas, que normalmente valen entre 1.0 a 2.0, y se van acumulando hasta convertirse en una tarea completa qu puede sumar más de 5.0 (ahí está la ayuda en bonos). Estas muchas veces se hacen en clase y al sumar más de 5.0 permiten que usted no presente alguna y aún así aspire a sacar 5.0. Adicionalmente, pueden consistir de videos de preparación de clase y otras actividades.
c) Evaluaciones tipo parcial, en ambientes limitados y de tiempo limitado. Normalmente son de selección múltiple o programas que deben cumplir ciertos casos de prueba, ya sean explícitos u ocultos.
d) Proyectos se busca la solución de problemas más complejos , en grupo. Allí se deben fotalecer las habilidades blandas y usar herramientas apropiadas para coordinar el trabajo en grupo. Adicionalmente, la nota final de estos trabajos en grupo depende también de una evaluación anónima que hagan sus propios compañeros sobre su contribución, de manera que si usted no trabaja, no obtendrá la misma nota que los demás aunque estén en el mismo grupo.
Recursos básicos del curso#
Instrucciones de acceso remoto a la sala de cómputo, recursos, usb live, etc#
Listas de videos:#
Complementary tools#
Bibliografía#
Canale, R.P., and D. Steven C. Chapra. Numerical Methods for Engineers. McGraw-Hill Education, 2014. https://books.google.com.co/books?id=avsMnQEACAAJ.
Deitel, P., and H. Deitel. C++ How to Program. How to Program. Prentice Hall PTR, 2013. https://books.google.com.co/books?id=S9oxoAEACAAJ.
Garcia, A.L. Numerical Methods for Physics. Prentice Hall, 2000. https://books.google.com.co/books?id=MPVAAQAAIAAJ.
Langtangen, H.P. A Primer on Scientific Programming with Python. Texts in Computational Science and Engineering. Springer Berlin Heidelberg, 2016. https://books.google.com.co/books?id=nUzADAAAQBAJ.
Nunez-Iglesias, J., S.Ø. van der Walt, and H. Dashnow. Elegant SciPy: The Art of Scientific Python. O’Reilly Media, 2017. https://books.google.com.co/books?id=4tOdjgEACAAJ.
Pitt-Francis, J., and J. Whiteley. Guide to Scientific Computing in C++. Undergraduate Topics in Computer Science. Springer International Publishing, 2018. https://books.google.com.co/books?id=e1FTDwAAQBAJ.
Širca, S., and M. Horvat. Computational Methods in Physics: Compendium for Students. Graduate Texts in Physics. Springer International Publishing, 2018. https://books.google.com.co/books?id=9XhhDwAAQBAJ.
Smith, E. Introduction to the Tools of Scientific Computing. Texts in Computational Science and Engineering. Springer International Publishing, 2020. https://books.google.com.co/books?id=B5YMEAAAQBAJ.
Stroustrup, B. Programming: Principles and Practice Using C++. Pearson Education, 2014. https://books.google.com.co/books?id=We21AwAAQBAJ.