Ich verwende derzeit C und FORTRAN, um numerische Differentialgleichungssysteme zu lösen.
Ich habe ein bisschen genug von diesen beiden Sprachen, aber ich brauche einen (ziemlich) effizienten Code ... Ich denke darüber nach, zu OCaml zu wechseln.
Lohnt es sich?
Antworten:
Die Leute von Jane Street Capital sind sich sicher. Sie hielten 2009 auf der CMU einen Vortrag über die Verwendung von OCaml.
Der einzige Nachteil, den ich mir vorstellen kann, ist, dass Matrizen keine erstklassigen Bürger sind.
quelle
Zunächst möchte ich die ungewöhnliche Aussage treffen, dass Hochsprachen für numerische Berechnungen auf lange Sicht viel nützlicher sind als Niedrigsprachen. Lassen Sie mich einen Forscher des Fraunhofer-Instituts zitieren, der an numerischen Simulationen für Wettervorhersagen arbeitet.
Natürlich müssen viel mehr Parameter als CPU-Geschwindigkeit und Algorithmen wie Festplatten oder RAM berücksichtigt werden, aber diese Aussage hilft uns zu verstehen, dass Sie sich bei der Auswahl einer Sprache auf niedriger Ebene auf den falschen Faktor konzentrieren (1000 statt 1000 * 1000).
Natürlich kann man bei einem bestimmten numerischen Algorithmus erwarten, dass C oder Fortran OCaml oder Common Lisp um einen (eigentlich nicht diesen) großen Faktor schlagen. Wenn Sie jedoch tatsächlich an numerischen Problemen interessiert sind und bereit sind, Algorithmen zu verbessern, sollten Sie eine Hochsprache auswählen, mit der Sie Ihre Ideen auf hohem Niveau ausdrücken und Algorithmen auf einfache Weise verbessern können.
Wenn Sie in Betracht ziehen, numerischen Code in OCaml zu schreiben, sollten Sie unbedingt wissen, wie OCaml Parameter an Funktionen, Inline-Funktionen und Unbox-Floats übergibt. All dies wird in den Notizen von Xavier Leroy detailliert beschrieben .
quelle
Dazu
to solve numerically systems of differential equations
benötigen Sie zunächst die richtigen Bibliotheken. Eine obligatorische Überprüfung lautet also:x
Unterstützt eine Programmiersprache sie?Persönlich mag ich schreiben Code höher als
C
oderFortran
, so habe ich verwendetMatlab
,Octave
,numpy\scipy
.quelle
Ich mochte OCaml, zumindest bis ich mich mit Multithread-Programmierung befasste.
quelle