Научная математика с функциональными языками?

Если ваша банка находится на пути к классам:

InputStream is = YourClass.class.getResourceAsStream("1.txt");

Если она не на пути к классам, вы можете получить к ней доступ через:

URL url = new URL("jar:file:/absolute/location/of/yourJar.jar!/1.txt");
InputStream is = url.openStream();
26
задан Joonas Pulakka 9 June 2009 в 07:14
поделиться

7 ответов

В hackageDB есть библиотека Haskell для числовых данных: hmatrix . Он основан на LAPACK, BLAS и GSL (Научная библиотека GNU).

Но вы должны иметь в виду, что императивные алгоритмы могут быть легко переведены на чисто функциональные языки с использованием монад (точнее, преобразователей состояний). Фактически, любая эффективная реализация на месте обычно должна использовать такой механизм для предоставления изменяемых переменных в чисто функциональных языках.

Что касается следования функциональному стилю, во многих случаях это невозможно. Для многих проблем не известны (эффективные) функциональные подходы. Конечно, можно заставить такие алгоритмы работать, например, в Haskell, но они победили » Они выглядят сильно иначе, чем если бы они были написаны на Matlab, Fortran или C.

РЕДАКТИРОВАТЬ:

Это как очевидная несовместимость, так и проблема, которая была первой:

  1. Эффективность численные алгоритмы обычно требуют изменяемых данных. Хотя это возможно в чисто функциональной среде, это не так просто, как в императивных языках. Но две вычислительные модели совершенно эквивалентны.
  2. Базовая машина (например, набор команд) всегда была и остается императивной, за очень немногими исключениями (!). Алгоритмы с императивным кодом легче анализировать и оптимизировать, учитывая способ моделирования реальной машины.
  3. Хотя лежащая в основе математика позволяет относительно легко выводить функциональные решения, вы выиграли. t получить эффективный алгоритм (как и в случае получения императивных решений непосредственно из математики). Поскольку большая часть усилий была и остается направленной на императивные решения, функциональные аналоги просто неизвестны. Под функциональными аналогами я подразумеваю код, который должным образом выражает функциональное предназначение и стиль.
  4. Существует довольно много императивного кода, который можно использовать повторно. Многое из этого можно преобразовать в функциональный язык с помощью преобразователей состояния, хотя это все равно будет выглядеть императивным.

Я действительно думаю, что чисто функциональный язык, такой как Haskell, может быть полезен для алгоритмов кодирования: можно унифицировать математическое описание, алгоритм самого себя и своего рода типо-ориентированное доказательство (то есть с использованием изоморфизма Карри-Ховарда ) в одном и том же фрагменте кода.

Поскольку большая часть усилий была и остается направленной на императивные решения, функциональные аналоги просто неизвестны. Под функциональными аналогами я подразумеваю код, который должным образом выражает функциональное предназначение и стиль.
  • Существует довольно много императивного кода, который можно использовать повторно. Многое из этого можно преобразовать в функциональный язык с помощью преобразователей состояния, хотя это все равно будет выглядеть императивным.
  • Я действительно думаю, что чисто функциональный язык, такой как Haskell, может быть полезен для алгоритмов кодирования: можно унифицировать математическое описание, алгоритм самого себя и своего рода типо-ориентированное доказательство (то есть с использованием изоморфизма Карри-Ховарда ) в одном и том же фрагменте кода.

    Поскольку большая часть усилий была и остается направленной на императивные решения, функциональные аналоги просто неизвестны. Под функциональными аналогами я подразумеваю код, который должным образом выражает функциональное предназначение и стиль.
  • Существует довольно много императивного кода, который можно использовать повторно. Многое из этого можно преобразовать в функциональный язык с помощью преобразователей состояния, хотя это все равно будет выглядеть императивным.
  • Я действительно думаю, что чисто функциональный язык, такой как Haskell, может быть полезен для алгоритмов кодирования: можно унифицировать математическое описание, алгоритм самого себя и своего рода типо-ориентированное доказательство (то есть с использованием изоморфизма Карри-Ховарда ) в одном и том же фрагменте кода.

    Под функциональными аналогами я подразумеваю код, который должным образом выражает функциональное предназначение и стиль.
  • Существует довольно много императивного кода, который можно использовать повторно. Многое из этого можно преобразовать в функциональный язык с помощью преобразователей состояния, хотя это все равно будет выглядеть императивным.
  • Я действительно думаю, что чисто функциональный язык, такой как Haskell, может быть полезен для алгоритмов кодирования: можно унифицировать математическое описание, алгоритм самого себя и своего рода типо-ориентированное доказательство (то есть с использованием изоморфизма Карри-Ховарда ) в одном и том же фрагменте кода.

    Под функциональными аналогами я подразумеваю код, который должным образом выражает функциональное предназначение и стиль.
  • Существует довольно много императивного кода, который можно использовать повторно. Многое из этого можно преобразовать в функциональный язык с помощью преобразователей состояния, хотя это все равно будет выглядеть императивным.
  • Я действительно думаю, что чисто функциональный язык, такой как Haskell, может быть полезен для алгоритмов кодирования: можно унифицировать математическое описание, алгоритм самого себя и своего рода типо-ориентированное доказательство (то есть с использованием изоморфизма Карри-Ховарда ) в одном и том же фрагменте кода.

    24
    ответ дан 28 November 2019 в 07:04
    поделиться

    Я бы использовал LAPACK как черный ящик из функционального языка, а не пытался его переписать. LAPACK был протестирован, настроен, оптимизирован и т.д. на протяжении десятилетий некоторыми чрезвычайно умными людьми. Я бы его не трогал.

    7
    ответ дан 28 November 2019 в 07:04
    поделиться

    В духе превосходной Структура и интерпретация компьютерных программ , существует также Структура и интерпретация классической механики . В этой книге Scheme используется для пояснения множества нечетких математических обозначений, используемых в вариационном подходе к механике.

    Краеугольным камнем книги является пакет scmutils , который включает функциональный подход ко многим вычислительным вычислениям. такие задачи, как интеграция и минимизация.

    5
    ответ дан 28 November 2019 в 07:04
    поделиться

    Некоторые системы компьютерной алгебры (например, Maxima) внутренне используют языки на основе LISP для представления символьных вычислений / синтаксических деревьев.

    Примеры математических, функциональных языков:

    http: / /en.wikipedia.org/wiki/J_(programming_language)

    http://en.wikipedia.org/wiki/K_(programming_language)

    В любом случае есть несколько математических задач и алгоритмов, которые невозможно сформулировать хорошо или эффективно в функциональном стиле. Эффективная реализация всегда будет обязательной. Пример: Сито Эратосфена

    4
    ответ дан 28 November 2019 в 07:04
    поделиться

    Я считаю, что математика использует свой собственный функциональный язык.

    3
    ответ дан 28 November 2019 в 07:04
    поделиться

    Определите «серьезный». Помните, что функциональные языки (кроме LISP) довольно новы - оригинальные статьи Бэкеса были только в конце 70-х годов, а функциональные языки производственной инженерии - довольно новые. Все известные и общепринятые числовые пакеты основаны на алгоритмах и кодах, начиная с конца 60-х - начала 70-х годов. s - BLAS был впервые опубликован в 1979 году. Поскольку для производственного использования люди склонны тяготеть к хорошо известным и надежным пакетам, старые коды FORTRAN имеют большое значение.

    Но они, безусловно, существуют. люди, выполняющие числовую обработку с помощью функциональных языков. Как указано в другом ответе, Mathematica все больше становится функциональным числовым языком и все чаще реализуется сама по себе.

    3
    ответ дан 28 November 2019 в 07:04
    поделиться

    Отличный вопрос!

    Я был одним из немногих пионеров в этой области вот уже несколько лет, и только недавно мы достигли точки, когда можно получить производительность, подобную Fortran, и Питоноподобная лаконичность в то же время для широкого круга задач. Подробно изучив все доступные функциональные языки и их реализации, я решил сосредоточить свои усилия на статически типизированных нечистых функциональных языках: языке программирования OCaml с открытым исходным кодом и языке программирования Microsoft F #. для .NET.

    Моя книга OCaml для ученых посвящена научным вычислениям на языке программирования OCaml с использованием Linux или Mac OS X. Моя книга F # для ученых посвящена научным вычислениям с языком программирования Microsoft F # с использованием Windows и Visual Studio. Моя компания также продает библиотеки F # for Numerics и F # for Visualization , которые полностью написаны на F # и широко используют функциональное программирование как внутри компании, чтобы улучшить краткость, ясность и удобство обслуживания, так и за ее пределами. сделать библиотеку проще в использовании. Например, первоклассные функции позволяют очень легко строить графики, например, построение синусоидальной функции:

    Plot([Function sin], (-5., 5.))
    

    F # для визуализации даже попытается визуализировать любое значение любого типа, поэтому вы можете дать ему матрицу произвольных значений. рациональные числа, и он отобразит результат в виде наборной математики .

    Мы добились большого успеха в написании кода для научных вычислений в функциональном стиле на языках OCaml и F #. В частности, F # упрощает написание универсального высокопроизводительного параллельного кода без потери производительности для абстракции. Таким образом, вы можете реализовать QR-разложение, которое работает для матриц любого типа (одинарная точность, двойная точность, сложная или даже символьная!), И даже превосходит производительность настроенных производителем библиотек, таких как Intel MKL !

    Наконец, я должен отметить, что Mathematica каким-то образом проложила этот путь задолго до меня. Однако их решение состояло в том, чтобы объединить огромную стандартную библиотеку числовых и символьных функций, написанных на C, с обычным императивным стилем и предоставить довольно рудиментарный функциональный язык программирования для вызова этих функций.

    5
    ответ дан 28 November 2019 в 07:04
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: