¿Cómo simulo el movimiento de una ola en Valparaíso con ecuaciones diferenciales y Python?
Hola, necesito resolver esta ecuación diferencial para un proyecto de física: con . Quiero graficar la solución para entender cómo se comporta una ola en la playa de Reñaca. ¿Alguien me puede ayudar con el código en Python? Lo intenté con Euler pero me sale un gráfico raro que no se parece a las olas que veo cuando voy a Valparaíso. ¿Qué estoy haciendo mal?
¡Hola @CamiloValpo! Tu ecuación es un oscilador amortiguado forzado. El problema no es tu código, sino el paso de tiempo . Prueba con en lugar de . Las olas reales tienen frecuencias altas que el método de Euler no captura bien con pasos grandes. Aquí tienes un ejemplo completo:
@ProfMatías a dit: ¡Hola @CamiloValpo! Tu ecuación es un oscilador amortiguado forzado...
@ProfMatías probé con pero ahora el gráfico sale todo recto como una tabla de madera. ¿Será que mi condición inicial está mal? Puse pero en la playa las olas empiezan en 0, ¿no?
@CamiloValpo a dit: @ProfMatías probé con pero ahora el gráfico sale todo recto...
@CamiloValpo tu condición inicial está bien para modelar una ola que parte desde cierta altura. Pero el problema es que tu ecuación tiene un término de amortiguamiento () que hace que la solución tienda a cero rápidamente. Prueba cambiando el coeficiente a para ver olas más realistas. Aquí el código mejorado:
@ProfMatías a dit: @CamiloValpo tu condición inicial está bien...
¿Y si usamos el método de Runge-Kutta en lugar de Euler? En la universidad nos enseñaron que es más preciso. ¿Alguien tiene un ejemplo con scipy.integrate.odeint? Yo lo intenté pero me sale error de dimensión.
@EstebanFísica a dit: ¿Y si usamos el método de Runge-Kutta...
@EstebanFísica ¡Excelente idea! El método de Runge-Kutta (RK4) es mucho más estable. Aquí tienes el código completo usando scipy. Fíjate que definimos la función correctamente y usamos como array:
@ProfMatías a dit: @EstebanFísica ¡Excelente idea! El método de Runge-Kutta...
@ProfMatías @EstebanFísica ¡Funcionó! Ahora el gráfico se parece a las olas de Reñaca. Pero... ¿cómo elijo el valor óptimo de ? Si pongo sale bien, pero con se deforma todo.
@CamiloValpo a dit: @ProfMatías @EstebanFísica ¡Funcionó! Ahora el gráfico se parece...
@CamiloValpo el valor de depende de la frecuencia del fenómeno. Para olas con período de 5 segundos, es seguro. Regla práctica: debe ser al menos 10 veces menor que el período más pequeño que quieres capturar. Prueba con y verás que mejora aún más la precisión.
@ProfMatías a dit: @CamiloValpo el valor de depende de la frecuencia...
¿Y si queremos simular el movimiento de un bus en la Alameda? ¿La misma ecuación sirve o necesitamos cambiar algo? Porque en la PAES suelen poner problemas de movimiento rectilíneo...
@SofíaFísica a dit: ¿Y si queremos simular el movimiento de un bus en la Alameda...
@SofíaFísica para un bus en la Alameda necesitas una ecuación de segundo orden: . Esto se reduce a un sistema de dos EDOs de primer orden. Te muestro cómo adaptar el código:
@ProfMatías a dit: @SofíaFísica para un bus en la Alameda necesitas...
@ProfMatías excelente respuesta. Solo añadir que para problemas de PAES donde piden la posición en , el método de Euler con suele ser suficiente y más rápido de calcular a mano. Pero para simulaciones reales, RK4 es la mejor opción.
@DiegoIngeniero a dit: @ProfMatías excelente respuesta. Solo añadir que para problemas de PAES...
¡Gracias a todos! Una última duda: ¿cómo sé si mi simulación es correcta? ¿Hay alguna forma de validar los resultados? Porque si pongo números al azar, el gráfico también sale bonito...
@CamiloValpo a dit: ¡Gracias a todos! Una última duda: ¿cómo sé si mi simulación es correcta?
@CamiloValpo ¡Buena pregunta! La validación es clave. Compara tu solución numérica con la solución analítica cuando exista (como en ). También puedes probar con valores conocidos: si , la solución debe ser una sinusoide pura. Y siempre grafica la solución con diferentes para ver convergencia.
@ProfMatías a dit: @CamiloValpo ¡Buena pregunta! La validación es clave...
@CamiloValpo si tu simulación predice que la ola de Reñaca llega hasta el Cerro Alegre en Valparaíso, ¡algo está mal! Pero en serio, @ProfMatías te dio los tips perfectos para validar.
@ProfMatías a dit: @CamiloValpo ¡Buena pregunta! La validación es clave...
¿Y si quiero simular la temperatura en el desierto de Atacama? ¿La misma ecuación sirve o necesito una ecuación de calor?
@ValentinaQuímica a dit: ¿Y si quiero simular la temperatura en el desierto de Atacama...
@ValentinaQuímica para temperatura necesitas la ecuación del calor, que es una EDP (ecuación diferencial parcial). Pero si modelas la temperatura en un punto fijo, puedes usar una EDO como . Te dejo un ejemplo con datos reales de Calama.
¡@CamiloValpo, tu ola se parece más a un tsunami de Antofagasta que a las olas tranquilas de Reñaca! Jajaja. Pero en serio, revisa el código porque el método de Euler puro es como usar un metro de 1 metro para medir la altura de las olas... ¡te va a dar errores gigantescos!
Si @CamiloValpo sigue con esto, va a terminar modelando el oleaje de la playa de Concón... ¡y después le van a pedir que prediga el precio del litro de gasolina en Antofagasta! Jajaja. Pero en serio, el código de @ProfMatías es la solución.
¿Alguien me puede pasar el código completo para el problema de la ola? Lo necesito para mañana y no me queda claro cómo estructurar la función. ¡Ayuda!
@IgnacioIng a dit: ¿Alguien me puede pasar el código completo para el problema de la ola?
@IgnacioIng aquí tienes el código completo y listo para copiar-pegar. Incluye la función, la integración con RK4 y la graficación. Solo cambia los parámetros para ajustarlo a tu ecuación:
@ProfMatías a dit: @IgnacioIng aquí tienes el código completo...
¡@ProfMatías eres un crack! Con este código logré que mi simulación de olas en Reñaca se vea casi como las fotos que subo a Instagram. Gracias por la paciencia y por los tips de validación.
@ProfMatías a dit: @IgnacioIng aquí tienes el código completo...
Ahora @CamiloValpo solo falta que simules el precio de un completo en el Persa Bio-Bío usando ecuaciones diferenciales... ¡y después nos avisas si sube o baja! Jajaja
@ProfMatías a dit: @IgnacioIng aquí tienes el código completo...
@ProfMatías ¿Y si quiero simular el movimiento de un péndulo en Torres del Paine? ¿Necesito cambiar completamente el código o puedo adaptar el de las olas?
@EstebanFísica a dit: @ProfMatías ¿Y si quiero simular el movimiento de un péndulo en Torres del Paine?
@EstebanFísica para un péndulo necesitas un sistema de dos EDOs: y . Aquí te dejo el código adaptado. ¡Cuidado con las unidades! Usa y en metros.
@ProfMatías a dit: @EstebanFísica para un péndulo necesitas un sistema de dos EDOs...
@ProfMatías excelente adaptación. Solo añadir que para ángulos pequeños puedes aproximar y reducirlo a un oscilador armónico simple. Eso simplifica mucho el código y es lo que suelen pedir en PAES.
@DiegoIngeniero a dit: @ProfMatías excelente adaptación. Solo añadir que para ángulos pequeños...
¡Gracias por todo! Ahora entiendo por qué en la PAES a veces piden resolver con métodos numéricos. Con estos ejemplos me siento mucho más preparado para el examen.