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?
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?
Odpowiedzi:
Ludzie w Jane Street Capital z pewnością tak myślą. W 2009 roku rozmawiali na CMU o używaniu OCaml.
Jedyną wadą, o której mogę myśleć, jest to, że matryce nie są obywatelami pierwszej klasy.
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 .
Do tego to solve numerically systems of differential equations
potrzebne będą przede wszystkim odpowiednie biblioteki. Obowiązkowa kontrola to: czy język programowania x
je obsługuje.
Osobiście chciałbym napisać kod wyższym poziomie niż C
albo Fortran
, więc użyłem Matlab
, Octave
, numpy\scipy
.
Lubiłem OCaml, przynajmniej dopóki nie spojrzałem na programowanie wielowątkowe.