Czy OCaml nadaje się do analizy numerycznej? [Zamknięte]

10

Obecnie używam C i niektórych FORTRANów do rozwiązywania układów liczbowych równań różniczkowych.

Mam trochę dość tych dwóch języków, ale muszę mieć trochę (raczej) wydajnego kodu ... Zastanawiam się nad przejściem na OCaml.

Czy warto?

Eelvex
źródło
4
Bardzo polecam SciPy - jest darmowy, wygląda jak Matlab (ale jest Python) i zajmuje tylko kilka wierszy, aby to zrobić! scipy.org/Cookbook/…
Job
1
MATLAB. Numeryczne rozwiązanie układów równań różniczkowych jest rozwiązanym problemem i już od dłuższego czasu. Jeśli Twoim celem jest zmniejszenie liczby, skorzystaj z narzędzi opracowanych w ciągu ostatnich kilku dekad, aby to zrobić. Nie wymyślaj na nowo koła, bez względu na to, jak fajnie by to było. Zaoszczędzisz sobie dużo czasu i irytacji.
John R. Strohm

Odpowiedzi:

7

Przede wszystkim chcę wyrazić niezwykłe stwierdzenie, że w obliczeniach numerycznych języki wysokiego poziomu są znacznie bardziej przydatne na dłuższą metę niż języki niskiego poziomu. Pozwolę sobie swobodnie zacytować badacza z Instytutu Fraunhofera pracującego w symulacjach numerycznych wykorzystywanych w prognozach pogody.

W ostatniej dekadzie procesory stały się 1000 razy szybsze, a algorytmy 1000 * 1000 szybciej. Oznacza to, że dzisiejsze algorytmy działające na wczorajszych procesorach pokonają wczorajsze algorytmy działające na dzisiejszych procesorach 1000 razy.

Oczywiście istnieje wiele innych parametrów, które należy wziąć pod uwagę, takich jak szybkość procesora i algorytmy, takie jak dyski lub pamięć RAM, ale to stwierdzenie pomaga nam zrozumieć, że jeśli wybierzesz język niskiego poziomu, skupisz się na niewłaściwym współczynniku (1000 zamiast 1000 * 1000).

Oczywiście, biorąc pod uwagę dowolny konkretny algorytm numeryczny , można oczekiwać, że C lub Fortran pobiją OCaml lub Common Lisp o (właściwie nie tak) duży czynnik. Ale jeśli faktycznie interesują Cię problemy numeryczne i chcesz ulepszyć algorytmy, powinieneś wybrać język wysokiego poziomu, który pozwoli Ci wyrazić swoje pomysły na wysokim poziomie i łatwo ulepszyć algorytmy.

Na marginesie, jeśli zastanawiasz się nad pisaniem kodu numerycznego w OCaml, powinieneś zdecydowanie wiedzieć o tym, jak OCaml przekazuje parametry do funkcji, funkcji inline i unbox unosi się. Wszystko to szczegółowo opisano w notatkach Xaviera Leroya .

użytkownik40989
źródło
Dziękuję za odpowiedź. Od tego czasu uciekłem się do J i uwielbiam to. OCaml jest dla mnie bardzo blisko.
Eelvex
6

Do tego to solve numerically systems of differential equationspotrzebne będą przede wszystkim odpowiednie biblioteki. Obowiązkowa kontrola to: czy język programowania xje obsługuje.

Osobiście chciałbym napisać kod wyższym poziomie niż Calbo Fortran, więc użyłem Matlab, Octave, numpy\scipy.

jeść
źródło
2

Lubiłem OCaml, przynajmniej dopóki nie spojrzałem na programowanie wielowątkowe.

dan_waterworth
źródło