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.
źródło
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.
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 .
źródło
Do tego
to solve numerically systems of differential equations
potrzebne będą przede wszystkim odpowiednie biblioteki. Obowiązkowa kontrola to: czy język programowaniax
je obsługuje.Osobiście chciałbym napisać kod wyższym poziomie niż
C
alboFortran
, więc użyłemMatlab
,Octave
,numpy\scipy
.źródło
Lubiłem OCaml, przynajmniej dopóki nie spojrzałem na programowanie wielowątkowe.
źródło