CursosEmpresasBlogLiveConfPrecios

Solución Numérica y Exacta de Ecuaciones Diferenciales

Clase 7 de 12 • Taller de Aplicación de Modelos Numéricos

Contenido del curso

Modelos matemáticos

  • 1
    Modelos Matemáticos: Conceptos Básicos y Aplicaciones

    Modelos Matemáticos: Conceptos Básicos y Aplicaciones

    04:24 min
  • 2
    Modelado de Sistemas Dinámicos con Funciones Matemáticas y Python

    Modelado de Sistemas Dinámicos con Funciones Matemáticas y Python

    04:29 min
  • 3
    Ecuaciones Diferenciales Ordinarias: Modelos de Epidemias

    Ecuaciones Diferenciales Ordinarias: Modelos de Epidemias

    05:09 min
  • 4
    Resolución de EDOs para Modelar Epidemias con Python

    Resolución de EDOs para Modelar Epidemias con Python

    03:24 min
  • 5
    Convección y Sistemas Dinámicos: El Modelo de Lorenz

    Convección y Sistemas Dinámicos: El Modelo de Lorenz

    04:05 min

Modelos númericos

  • 6
    Método de Euler: Solución Numérica de Ecuaciones Diferenciales

    Método de Euler: Solución Numérica de Ecuaciones Diferenciales

    03:19 min
  • 7
    Solución Numérica y Exacta de Ecuaciones Diferenciales

    Solución Numérica y Exacta de Ecuaciones Diferenciales

    Viendo ahora

Sistemas caóticos

  • 8
    Comparación de Métodos: Runge-Kutta 4 vs Euler en Ecuaciones Diferenciales

    Comparación de Métodos: Runge-Kutta 4 vs Euler en Ecuaciones Diferenciales

    02:33 min
  • 9
    Resolución del Sistema de Lorenz con Método RK4

    Resolución del Sistema de Lorenz con Método RK4

    03:32 min

Modelos epidemiológicos

  • 10
    Modelo SIR: Simulación Numérica de Epidemias con RK4

    Modelo SIR: Simulación Numérica de Epidemias con RK4

    03:39 min
  • 11
    Modelos SIR y el Número Básico de Reproducción (R₀)

    Modelos SIR y el Número Básico de Reproducción (R₀)

    02:42 min
  • 12
    Modelado Epidemiológico con SIRD y Algoritmo de Evolución Diferencial

    Modelado Epidemiológico con SIRD y Algoritmo de Evolución Diferencial

    04:41 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

      En la clase pasada resolvimos una ecuación diferencial muy sencilla con el método de Euler, pero mencionamos también que esa misma ecuación diferencial se puede resolver con métodos del cálculo y el álgebra tradicionales, por ejemplo, por medio de separación de variables, para obtener:

      CleanShot 2020-07-23 at 01.25.30.png

      Aquí podemos evidenciar la diferencia substancial entre una solución numérica y una solución exacta.

      1. Por un lado, la solución exacta se obtiene siempre en términos de una función matemática que describe exactamente la relación entre las variables t e y. Esta función puede calcularse para cualquier valor del tiempo.
      2. Por otro lado, la solución numérica se obtiene como una lista o una tabla de valores discretos que permite conocer de forma aproximada la relación entre variables solamente para ciertos valores del tiempo (valores separados por un intervalo de tiempo que denotamos como 𝚫t.

      Sin embargo, siempre es posible convertir la solución exacta en una tabla de valores discretos (como hicimos en el notebook de la clase anterior) con la diferencia de que esta tabla contiene valores exactos del problema y no solamente aproximaciones, así podemos comparar al mismo nivel ambas soluciones.

      image35.png

      Como ves en la imagen anterior (que es un extracto de la última celda del notebook de la clase pasada), puedes hacer un print() de cada lista de valores discretos del tiempo, que denotamos por tₛ, y de las soluciones numérica y exacta denotadas por Yₛ y exact_sol(tₛ), respectivamente. De esta manera, podemos ver ambos tipos de soluciones a un sistema dinámico al mismo nivel pero con dos grandes advertencias:

      1. Los métodos numéricos siempre tienen un error asociado por el carácter finito del intervalo de tiempo. Este error tiende a cero a medida que usamos intervalos 𝚫t más pequeños.
      2. Entre más pequeño es el intervalo de tiempo, más tiempo de cómputo se requiere para obtener la solución hasta un valor deseado.

      Cuando hablamos de métodos numéricos, debemos siempre jugar con un balance entre rapidez y precisión. Si queremos una solución rápida, el error será grande, pero si queremos una solución muy precisa, entonces tomará más tiempo calcularla. Recordemos que en general consideramos una ecuación diferencial del tipo:

      CleanShot 2020-07-23 at 01.28.21.png

      y podemos definir el Error de Truncamiento Local (ETL) como el error que se genera en una sola iteración para un tiempo tᵢ . Además, después de un cierto número de iteraciones el error vendrá acumulado y a este error total se le denomina Error de Truncamiento Global (ETG). Para el caso del método de Euler, el ETL se puede aproximar por la fórmula:

      CleanShot 2020-07-23 at 01.29.45.png

      No te preocupes por el origen de esta fórmula, este es un truco que sale de varias cuentas matemáticas y por ahora no nos interesa conocerlas en detalle. Ahora, de la fórmula anterior podemos aproximar el ETG(Tᵢ) considerando que se deben sumar todos los ETLs de las iteraciones previas al tiempo tᵢ. Entonces:

      CleanShot 2020-07-23 at 01.34.52.png

      Cada término con f(t,y) en general tiene un valor diferente para tiempos diferentes pero podemos tomar el máximo de todos esos como max(f), considerar que existen i términos en la suma y darnos cuenta de que la siguiente desigualdad es verdadera:

      CleanShot 2020-07-23 at 01.38.59.png

      Sabemos que para cada paso de tiempo tᵢ = i𝚫t, y por simplicidad llamaremos al máximo de los valores max(f(t, y)) = M, entonces:

      CleanShot 2020-07-23 at 01.43.23.png

      Estas fórmulas, aunque son lo que uno normalmente encuentra en los libros, son solo cotas superiores que a menudo sobreestiman el error real en una simulación dada. En Python podemos calcular el ETG real del método de Euler para nuestro ejercicio previo así:

      image34.png
      image32.png

      Donde local_error es un array() que guarda el error acumulado para cada simulación con un 𝚫t específico, es decir, en este caso ese array guarda todos los ETG. La gráfica de la derecha muestra el resultado de graficar el ETG versus el intervalo 𝚫t, colocando ambas variables en escala logarítmica. Los puntos rojos indican la parte de los datos donde se alcanza a percibir una tendencia lineal. Ahora, podemos hacer una regresión lineal simple con Scikit Learn para verificar que los datos en rojo realmente describen una tendencia lineal:

      image33.png

      Y vemos que el score de correlación es superior a 0.99, lo que indica que efectivamente los datos describen una relación lineal. El hecho de hacer una regresión con el logaritmo de los datos sucede porque en general suponemos que el error acumulado y el intervalo de tiempo tienen una relación de la forma:

      CleanShot 2020-07-23 at 01.50.39.png

      Entonces, al usar propiedades de los logaritmos resulta que:

      CleanShot 2020-07-23 at 01.51.13.png

      Que se parece a la ecuación de una recta y = mx + b , donde y = log(ETG), m = n, x = log(𝚫t) y b = log(K), siendo K y n valores constantes. A una relación de ese tipo se le conoce como una ley de potencias, y el propósito de esta relación es evidenciar los siguientes hechos:

      1. Entre mayor es el número n, menor será el error, ya que 𝚫tⁿ < 𝚫t siempre que n > 1
      2. Entre menor sea K, menor será log(K) y por lo tanto menor será el error.

      En conclusión, un método numérico tendrá errores cada vez menores en la medida que n sea grande y K sea pequeño.

      En la próxima clase veremos un método cuyo ETG en general es mucho menor que el generado por el método de Euler. El notebook de esta clase lo puedes encontrar en este link.

      Comentarios

        Lorena Mondragón

        Lorena Mondragón

        student•
        hace 5 años
        211749411_2561179924185039_8398860255521735534_n.jpg
        Roger Christian Cansaya Olazabal

        Roger Christian Cansaya Olazabal

        student•
        hace 5 años

        La ultima parte no quería salir de regresión lineal no quería salir pero por alguna razón fue necesario hacer una modificación, demasiados decimales me parece.

        import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression def exact_sol(ts): return np.exp(ts) def num_sol(ts, dt, tf=10, y0=1): ys = [y0] ts = [0] num_steps = int(tf/dt) for _ in range(num_steps): ts.append(ts[-1]+dt) ys.append((1+dt)*ys[-1]) return ts, ys if __name__=='__main__': ys = [1] # creamos un areglo inicial de valores en y ts = [0] # creamos un areglo inicial de valores en t dt = 0.01 num_steps = 1000 for i in range(num_steps): ts.append(ts[-1]+dt) # calculamos el proximo t y lo agregamos al arreglo ys.append((1+dt)*ys[-1]) # calculamos el proximo y y lo agregamos al arreglo #print (ts) #print(ys) plt.figure(figsize=(15,8)) plt.plot(ts,ys) plt.xticks(fontsize=20) plt.yticks(fontsize=20) #plt.show() plt.figure(figsize=(12,6)) for dt in [0.1, 0.05, 0.01]: ts, ys = num_sol(ts, dt) plt.plot(ts, ys, '--', label='dt = {}'.format(dt)) plt.plot(ts,exact_sol(ts), label='exact') plt.xticks(fontsize=20) plt.yticks(fontsize=20) plt.legend(fontsize=20) #plt.show() plot_text_size = 20 local_error = [] dt_arr = [] dt_arr = np.arange(0.0001, 0.5, 0.0001) for dt in dt_arr: ts, ys_num = num_sol(ts, dt=dt) ys_ex = exact_sol(ts) local_error.append(np.abs(ys_num[-1] - ys_ex[-1])) plt.figure(figsize=(10,8)) plt.xscale('log') plt.yscale('log') plt.plot(dt_arr,local_error) plt.plot(dt_arr[:-4900], local_error[:-4900],'-*r') plt.xticks(fontsize=plot_text_size) plt.yticks(fontsize=plot_text_size) plt.xlabel(r'$(\Delta t)$',fontsize=plot_text_size) plt.ylabel(r'$(\Delta E)$', fontsize=plot_text_size) local_error = np.array(local_error) x = np.log(dt_arr[:-4900]) x = np.log(dt_arr[:-4900]).reshape(-1,1) y = np.log(local_error[:-4900]) #reg = LinearRegression().fit(x, y) reg = LinearRegression(fit_intercept=True, normalize=True, copy_X=True, n_jobs=None).fit(x.astype(np.float32), y) print(reg.score(x,y)) print(reg.coef_) fig, ax = plt.subplots(1, 1, figsize=(7,7), dpi=120) ax.plot(x, y, label='Regresion Lineal', marker='o', linestyle='dashed') ax.legend() plt.show() RPTA: λ py metodo_euler.py 0.9999677987793394 [0.989571]
        error euler.png
        Euler_Lineal.png
          Eduardo Monzón

          Eduardo Monzón

          student•
          hace 3 años

          Gracias por el aporte.

        Elmer Gustavo Pú Tzunux

        Elmer Gustavo Pú Tzunux

        student•
        hace 5 años

        Buen tema Gracias!!