Axiom

Поделись знанием:
Перейти к: навигация, поиск
Axiom
Тип

система компьютерной алгебры

Разработчик

независимая группа людей

Операционная система

кроссплатформенное программное обеспечение

Лицензия

модифицированная лицензия BSD

Сайт

[www.axiom-developer.org om-developer.org]

К:Википедия:Статьи без изображений (тип: не указан)

Axiom — свободная система компьютерной алгебры общего назначения. Она состоит из среды интерпретатора, компилятора и библиотеки, описывающей строго типизированную, математически правильную иерархию типов.





История

Разработка системы была начата в 1971 году группой исследователей IBM под руководством Ричарда Дженкса (англ. [www.cis.udel.edu/~caviness/jenks/jenksbio/ Richard Dimick Jenks])[1]. Изначально система называлась Scratchpad. Проект развивался медленно и в основном рассматривался как исследовательская платформа для разработки новых идей в вычислительной математике.

В 90-х система была продана компании Numerical Algorithms Group (NAG), получила название Axiom и стала коммерческим продуктом. Но по ряду причин система не получила коммерческого успеха и была отозвана с рынка в октябре 2001.

NAG решила сделать Axiom свободным программным обеспечением и открыла исходные коды под модифицированной лицензией BSD.

В 2007 у Axiom появились два форка с открытым исходным кодом: [www.open-axiom.org OpenAxiom] и [fricas.sourceforge.net FriCAS].

Разработка системы продолжается, новые версии выходят каждые два месяца[2].

Философия проекта

Технология литературного программирования Кнута используется по всему исходному коду. Проект Axiom планирует использовать проверенные технологии (такие как Coq и ACL2) для доказательства корректности алгоритмов.

Особенности

В Axiom все объекты имеют тип. Примерами типов являются математические структуры (такие как кольца, поля, многочлены), а также структуры данных из вычислительной техники (например, списки, деревья, хеш-таблицы).

Функция может получить тип в качестве аргумента, и её возвращаемое значение также может быть типом. Например, Fraction — функция, получающая IntegralDomain в качестве аргумента, и возвращающая поле отношений своего аргумента. В качестве другого примера кольцо <math>4\times 4</math> матриц действительных чисел может быть построено как SquareMatrix(4, Fraction Integer). Конечно, если работать в этом домене, 1 интерпретируется как единичная матрица и A^-1 позволяет получить обратную матрицу A, если она существует.

Некоторые операции могут иметь одинаковые имена, и тогда типы аргументов и результата используются для определения того, какая операция применяется, подобно тому, как в ООП.

Язык расширений Axiom называется SPAD. Вся математическая база Axiom написана на этом языке. Интерпретатор принимает почти такой же язык.

SPAD в дальнейшем разрабатывался под именем A# и позже Aldor. Последний, кроме того, может быть использован как альтернативный язык расширений. Однако, следует учесть, что он распространяется под другой лицензией.

Примеры

3j-символы

Вычисление 3j-символов и коэффициентов Клебша-Гордана.

j3Sum (j1, j2, j3, m1, m2, m3) ==
  maxz := reduce (min, [j1+j2-j3, j1-m1, j2+m2])
  minz := max(0, max ( -(j3-j2+m1), -(j3-j1-m2) ))
  minz > maxz => 0
  maxz < 0    => 0
  sum ( (-1)^(z+j1-j2-m3) / _
    ( factorial(z) * factorial(j1+j2-j3-z) * factorial(j1-m1-z) * _
      factorial(j2+m2-z) * factorial(j3-j2+m1+z) * factorial(j3-j1-m2+z) ), _
    z=minz..maxz)

j3 (j1, j2, j3, m1, m2, m3) ==
  m1 + m2 + m3 ~= 0  => 0
  abs(j1 - j2) > j3  => 0
  j1 + j2 < j3       => 0
  abs(m1) > j1       => 0
  abs(m2) > j2       => 0
  abs(m3) > j3       => 0
  not integer? (j1+j2+j3) => 0
  sqrt ( _
    factorial(j1+j2-j3) * factorial(j1-j2+j3) * factorial(-j1+j2+j3) / _
                          factorial(j1+j2+j3+1) * _
        factorial(j1+m1) * factorial(j1-m1) * _
        factorial(j2+m2) * factorial(j2-m2) * _
        factorial(j3+m3) * factorial(j3-m3)
    ) * j3Sum (j1, j2, j3, m1, m2, m3)       

clebschGordan (j1, j2, j, m1, m2, m) ==
    (-1)^(j1-j2+m) * sqrt(2*j+1) * j3(j1, j2, j, m1, m2, -m)

Общая теория относительности

«Аксиома» выводит символы Кристоффеля и тензоры Римана и Риччи в решении Шварцшильда.

x   := vector ['t, 'r, '%theta, '%phi];
dim := #x;

%nu     := operator '%nu;
%lambda := operator '%lambda;
lg := matrix [
    [exp(%nu r),       0,         0,    0], _
    [       0,  - exp(%lambda r), 0,    0], _
    [       0,      0,          -r^2,   0], _
    [       0,      0,            0,  -r^2*sin(%theta)^2]  _
    ];

ug := inverse lg;

grSetup(metric, names) ==
    free x
    free dim
    free lg
    free ug
    x   := names
    dim := #x
    lg  := metric
    ug  := inverse lg

sum(list) == reduce (+, list)

Christoffel (k,l,i) ==
 (1/2) * sum [ ug(i,m)*(D(lg(k,m), x(l)) + D(lg(m,l), x(k)) - D(lg(k,l), x(m)))
         for m in 1..dim ]

Riemann (k,l,m,i) ==
 D(Christoffel(k,m,i), x(l)) -
  D(Christoffel(k,l,i), x(m)) +
   sum [ 
    Christoffel(n,l,i)*Christoffel(k,m,n) -
     Christoffel(n,m,i)*Christoffel(k,l,n)
      for n in 1..dim ]

Ricci (i,k) == sum [ Riemann(i,l,k,l) for l in 1..dim ]

scalarCurvature () == sum [ sum [
                       ug(i,k) * Ricci(i,k)
                        for i in 1..dim ]  for k in 1..dim ]

lRiemann (i,i,l,m) == 0
lRiemann (i,k,l,l) == 0
lRiemann (i,k,l,m | i > k) == - lRiemann (k,i,l,m)
lRiemann (i,k,l,m | l > m) == - lRiemann (i,k,m,l)
lRiemann (i,k,l,m) == sum [ lg(i,n) * Riemann(k,l,m,n) for n in 1..dim ]

showChristoffel () ==
 for k in 1..dim repeat
  for l in 1..k repeat
   for i in 1..dim repeat
    if Christoffel(k,l,i) ~= 0 then
        k > l => output infix ('=, [script('%Gamma,[[k-1,l-1],[i-1]]), _
                      script('%Gamma,[[l-1,k-1],[i-1]]), _
                      Christoffel(k,l,i)::OUTFORM])
        k = l => output infix ('=, _
                  [script('%Gamma,[[k-1,l-1],[i-1]]), _
                   Christoffel(k,l,i)::OUTFORM])

showRicci () ==
 for i in 1..dim repeat
   for k in 1..i repeat
    if Ricci(i,k) ~= 0 then
        i = k => output infix ('=, [subscript('R,[i-1,k-1]), Ricci(i,k)::OUTFORM])
        i > k => output infix ('=, [subscript('R,[i-1,k-1]), _
                                    subscript('R,[k-1,i-1]), _
                                    Ricci(i,k)::OUTFORM])

showRiemann () ==
 for k in 1..dim repeat
  for l in 1..dim repeat
   for m in 1..dim repeat
    for i in 1..dim repeat
     if Riemann(k,l,m,i) ~= 0 then
        output infix ('=, _
          [script('R, [[k-1,l-1,m-1 ], [i-1]]), Riemann(k,l,m,i)::OUTFORM])
(21) -> showChristoffel()
   Compiling function sum with type List Expression Integer -> 
      Expression Integer 
   Compiling function Christoffel with type (PositiveInteger,
      PositiveInteger,PositiveInteger) -> Expression Integer 
   Compiling function showChristoffel with type () -> Void 
                %nu(r)   ,
              %e      %nu (r)
         1
   %Gamma   = ---------------
         0,0      %lambda(r)
               2%e
                            ,
                         %nu (r)
         0          0
   %Gamma   = %Gamma   = -------
         1,0        0,1     2
                     ,
              %lambda (r)
         1
   %Gamma   = -----------
         1,1       2
         2          2    1
   %Gamma   = %Gamma   = -
         2,1        1,2  r
         1            r
   %Gamma   = - ------------
         2,2      %lambda(r)
                %e
         3          3    1
   %Gamma   = %Gamma   = -
         3,1        1,3  r
         3          3    cos(%theta)
   %Gamma   = %Gamma   = -----------
         3,2        2,3  sin(%theta)
                             2
         1      r sin(%theta)
   %Gamma   = - --------------
         3,3       %lambda(r)
                 %e
         2
   %Gamma   = - cos(%theta)sin(%theta)
         3,3
                                                                   Type: Void
(22) -> Ricci(3,3)
   Compiling function Riemann with type (PositiveInteger,
      PositiveInteger,PositiveInteger,PositiveInteger) -> Expression 
      Integer 
   Compiling function Ricci with type (PositiveInteger,PositiveInteger)
       -> Expression Integer 

               ,              ,         %lambda(r)
         - r%nu (r) + r%lambda (r) + 2%e           - 2

   (22)  ---------------------------------------------
                            %lambda(r)
                         2%e
                                                     Type: Expression Integer

Галерея

Документация

Axiom — литературная программа. Исходный код доступен в наборе томов на сайте: [axiom-developer.org/axiom-website/documentation.html axiom-developer.org]. Эти тома содержат актуальный исходный код системы.

На данный момент доступны следующие документы:

  • [axiom-developer.org/axiom-website/toc.pdf Общее оглавление]
  • Volume 0: [axiom-developer.org/axiom-website/bookvol0.pdf Axiom Jenks and Sutor] — Основной учебник
  • Volume 1: [axiom-developer.org/axiom-website/bookvol1.pdf Axiom Tutorial] — Простое введение
  • Volume 2: [axiom-developer.org/axiom-website/bookvol2.pdf Axiom Users Guide] — Подробные примеры использования доменов (незавершённый)
  • Volume 3: [axiom-developer.org/axiom-website/bookvol3.pdf Axiom Programers Guide] — Руководство в примерах для написания программ (незавершённый)
  • Volume 4: [axiom-developer.org/axiom-website/bookvol4.pdf Axiom Developers Guide] — Короткие наброски на темы, специфичные для разработчиков (незавершённый)
  • Volume 5: [axiom-developer.org/axiom-website/bookvol5.pdf Axiom Intepreter] — Исходый код интерпретатора Axiom (незавершённый)
  • Volume 6: [axiom-developer.org/axiom-website/bookvol6.pdf Axiom Command] — Исходый код системных команд и скриптов (незавершённый)
  • Volume 7: [axiom-developer.org/axiom-website/bookvol7.pdf Axiom Hyperdoc] — Исходный код и разъяснения браузера справки X11 Hyperdoc
    • Volume 7.1 [axiom-developer.org/axiom-website/bookvol7.1.pdf Axiom Hyperdoc Pages] — Исходный код страниц Hyperdoc
  • Volume 8: [axiom-developer.org/axiom-website/bookvol8.pdf Axiom Graphics] — Исходый код подсистемы X11 Graphics
  • Volume 9: [axiom-developer.org/axiom-website/bookvol9.pdf Axiom Compiler] — Исходый код компилятора Spad (незавершённый)
  • Volume 10: [axiom-developer.org/axiom-website/bookvol10.pdf Axiom Algebra Implementation] — Наброски особенностей реализации (незавершённый)
    • Volume 10.1: [axiom-developer.org/axiom-website/bookvol10.1.pdf Axiom Algebra Theory] — Наброски, содержащие базовую теорию
    • Volume 10.2: [axiom-developer.org/axiom-website/bookvol10.2.pdf Axiom Algebra Categories] — Исходный код категорий Axiom
    • Volume 10.3: [axiom-developer.org/axiom-website/bookvol10.3.pdf Axiom Algebra Domains] — Исходый код доменов Axiom (незавершённый)
    • Volume 10.4: [axiom-developer.org/axiom-website/bookvol10.4.pdf Axiom Algebra Packages] — Исходый код Axiom packages (незавершённый)
  • Volume 11: [axiom-developer.org/axiom-website/bookvol11.pdf Axiom Browser] — Исходные страницы внешнего интерфейса Axiom для браузера Firefox
  • Volume 12: [axiom-developer.org/axiom-website/bookvol12.pdf Axiom Crystal] — Исходный код внешнего интерфейса Axiom Crystal (незавершённый)

Видео

Важной целью проекта Axiom является предоставление документации. В ноябре 2008 года проект анонсировал первое из серии обучающих видео, которые также доступны на сайте: [www.axiom-developer.org axiom-developer.org]. [www.youtube.com/watch?v=CV8y3UrpadY Первое видео] рассказывает о источниках информации о Axiom.[3]

Напишите отзыв о статье "Axiom"

Примечания

  1. [axiom-developer.org Домашняя страница Axiom]
  2. [axiom-developer.org/axiom-website/patches.html Патчи]
  3. [www.youtube.com/watch?v=CV8y3UrpadY «Axiom Computer Algebra System Information Sources»], jgg899, YouTube, 30 ноября 2008.

Ссылки

  • [axiom-developer.org Домашняя страница Axiom]
  • [www.open-axiom.org Сайт OpenAxiom.]
  • [fricas.sourceforge.net Сайт FriCAS.]
  • [rutracker.org/forum/viewtopic.php?t=3130675 Система компьютерной алгебры «Аксиома»]
  • Таранчук В. Б. [elib.bsu.by/handle/123456789/46210 Основные функции систем компьютерной алгебры]. — Минск: БГУ, 2013. — 59 p.

Отрывок, характеризующий Axiom

– И не видали, что везде укладываются?
– Не видал… Да в чем дело? – нетерпеливо спросил князь Андрей.
– В чем дело? Дело в том, что французы перешли мост, который защищает Ауэсперг, и мост не взорвали, так что Мюрат бежит теперь по дороге к Брюнну, и нынче завтра они будут здесь.
– Как здесь? Да как же не взорвали мост, когда он минирован?
– А это я у вас спрашиваю. Этого никто, и сам Бонапарте, не знает.
Болконский пожал плечами.
– Но ежели мост перейден, значит, и армия погибла: она будет отрезана, – сказал он.
– В этом то и штука, – отвечал Билибин. – Слушайте. Вступают французы в Вену, как я вам говорил. Всё очень хорошо. На другой день, то есть вчера, господа маршалы: Мюрат Ланн и Бельяр, садятся верхом и отправляются на мост. (Заметьте, все трое гасконцы.) Господа, – говорит один, – вы знаете, что Таборский мост минирован и контраминирован, и что перед ним грозный tete de pont и пятнадцать тысяч войска, которому велено взорвать мост и нас не пускать. Но нашему государю императору Наполеону будет приятно, ежели мы возьмем этот мост. Проедемте втроем и возьмем этот мост. – Поедемте, говорят другие; и они отправляются и берут мост, переходят его и теперь со всею армией по сю сторону Дуная направляются на нас, на вас и на ваши сообщения.
– Полноте шутить, – грустно и серьезно сказал князь Андрей.
Известие это было горестно и вместе с тем приятно князю Андрею.
Как только он узнал, что русская армия находится в таком безнадежном положении, ему пришло в голову, что ему то именно предназначено вывести русскую армию из этого положения, что вот он, тот Тулон, который выведет его из рядов неизвестных офицеров и откроет ему первый путь к славе! Слушая Билибина, он соображал уже, как, приехав к армии, он на военном совете подаст мнение, которое одно спасет армию, и как ему одному будет поручено исполнение этого плана.
– Полноте шутить, – сказал он.
– Не шучу, – продолжал Билибин, – ничего нет справедливее и печальнее. Господа эти приезжают на мост одни и поднимают белые платки; уверяют, что перемирие, и что они, маршалы, едут для переговоров с князем Ауэрспергом. Дежурный офицер пускает их в tete de pont. [мостовое укрепление.] Они рассказывают ему тысячу гасконских глупостей: говорят, что война кончена, что император Франц назначил свидание Бонапарту, что они желают видеть князя Ауэрсперга, и тысячу гасконад и проч. Офицер посылает за Ауэрспергом; господа эти обнимают офицеров, шутят, садятся на пушки, а между тем французский баталион незамеченный входит на мост, сбрасывает мешки с горючими веществами в воду и подходит к tete de pont. Наконец, является сам генерал лейтенант, наш милый князь Ауэрсперг фон Маутерн. «Милый неприятель! Цвет австрийского воинства, герой турецких войн! Вражда кончена, мы можем подать друг другу руку… император Наполеон сгорает желанием узнать князя Ауэрсперга». Одним словом, эти господа, не даром гасконцы, так забрасывают Ауэрсперга прекрасными словами, он так прельщен своею столь быстро установившеюся интимностью с французскими маршалами, так ослеплен видом мантии и страусовых перьев Мюрата, qu'il n'y voit que du feu, et oubl celui qu'il devait faire faire sur l'ennemi. [Что он видит только их огонь и забывает о своем, о том, который он обязан был открыть против неприятеля.] (Несмотря на живость своей речи, Билибин не забыл приостановиться после этого mot, чтобы дать время оценить его.) Французский баталион вбегает в tete de pont, заколачивают пушки, и мост взят. Нет, но что лучше всего, – продолжал он, успокоиваясь в своем волнении прелестью собственного рассказа, – это то, что сержант, приставленный к той пушке, по сигналу которой должно было зажигать мины и взрывать мост, сержант этот, увидав, что французские войска бегут на мост, хотел уже стрелять, но Ланн отвел его руку. Сержант, который, видно, был умнее своего генерала, подходит к Ауэрспергу и говорит: «Князь, вас обманывают, вот французы!» Мюрат видит, что дело проиграно, ежели дать говорить сержанту. Он с удивлением (настоящий гасконец) обращается к Ауэрспергу: «Я не узнаю столь хваленую в мире австрийскую дисциплину, – говорит он, – и вы позволяете так говорить с вами низшему чину!» C'est genial. Le prince d'Auersperg se pique d'honneur et fait mettre le sergent aux arrets. Non, mais avouez que c'est charmant toute cette histoire du pont de Thabor. Ce n'est ni betise, ni lachete… [Это гениально. Князь Ауэрсперг оскорбляется и приказывает арестовать сержанта. Нет, признайтесь, что это прелесть, вся эта история с мостом. Это не то что глупость, не то что подлость…]
– С'est trahison peut etre, [Быть может, измена,] – сказал князь Андрей, живо воображая себе серые шинели, раны, пороховой дым, звуки пальбы и славу, которая ожидает его.
– Non plus. Cela met la cour dans de trop mauvais draps, – продолжал Билибин. – Ce n'est ni trahison, ni lachete, ni betise; c'est comme a Ulm… – Он как будто задумался, отыскивая выражение: – c'est… c'est du Mack. Nous sommes mackes , [Также нет. Это ставит двор в самое нелепое положение; это ни измена, ни подлость, ни глупость; это как при Ульме, это… это Маковщина . Мы обмаковались. ] – заключил он, чувствуя, что он сказал un mot, и свежее mot, такое mot, которое будет повторяться.
Собранные до тех пор складки на лбу быстро распустились в знак удовольствия, и он, слегка улыбаясь, стал рассматривать свои ногти.
– Куда вы? – сказал он вдруг, обращаясь к князю Андрею, который встал и направился в свою комнату.
– Я еду.
– Куда?
– В армию.
– Да вы хотели остаться еще два дня?
– А теперь я еду сейчас.
И князь Андрей, сделав распоряжение об отъезде, ушел в свою комнату.
– Знаете что, мой милый, – сказал Билибин, входя к нему в комнату. – Я подумал об вас. Зачем вы поедете?
И в доказательство неопровержимости этого довода складки все сбежали с лица.
Князь Андрей вопросительно посмотрел на своего собеседника и ничего не ответил.
– Зачем вы поедете? Я знаю, вы думаете, что ваш долг – скакать в армию теперь, когда армия в опасности. Я это понимаю, mon cher, c'est de l'heroisme. [мой дорогой, это героизм.]
– Нисколько, – сказал князь Андрей.
– Но вы un philoSophiee, [философ,] будьте же им вполне, посмотрите на вещи с другой стороны, и вы увидите, что ваш долг, напротив, беречь себя. Предоставьте это другим, которые ни на что более не годны… Вам не велено приезжать назад, и отсюда вас не отпустили; стало быть, вы можете остаться и ехать с нами, куда нас повлечет наша несчастная судьба. Говорят, едут в Ольмюц. А Ольмюц очень милый город. И мы с вами вместе спокойно поедем в моей коляске.
– Перестаньте шутить, Билибин, – сказал Болконский.
– Я говорю вам искренно и дружески. Рассудите. Куда и для чего вы поедете теперь, когда вы можете оставаться здесь? Вас ожидает одно из двух (он собрал кожу над левым виском): или не доедете до армии и мир будет заключен, или поражение и срам со всею кутузовскою армией.
И Билибин распустил кожу, чувствуя, что дилемма его неопровержима.
– Этого я не могу рассудить, – холодно сказал князь Андрей, а подумал: «еду для того, чтобы спасти армию».
– Mon cher, vous etes un heros, [Мой дорогой, вы – герой,] – сказал Билибин.


В ту же ночь, откланявшись военному министру, Болконский ехал в армию, сам не зная, где он найдет ее, и опасаясь по дороге к Кремсу быть перехваченным французами.
В Брюнне всё придворное население укладывалось, и уже отправлялись тяжести в Ольмюц. Около Эцельсдорфа князь Андрей выехал на дорогу, по которой с величайшею поспешностью и в величайшем беспорядке двигалась русская армия. Дорога была так запружена повозками, что невозможно было ехать в экипаже. Взяв у казачьего начальника лошадь и казака, князь Андрей, голодный и усталый, обгоняя обозы, ехал отыскивать главнокомандующего и свою повозку. Самые зловещие слухи о положении армии доходили до него дорогой, и вид беспорядочно бегущей армии подтверждал эти слухи.
«Cette armee russe que l'or de l'Angleterre a transportee, des extremites de l'univers, nous allons lui faire eprouver le meme sort (le sort de l'armee d'Ulm)», [«Эта русская армия, которую английское золото перенесло сюда с конца света, испытает ту же участь (участь ульмской армии)».] вспоминал он слова приказа Бонапарта своей армии перед началом кампании, и слова эти одинаково возбуждали в нем удивление к гениальному герою, чувство оскорбленной гордости и надежду славы. «А ежели ничего не остается, кроме как умереть? думал он. Что же, коли нужно! Я сделаю это не хуже других».
Князь Андрей с презрением смотрел на эти бесконечные, мешавшиеся команды, повозки, парки, артиллерию и опять повозки, повозки и повозки всех возможных видов, обгонявшие одна другую и в три, в четыре ряда запружавшие грязную дорогу. Со всех сторон, назади и впереди, покуда хватал слух, слышались звуки колес, громыхание кузовов, телег и лафетов, лошадиный топот, удары кнутом, крики понуканий, ругательства солдат, денщиков и офицеров. По краям дороги видны были беспрестанно то павшие ободранные и неободранные лошади, то сломанные повозки, у которых, дожидаясь чего то, сидели одинокие солдаты, то отделившиеся от команд солдаты, которые толпами направлялись в соседние деревни или тащили из деревень кур, баранов, сено или мешки, чем то наполненные.