вторник, июня 13, 2006

Linux для математика

Сегодня DropC спросил меня о математическом софте в Linux. Это тема настолько объемна, что я решил ответить небольшой обзорной статьей. Тем более, что математический софт бывает нужен далеко не только математикам. Более того, большинство пользователей того же MatLAB-a - вовсе не математики, а физики и инженеры. Да и программисту такой софт бывает необходим…

Итак, вопрос: есть ли для Linux (*nix) аналоги известных коммерческих математических пакетов? Ответ: есть, более чем.

Небольшая табличка аналогов:

Коммерческий пакет для Windows Аналог для Linux Лицензия Homepage Комментарии
MathCAD Symaxx/2 GPL symaxx.sf.net К сожалению, не очень интуитивный интерфейс. Является графическим front-end-ом к Maxima. Написан на Perl/Tk.
MuPAD Коммерческий www.mupad.de Не видел ;)
Mathematica, Maple maxima GPL maxima.sf.net Прародитель Mathematica и Maple.
axiom GPL axiom-developer.or g До 2001г. - самая дорогая система компьютерной алгебры (по слухам, порядка $200k).
Mathematica Linux Коммерческая wolfram.com Практически полный аналог своей сестры для Windows, только бывают проблемы со шрифтами
Maple Linux Коммерческая maplesoft.com
MatLAB SciLAB Своя, типа GPL scilab.com Почти совместим с MatLAB 5/6 на уровне исходников.
Octave GPL octave.org Нет своего аналога Simulink. Почти совместима с MatLAB.
MatLAB Linux Коммерческая mathworks.com Дороже своей Windows-версии
Statistica R GPL r-project.org Мощный язык для статистических вычислений + куча модулей.
OpenDX GPL opendx.org Одна из мощнейших в мире систем визуализации данных.

И здесь еще не все перечислено… Математического софта под *nix просто море.

Причем интересна его история.

В 50-60-х годах в США на волне интереса к компьютерам начали создавать системы компьютерной алгебры. (в смысле, программы, способные сообразить, что (a+b)2 = a2+2ab+b^2, не зная, что такое a и b). И, конечно, такая софтина нужна была одному мирному американскому ведомству. И это ведомство объявило конкурс на лучшую CAS (Computer Algebra System) для своих нужд, пообещав всяческую поддержку. Конкурс этот выиграл мало кому известный тогда проект Macsyma (CAS, написанная на Lisp). И, получив поддержку, очень неплохо развивался как коммерческий проект года так до 1984. А в 1984 году небезызвестный Richard Stollman объявил о создании FSF и опубликовал первую версию GPL. Услыхав про это, один из отцов-основателей проекта Macsyma заявил руководству (и Пентагону) ультиматум: "либо а) мне передают все наработки проекта, и я паралельно развиваю GPL-версию Macsyma, либо б) я ухожу из проекта". Так как второй вариант означал быстрый распад проекта, Пентагон вынужден был согласиться на первый. Так появилась свободная CAS под названием Maxima. Она развивалась паралельно с Macsyma до начала 1990-х. А в 1991 СССР распался, холодная война кончилась, и Пентагон прекратил финансирование проекта. В 1994 Macsyma прекратила свое развитие. Исходники были частично распроданы, и на их основе вскоре появились Mathematica и Maple. А Maxima продолжает развиваться до сих пор.

С axiom вышла тоже интересная история. Этот проект развивался самостоятельно, и развился в очень мощную и очень дорогую CAS. Однако, организаций, способных заплатить несколько сот тысяч баксов за копию программы, не так уж много. Так что к началу XXI века продажи резко упали (рынок был насыщен), и проект стал коммерчески нерентабельным. Тогда авторы axiom выпустили ее под лицензией GPL.

Maxima и Axiom замечательны уровнем абстракции, который они предоставляют пользователю. Они поддерживают так называемые Rule-based преобразования. Например, можно задать, что "f(A and B)" переходит в "f(A) or f(B)", и CAS сделает преобразование, не задумываясь ни о том, что такое A и B, ни о смысле операций and или or. Это позволяет производить преобразования не только над математическими выражениями, но над чем угодно, что может быть записано в виде формулы.

Изюминка Maxima состоит в большой гибкости синтаксиса. Например, объявив "f(x,y):= x2-y2", можно объявть f инфиксным оператором и писать далее вместо "f(x,y)" - "x f y".

У Axiom тоже есть свои изюминки. Во-первых, это язык с очень мощной и простой системой типов. Например, можно объявить "A: List Matrix Rational Polynomial Complex" - "пусть А - это список матриц из дробей, числителями и знаменателями которых являются многочлены над комплексными числами". Во-вторых, поддерживаются весьма абстрактные операции из области абстрактной алгебры и теории чисел. "Приведение многочленов над полем Галуа" - слышали про такое? Криптоаналитики слышат каждый день. А в Axiom для этого есть встроенная функция. В-третьих, Axiom имеет очень интересный алгоритм вычисления интегралов. Большинство CAS, встретив слишком сложный для них интеграл, просто оставляют его как есть. Это у них означает "Либо интеграл не берется в элементарных функциях вообще, либо я просто не знаю, как его брать". Axiom выдаст интеграл как был только в том случае, когда может математически доказать, что взять его в элементарных функциях невозможно.

Из CAS под Linux можно упомянуть еще yacas, yorick и GAP. Все это свободный софт.

GAP - совершенно замечательная система. Ее название - аббревиатура, расшифровывается как "Groups, Alghorithms and Programming". Это изначально свободный (GPL) проект создания модульной системы для абстрактной алгебры. На сегодняшний день это мощнейшая из систем такого рода (в том числе и коммерческих). Здесь "поле", "кольцо", "группа" - это типы данных, а "вычисление идеала банаховой алгебры" - стандартная функция.

Ну ладно, CAS обсудили, поехали к "числодробилкам" (системам численных вычислений). Из коммерческих продуктов здесь на ум сразу приходит MatLAB. Это очень дорогая система. В том составе, в котором мы привыкли видеть ее на пиратских дисках, она стоит что-то от $40k "студенческая лицензия" (т.е. с правом установки на один компьютер один раз, без тех.поддержки) до $60k Enterprise Edition.

Проект SciLAB появился как коммерческий, но более дешевый конкурент MatLAB-a. Коммерчески проект себя не оправдал, и исходники открыли. Лицензия - "почти GPL", но с изменениями, направленными на то, чтобы затруднить появление многочисленных мало совместимых версий. Эта программа почти полностью совмекстима с MatLAB на уровне исходных текстов (m-файлов). Здесь есть даже аналог Simulink - средства визуального проектирования математических моделей.

Octave появился как "чисто GNU GPL" конкурент SciLAB-a. На сегодняшний день во многом совместима с MatLAB-ом, но нет аналога Simulink.

Из этой же серии можно отметить Tela - "interactive tensor language". Замечателен pascal-подобным синтаксисом.

Остались только программы для статистиков.

В качестве функциональной замены системы Statistica можно посоветовать язык статистических вычислений R. Это очень мощный язык, плюс к нему написаны десятки модулей для конкретных задач (кластерный анализ, финансовый инженеринг, распределенные вычисления…).

Для визуализации численных данных ученые всего мира используют OpenDX. Изначально это недешевый продукт IBM (dx - data explorer), однако исходники открыли, сейчас это GPL-проект. Считается мощнейшей системой в своем классе.

Материалы собраны по всему Интернету, плюс личный опыт общения с CAS и числодробилками.


Last updated 02-May-2006 21:51:13 YEKST

15 комментариев:

  1. Огромное спасибо за статью! Просто блеск!

    ОтветитьУдалить
  2. Мои 5 копеек: http://oal.livejournal.com/437775.html

    ОтветитьУдалить
  3. Анонимный3/14/2007 10:52 PM

    Спасибо за дополнение.

    ОтветитьУдалить
  4. Анонимный5/22/2007 6:13 AM

    Вау и мне понравилась статья. Советую Вам ее на http://habrahabr.ru опубликовать!!!

    ОтветитьУдалить
  5. Анонимный2/07/2008 9:49 PM

    Спасибо за статью

    ОтветитьУдалить
  6. Анонимный3/19/2008 6:58 AM

    +1. Огромное спасибо!

    ОтветитьУдалить
  7. Анонимный3/27/2008 10:10 AM

    +1, было ползено прочитать!

    ОтветитьУдалить
  8. Анонимный5/21/2008 8:56 AM

    Спасибо! Крайне полезная статья! Особенно для новичков в линукс=)

    ОтветитьУдалить
  9. Анонимный6/08/2009 2:26 PM

    Этот комментарий был удален администратором блога.

    ОтветитьУдалить
  10. Анонимный6/13/2009 12:37 PM

    Очень интересно! Спасибо!

    ОтветитьУдалить
  11. Анонимный11/21/2009 8:05 AM

    Для эконометрики есть также консольная версия Ox (www.doornik.com). Академическое использование бесплатно.

    ОтветитьУдалить
  12. Анонимный2/08/2010 6:32 AM

    Этот комментарий был удален администратором блога.

    ОтветитьУдалить
  13. Анонимный3/26/2010 2:19 AM

    Спасибо за статью: я сразу получил прямые ответы на свои вопросы.

    ОтветитьУдалить
  14. Спасибо. Кстати, на этом хоть и молодом сайте оказывают реальную помощь в решении задач и примеров, а также подготовке к ЕГЭ.
    http://5matem.ru/

    ОтветитьУдалить