Axiom

Материал из Википедии — свободной энциклопедии
Перейти к навигацииПерейти к поиску
У этого термина существуют и другие значения, см.Axiom (значения).
Axiom
Скриншот программы Axiom
Типсистема компьютерной алгебры
Разработчикнезависимая группа людей
Написана наЛисп
Операционная системакроссплатформенное программное обеспечение
Последняя версия
Репозиторийgithub.com/daly/axiom
Лицензиямодифицированная лицензия BSD
Сайтaxiom-developer.org
Логотип Викисклада Медиафайлы на Викискладе

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

Содержание

История

[править |править код]

Разработка системы начата в 1971 году группой исследователейIBM под руководствомРичарда Дженкса[2][3]. Изначально система называласьScratchpad. Проект развивался медленно и в основном рассматривался как исследовательская платформа для разработки новых идей в вычислительной математике.

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

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

В 2007 году у Axiom появились двафорка соткрытым исходным кодом:OpenAxiom иFriCAS.

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

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

[править |править код]

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

Особенности

[править |править код]

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

Функция может получить тип в качестве аргумента, и её возвращаемое значение также может быть типом. Например,Fraction — функция, получающаяIntegralDomain в качестве аргумента, и возвращающаяполе отношений своего аргумента. В качестве другого примера кольцо4×4{\displaystyle 4\times 4} матриц действительных чисел может быть построено как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=>0maxz<0=>0sum((-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=>0abs(j1-j2)>j3=>0j1+j2<j3=>0abs(m1)>j1=>0abs(m2)>j2=>0abs(m3)>j3=>0notinteger?(j1+j2+j3)=>0sqrt(_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(%nur),0,0,0],_[0,-exp(%lambdar),0,0],_[0,0,-r^2,0],_[0,0,0,-r^2*sin(%theta)^2]_];ug:=inverselg;grSetup(metric,names)==freexfreedimfreelgfreeugx:=namesdim:=#xlg:=metricug:=inverselgsum(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)))formin1..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)fornin1..dim]Ricci(i,k)==sum[Riemann(i,l,k,l)forlin1..dim]scalarCurvature()==sum[sum[ug(i,k)*Ricci(i,k)foriin1..dim]forkin1..dim]lRiemann(i,i,l,m)==0lRiemann(i,k,l,l)==0lRiemann(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)fornin1..dim]showChristoffel()==forkin1..dimrepeatforlin1..krepeatforiin1..dimrepeatifChristoffel(k,l,i)~=0thenk>l=>outputinfix('=,[script('%Gamma,[[k-1,l-1],[i-1]]),_script('%Gamma,[[l-1,k-1],[i-1]]),_Christoffel(k,l,i)::OUTFORM])k=l=>outputinfix('=,_[script('%Gamma,[[k-1,l-1],[i-1]]),_Christoffel(k,l,i)::OUTFORM])showRicci()==foriin1..dimrepeatforkin1..irepeatifRicci(i,k)~=0theni=k=>outputinfix('=,[subscript('R,[i-1,k-1]),Ricci(i,k)::OUTFORM])i>k=>outputinfix('=,[subscript('R,[i-1,k-1]),_subscript('R,[k-1,i-1]),_Ricci(i,k)::OUTFORM])showRiemann()==forkin1..dimrepeatforlin1..dimrepeatformin1..dimrepeatforiin1..dimrepeatifRiemann(k,l,m,i)~=0thenoutputinfix('=,_[script('R,[[k-1,l-1,m-1],[i-1]]),Riemann(k,l,m,i)::OUTFORM])
(21)->showChristoffel()CompilingfunctionsumwithtypeListExpressionInteger->ExpressionIntegerCompilingfunctionChristoffelwithtype(PositiveInteger,PositiveInteger,PositiveInteger)->ExpressionIntegerCompilingfunctionshowChristoffelwithtype()->Void%nu(r),%e%nu(r)1%Gamma=---------------0,0%lambda(r)2%e,%nu(r)00%Gamma=%Gamma=-------1,00,12,%lambda(r)1%Gamma=-----------1,12221%Gamma=%Gamma=-2,11,2r1r%Gamma=- ------------2,2%lambda(r)%e331%Gamma=%Gamma=-3,11,3r33cos(%theta)%Gamma=%Gamma=-----------3,22,3sin(%theta)21rsin(%theta)%Gamma=- --------------3,3%lambda(r)%e2%Gamma=-cos(%theta)sin(%theta)3,3Type:Void(22)->Ricci(3,3)CompilingfunctionRiemannwithtype(PositiveInteger,PositiveInteger,PositiveInteger,PositiveInteger)->ExpressionIntegerCompilingfunctionRicciwithtype(PositiveInteger,PositiveInteger)->ExpressionInteger,,%lambda(r)-r%nu(r)+r%lambda(r)+2%e-2(22)---------------------------------------------%lambda(r)2%eType:ExpressionInteger

Галерея

[править |править код]
  • Интерфейс Axiom в браузере Mozilla Firefox
    Интерфейс Axiom в браузереMozilla Firefox
  • Axiom упрощает уравнение теплоты
    Axiom упрощает уравнение теплоты
  • Работа с матрицами в Axiom
    Работа с матрицами в Axiom

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

[править |править код]

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

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

  • Общее оглавление
  • Volume 0:Axiom Jenks and Sutor — Основной учебник
  • Volume 1:Axiom Tutorial — Простое введение
  • Volume 2:Axiom Users Guide — Подробные примеры использования доменов (незавершённый)
  • Volume 3:Axiom Programers Guide — Руководство в примерах для написания программ (незавершённый)
  • Volume 4:Axiom Developers Guide — Короткие наброски на темы, специфичные для разработчиков (незавершённый)
  • Volume 5:Axiom Intepreter — Исходый код интерпретатора Axiom (незавершённый)
  • Volume 6:Axiom Command — Исходый код системных команд и скриптов (незавершённый)
  • Volume 7:Axiom Hyperdoc — Исходный код и разъяснения браузера справки X11 Hyperdoc
  • Volume 8:Axiom Graphics — Исходый код подсистемы X11 Graphics
  • Volume 9:Axiom Compiler — Исходый код компилятора Spad (незавершённый)
  • Volume 10:Axiom Algebra Implementation — Наброски особенностей реализации (незавершённый)
  • Volume 11:Axiom Browser — Исходные страницы внешнего интерфейса Axiom для браузера Firefox
  • Volume 12:Axiom Crystal — Исходный код внешнего интерфейса Axiom Crystal (незавершённый)

Видео

[править |править код]

Важной целью проекта Axiom является предоставление документации. В ноябре2008 года проект анонсировал первое из серии обучающих видео, которые также доступны на сайте:axiom-developer.org.Первое видео рассказывает о источниках информации о Axiom.[5]

Примечания

[править |править код]

Ссылки

[править |править код]
Перейти к шаблону «Математическое ПО»
Символьные вычисления
Численные вычисления
Перейти к шаблону «Системы компьютерной алгебры»
Проприетарные
Свободные
Бесплатные/условно-бесплатные
Не поддерживаются
Некоторые внешние ссылки в этой статье ведут на сайты, занесённые вспам-лист.
Эти сайты могут нарушать авторские права, быть признанынеавторитетными источниками или по другим причинам быть запрещены в Википедии. Редакторам следует заменить такие ссылкиссылками на соответствующие правилам сайты или библиографическими ссылками на печатные источники либо удалить их (возможно, вместе с подтверждаемым ими содержимым).
Список проблемных ссылок

  • rutracker.org/forum/viewtopic.php?t=3130675
Источник —https://ru.wikipedia.org/w/index.php?title=Axiom&oldid=134129959
Категории:
Скрытые категории: