Interested Article - Axiom
![](https://wafarin.com/images/000/645/645952/1.jpg?996705)
![](https://cdn.wafarin.com/avatars/83ffde00f6480b8447091cf284a2af47.gif)
- 2021-12-22
- 1
Axiom — свободная система компьютерной алгебры общего назначения. Она состоит из среды интерпретатора, компилятора и библиотеки, описывающей строго типизированную, математически правильную иерархию типов.
История
Разработка системы начата в 1971 году группой исследователей IBM под руководством . Изначально система называлась Scratchpad . Проект развивался медленно и в основном рассматривался как исследовательская платформа для разработки новых идей в вычислительной математике.
В 1990-х годах система была продана компании Numerical Algorithms Group (NAG), получила название Axiom и стала коммерческим продуктом. Но по ряду причин система не получила коммерческого успеха и была отозвана с рынка в октябре 2001 года.
NAG решила сделать Axiom свободным программным обеспечением и открыла исходные коды под модифицированной лицензией BSD .
В 2007 году у Axiom появились два форка с открытым исходным кодом: и .
Разработка системы продолжается, новые версии выходят каждые два месяца .
Философия проекта
Технология литературного программирования Кнута используется по всему исходному коду. Проект Axiom планирует использовать проверенные технологии (такие как Coq и) для доказательства корректности алгоритмов.
Особенности
В Axiom все объекты имеют тип. Примерами типов являются математические структуры (такие как кольца , поля , многочлены ), а также структуры данных из вычислительной техники (например, списки , деревья , хеш-таблицы ).
Функция может получить тип в качестве аргумента, и её возвращаемое значение также может быть типом. Например,
Fraction
— функция, получающая
IntegralDomain
в качестве аргумента, и возвращающая
поле отношений
своего аргумента. В качестве другого примера кольцо
матриц действительных чисел может быть построено как
SquareMatrix(4, Fraction Integer)
. Конечно, если работать в этом домене,
1
интерпретируется как единичная матрица и
A^-1
позволяет получить обратную матрицу
A
, если она существует.
Некоторые операции могут иметь одинаковые имена, и тогда типы аргументов и результата используются для определения того, какая операция применяется, подобно тому, как в ООП .
Язык расширений Axiom называется SPAD. Вся математическая база Axiom написана на этом языке. Интерпретатор принимает почти такой же язык.
SPAD в дальнейшем разрабатывался под именем и позже . Последний, кроме того, может быть использован как альтернативный язык расширений. Однако, следует учесть, что он распространяется под другой лицензией.
Примеры
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 в браузере Mozilla Firefox
-
Axiom упрощает уравнение теплоты
-
Работа с матрицами в Axiom
Документация
Axiom — литературная программа . Исходный код доступен в наборе томов на сайте: . Эти тома содержат актуальный исходный код системы.
На данный момент доступны следующие документы:
- Volume 0: — Основной учебник
- Volume 1: — Простое введение
- Volume 2: — Подробные примеры использования доменов (незавершённый)
- Volume 3: — Руководство в примерах для написания программ (незавершённый)
- Volume 4: — Короткие наброски на темы, специфичные для разработчиков (незавершённый)
- Volume 5: — Исходый код интерпретатора Axiom (незавершённый)
- Volume 6: — Исходый код системных команд и скриптов (незавершённый)
-
Volume 7: — Исходный код и разъяснения браузера справки X11 Hyperdoc
- Volume 7.1 — Исходный код страниц Hyperdoc
- Volume 8: — Исходый код подсистемы X11 Graphics
- Volume 9: — Исходый код компилятора Spad (незавершённый)
-
Volume 10: — Наброски особенностей реализации (незавершённый)
- Volume 10.1: — Наброски, содержащие базовую теорию
- Volume 10.2: — Исходный код категорий Axiom
- Volume 10.3: — Исходый код доменов Axiom (незавершённый)
- Volume 10.4: — Исходый код Axiom packages (незавершённый)
- Volume 11: — Исходные страницы внешнего интерфейса Axiom для браузера Firefox
- Volume 12: — Исходный код внешнего интерфейса Axiom Crystal (незавершённый)
Видео
Важной целью проекта Axiom является предоставление документации. В ноябре 2008 года проект анонсировал первое из серии обучающих видео, которые также доступны на сайте: . рассказывает о источниках информации о Axiom.
Примечания
- (неопр.) . Дата обращения: 26 апреля 2009. 17 июля 2011 года.
- от 18 августа 2004 на Wayback Machine .
- от 23 мая 2009 на Wayback Machine .
- от 29 марта 2016 на Wayback Machine , jgg899, YouTube , 30 ноября 2008.
Ссылки
- [rutracker.org/forum/viewtopic.php?t=3130675 Система компьютерной алгебры «Аксиома»]
- Таранчук В. Б. (рус.) . — Минск: БГУ, 2013. — 59 p.
![](https://cdn.wafarin.com/avatars/83ffde00f6480b8447091cf284a2af47.gif)
- 2021-12-22
- 1