¿OCaml es bueno para el análisis numérico? [cerrado]

10

Actualmente estoy usando C y algunos FORTRAN para resolver numéricamente sistemas de ecuaciones diferenciales.

Estoy un poco harto de estos dos lenguajes, pero necesito tener un código (bastante) eficiente ... Estoy pensando en cambiar a OCaml.

¿Vale la pena?

Eelvex
fuente
44
Recomiendo encarecidamente SciPy: es gratis, se parece a Matlab (pero es Python) y solo requiere unas pocas líneas para hacerlo. scipy.org/Cookbook/…
Trabajo
1
MATLAB La solución numérica de sistemas de ecuaciones diferenciales es un problema resuelto, y lo ha sido durante bastante tiempo. Si su objetivo es reducir sus números, use las herramientas que se han desarrollado durante las últimas décadas para lograrlo. No reinventes la rueda, no importa lo divertida que sea. Se ahorrará mucho tiempo y molestias.
John R. Strohm

Respuestas:

7

En primer lugar, quiero hacer la afirmación inusual de que para los cálculos numéricos, los lenguajes de alto nivel son mucho más útiles a largo plazo que los lenguajes de bajo nivel. Permítanme citar libremente a un investigador del Instituto Fraunhofer que trabaja en simulaciones numéricas utilizadas en pronósticos meteorológicos.

En la última década, las CPU se volvieron 1000 veces más rápidas, mientras que los algoritmos se volvieron 1000 * 1000 más rápidos. Esto significa que los algoritmos de hoy que se ejecutan en las CPU de ayer vencerán a los algoritmos de ayer que se ejecutan en las CPU de hoy en un factor de 1000.

Obviamente, hay muchos más parámetros a tener en cuenta como la velocidad de la CPU y los algoritmos, como discos o RAM, pero esa declaración nos ayuda a entender que, si elige un lenguaje de bajo nivel, se enfoca en el factor incorrecto (1000 en lugar de 1000 * 1000).

Por supuesto, dado cualquier algoritmo numérico específico , uno puede esperar que C o Fortran superen a OCaml o Common Lisp por un factor importante (en realidad no ese). Pero si realmente está interesado en problemas numéricos y está dispuesto a mejorar los algoritmos, debe elegir un lenguaje de alto nivel que le permita expresar sus ideas a un alto nivel y mejorar fácilmente los algoritmos.

Como nota al margen, si considera escribir código numérico en OCaml, definitivamente debe saber cómo OCaml pasa los parámetros a funciones, funciones en línea y flotantes unbox. Todo esto se detalla en las notas de Xavier Leroy .

usuario40989
fuente
Gracias por la respuesta. Desde entonces he recurrido a J y me encanta. OCaml es un segundo cercano para mí.
Eelvex
6

En to solve numerically systems of differential equationsprimer lugar, necesitará bibliotecas adecuadas. Entonces, una verificación obligatoria es: ¿los xadmite un lenguaje de programación ?

En lo personal me gusta escribir código nivel más alto que Co Fortran, por lo tanto he utilizado Matlab, Octave, numpy\scipy.

comer
fuente
2

Me gustó OCaml, al menos hasta que miré la programación multiproceso.

dan_waterworth
fuente