Programación e Introducción a los Métodos Numéricos#

../../_images/Core-programming.jpg

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#

  1. 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++.

  2. Introducción básica a C++: Función main. Variables y tipos (int,   float, double). Operadores aritmeticos (+, -, *, ++, etc), lógicos (&&,   and, or), de comparación (==,!=). Precedencia de operadores. Condicional if , else . Aplicación: números pares, divisores. Introducción a loops.

  3. 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#

  1. 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.

  2. 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.

  3. Cuadraturas numéricas: Trapecio, Simpson, y Gauss. Errores matemáticos y errores numéricos.

Módulo III: Aplicaciones matriciales básicas y librerías#

  1. 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.

  2. Matrices representadas en arreglos: Colapso de índices. problemas matriciales y escalamiento.

  3. Array computing: Operaciones a nivel de coeficientes, std::valarray. Representación vectorial de las operaciones.

  4. Á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#

  1. 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.

  2. 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#

  1. Programación básica en python: Variables, selección, loops y funciones.

  2. Estructuras básicas de datos: Listas, arreglos y diccionarios.

Temas opcionales#

  1. (Opt) Librería estándar de algoritmos STL. Ejemplo: Ordenamiento de datos con la librería estándar, números aleatorios, contenedores.

  2. (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.

  3. (Opt) Introducción a la solución numérica de ecuaciones diferenciales parciales: Ecuación de Laplace y método de relajación.

  4. (Opt) Números aleatorios: Distribuciones, cálculo de integrales, métodos básicos de MonteCarlo.

  5. (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:

  1. Reservas usando el calendario de google

  2. Foro en moodle: micampus.unal.edu.co

  3. Email con la pregunta claramente detallada.

  4. 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#

https://iluvatar1.github.io/salafis/

Listas de videos:#

Complementary tools#

Bibliografía#