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
в качестве аргумента, и возвращающаяполе отношений своего аргумента. В качестве другого примера кольцо матриц действительных чисел может быть построено как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 упрощает уравнение теплоты
- Работа с матрицами в 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 7.1Axiom Hyperdoc Pages — Исходный код страниц Hyperdoc
- Volume 8:Axiom Graphics — Исходый код подсистемы X11 Graphics
- Volume 9:Axiom Compiler — Исходый код компилятора Spad (незавершённый)
- Volume 10:Axiom Algebra Implementation — Наброски особенностей реализации (незавершённый)
- Volume 10.1:Axiom Algebra Theory — Наброски, содержащие базовую теорию
- Volume 10.2:Axiom Algebra Categories — Исходный код категорий Axiom
- Volume 10.3:Axiom Algebra Domains — Исходый код доменов Axiom (незавершённый)
- Volume 10.4:Axiom Algebra Packages — Исходый код Axiom packages (незавершённый)
- Volume 11:Axiom Browser — Исходные страницы внешнего интерфейса Axiom для браузера Firefox
- Volume 12:Axiom Crystal — Исходный код внешнего интерфейса Axiom Crystal (незавершённый)
Видео
[править |править код]Важной целью проекта Axiom является предоставление документации. В ноябре2008 года проект анонсировал первое из серии обучающих видео, которые также доступны на сайте:axiom-developer.org.Первое видео рассказывает о источниках информации о Axiom.[5]
Примечания
[править |править код]- ↑http://www.axiom-developer.org/axiom-website/releasenotes.html
- ↑Richard Dimick Jenks (неопр.). Дата обращения: 26 апреля 2009. Архивировано 17 июля 2011 года.
- ↑Домашняя страница AxiomАрхивная копия от 18 августа 2004 наWayback Machine.
- ↑ПатчиАрхивная копия от 23 мая 2009 наWayback Machine.
- ↑«Axiom Computer Algebra System Information Sources»Архивная копия от 29 марта 2016 наWayback Machine, jgg899,YouTube, 30 ноября 2008.
Ссылки
[править |править код]- Домашняя страница Axiom
- Сайт OpenAxiom.
- Сайт FriCAS.
- [rutracker.org/forum/viewtopic.php?t=3130675 Система компьютерной алгебры «Аксиома»]
- Таранчук В. Б. Основные функции систем компьютерной алгебры (рус.). — Минск: БГУ, 2013. — 59 p.
Некоторые внешние ссылки в этой статье ведут на сайты, занесённые вспам-лист. Эти сайты могут нарушать авторские права, быть признанынеавторитетными источниками или по другим причинам быть запрещены в Википедии. Редакторам следует заменить такие ссылкиссылками на соответствующие правилам сайты или библиографическими ссылками на печатные источники либо удалить их (возможно, вместе с подтверждаемым ими содержимым). Список проблемных ссылок
|