arrays haskell repa

arrays - Rendimiento de ''Repa'' para la simulación planetaria



haskell (1)

La mayoría de los métodos de integración numérica de Euler sufren un error acumulativo de redondeo que eventualmente hará que la simulación "explote". Es posible que desee investigar métodos avanzados de integración numérica, como Runge-Kutta de 4º orden o predictor-corrector.

Otro lugar donde las simulaciones de problemas de n-cuerpos se vuelven pegajosas es cuando dos cuerpos se acercan mucho, como una luna con una órbita muy excéntrica alrededor de su planeta. Si se usan incrementos de tiempo fijos para la simulación, el error durante grandes cambios de velocidad angular puede conducir a errores de división por cero o división por valores muy pequeños que provocan la explosión de la simulación. El uso de una variable delta-t que depende de la velocidad angular puede ser beneficioso.

Estas sugerencias se basan en ejecutar muchas de esas simulaciones como un proyecto para un curso de física de pregrado que tomé en 1973, mientras probaba varios métodos de integración numérica. Los métodos correctores de predicción y de Runge-Kutta han existido desde los albores de la informática digital y hay varios libros disponibles. Ver, por ejemplo , Recetas numéricas: El arte de la computación científica por William H. Press, Brian P. Flannery, Saul A. Teukolsky y William T. Vetterling. (Cambridge University Press, 1989)

He escrito una simulación de los planetas exteriores del sistema solar usando el método repa Euler e implementado esto a) usando repa yb) usando yarr .

yarr parece funcionar aproximadamente x30 más rápido que repa .

Dado esto, ni siquiera intenté usar el paralelismo. ¿Hay algún problema obvio de rendimiento en mi código de repa ? El repositorio está en github . Puedo producir una versión reducida de repa si esto es útil, pero luego no obtendrá la comparación de rendimiento contra yarr .

Alternativamente, ¿cómo puedo depurar problemas de rendimiento en repa ?