[완료] 수치연산/수치해석에 적합한 함수형언어

klara의 이미지

이전부터 함수형언어에 관심은 있었는데, 개인적으로 C/C++ 을 할줄 알다보니, 배워도 쓸데가 보이지 않아서 생각만하는데 그쳤었습니다.

그런데, 이번에 연구실에 들어가면서 앞으로 수치연산을 자주해야하게 되어서, 한번 이쪽으로 활용해볼까 하여 함수형언어를 배워볼려고 해서 한번 찾아보았는데, 생각보다 수치연산에 대해서 별로 히트하는 소개자료가 없더군요.

병렬처리나 클러스터 계산기를 이용할 만큼 엄청거대한 계산을 하는건 아니고, 짧게는 수분만에 끝나는 계산에서, 길어도 2,3일 정도에 끝나는 정도의 계산에 활용할려고 합니다.

구체적으로 반도체의 에너지 밴드 계산등입니다.

수치연산에 쓸려는 것이므로 속도도 물론 중요합니다만, C나 포트란 보다 코드작성이 쉽다면, 속도는 약간 포기해도 좋다고 생각합니다.
그렇다고 python/ruby같은 스크립트언어만큼이나 느린건 쓸수 없겠지만요...

그리고 수치연산/수치해석 관련으로 신뢰할수 있는 라이브러리가 풍부한 것도 중요하다고 생각합니다.

이쪽에 밝으신분계면, 수치연산쪽으로 활용가능한 함수형언어에 대해 조언, 추천, 소개등 해주시면 감사하겠습니다.

magingax의 이미지

수치해석쪽은 원래 파스칼에 라이브러리가 많아서..그걸 쓸수밖에 없는걸로 압니다.
LISP 쪽이 수치계산은 정확하게 나오긴 합니다. 속도도 빠르고.

LISP 사용자모임
http://cafe.naver.com/lisper
방송기술 개발업체
http://playhouseinc.co.kr

무한포옹의 이미지

-------------------------------
인생 뭐 있음!

-------------------------------
== warning 대부분 틀린 얘기입니다 warning ===

feanor의 이미지

함수형 언어인 OCaml을 수치해석에 사용하는 것에 집중한 책이 있는데 딱 찾으시는 것과 맞네요.

OCaml for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists/

imyejin의 이미지

특히나 OCaml은 금융권에서 이런 실무 시스템 구성에 이미 사용하고 있는 예가 있습니다. 제인 스트리트 캐피탈이 대표적인 예이고 (구글에서 Jane Street Capital 로 검색해 보시면 하위페이지에 OCaml이 뜰 정도고 구글 SoC처럼 함수형 언어 여름 코딩 프로젝트도 지원합니다). 그리고 금융상품 분석용 소프트웨어 패키지만 전문적으로 만들어 파는 LexiFi 라는 회사가 있는데요 http://www.lexifi.com/faq.html 여기 FAQ를 보시면 OCaml언어를 좀더 이런 문제에 쓰기 편하게 확장해서 만들었다고 도어 있으며 이 소프트웨어를 사용하는 대표적인 고객은 골드만 삭스입니다. 아마 골드만 삭스에서 일하던 사람들이 나와서 차린 회사 같기도 하고요.

수치연산 속도 자체보다 윈도우즈 모듈 배포가 더 중요한 경우에는 F#을 쪽으로 가시면 될겁니다. OCaml for scientists라른 책 지은 사람이 아마 F# for scientists라는 책도 지었을 거에요. 기존 라이브러리를 그대로 쓰되 분산 병렬화가 주된 작업이 될 것 같다면 Erlang을 적용해 보시는 것도 방법이 될 거고요. 그리고 메타프로그래밍을 지원하는 프로그래밍 언어 시스템(하스켈에서 템플릿 하스켈 기능이나 ML 계열 언어에서는 MetaOCaml, 그리고 전통적으로는 untyped긴 하지만 리습 매크로가 있습니다)을 사용해서 문제별로 병목이 될만한 코어 루틴을 컴파일 타임에 최적화하는 방법을 쓰거나, 정말 하드코어하게 들어가자면 다루는 문제 영역에 맞는 DSL컴파일러나 코드 제너레이터를 함수형 언어로 직접 만들어 쓰는 방법까지 다양하게 있을 수 있습니다.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

ifree의 이미지

이런 주제로도 책도 쓰고 팔리기도 하는군요.
부럽습니다.

imyejin의 이미지

책을 쓰고 팔리는 것 뿐 아니라 금융권 등에서 함수형 언어로 벌어먹고 사는 사람들도 있고 함수형 언어를 프로젝트를 지원하는 회사까지 있을 정도니까 많이 부럽죠.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

M.W.Park의 이미지

R 도 있습니다.
-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

winterprincess의 이미지

코볼트를 많이 사용하더군요...

오직 겨울 공주를 위하여.

-----------------------------------------------------------------------------------

오직 겨울 공주를 위하여.

klara의 이미지

제가 아는게 그리 많지 않아서 OCaml을 기준으로 다른 언어와 비교해보았는데, 우선 속도면에서는 'C에 근접한다'고 할정도로 전반적으로 빠르다는 평가가 많더군요.
그리고, C/C++에 익숙한 저에게는 강한 타입검사를 하는 OCaml이 쓰기 편해보였습니다.
라이브러리는, 찾아보니 GSL에 대한 인터페이스도 있고, 선형대수만이라면 LAPACK 인터페이스도 있고요.

일단은 OCaml을 공부해볼려고 합니다.
답변 달아주신 분들 모두 감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.