Sage | |
---|---|
| |
Тип | Система компьютерной алгебры |
Разработчик | Стейн, Уильям Артур[вд] |
Написана на | Python, Cython |
Операционная система | Кроссплатформенное программное обеспечение |
Первый выпуск | 24 февраля 2005 |
Аппаратная платформа | Python |
Последняя версия | |
Репозиторий | github.com/sagemath/sage |
Лицензия | GNU General Public License |
Сайт | sagemath.org |
Медиафайлы на Викискладе |
Sage (с англ. — «мудрец») — система компьютерной алгебры, покрывающая много областей математики, включая алгебру, комбинаторику, вычислительную математику и матанализ.
Первая версия Sage была выпущена 24 февраля 2005 года в виде свободного программного обеспечения с лицензией GNU GPL. Первоначальной целью проекта было «создание открытого программного обеспечения альтернативного системам Magma, Maple, Mathematica, и MATLAB»[2]. Основной разработчик — математик Вашингтонского университета Уильям Стейн.
Основной интерфейс системы — интерактивный блокнот, обеспечивающий просмотр и повторное использование введённых команд, вывод и сохранение полученных результатов, включая графики и текстовые аннотации, доступный из большинства современных веб-браузеров. Поддерживается защищённое соединение через протокол HTTPS. Может выполняться как локально, так и удалённо.
Есть интерфейс ввода на основе командной строки с использованием языка Python (начиная с Sage версии 9.0 — Python версии 3, ранее — Python версии 2).
Поддерживаются параллельные вычисления с использованием как многоядерных процессоров, многопроцессорных систем, так и систем распределённых вычислений.
Матанализ реализован на основе систем Maxima и SymPy. Линейная алгебра реализована на основе систем GSL, SciPy и NumPy. Реализованы собственные библиотеки элементарных и специальных математических функций. Есть средства работы с матрицами и массивами данных с поддержкой разреженных массивов. Имеются различные статистические библиотеки функций, использующие функциональность R и SciPy.
Функции и данные можно выводить в виде плоских и трёхмерных графиков. Есть набор инструментов для добавления собственного пользовательского интерфейса к вычислениям и приложениям[3]. Имеются средства подготовки научно-технической документации с использованием редактора формул и возможностью встраивания Sage в документацию формата LaTeX[4].
Поддерживается импорт и экспорт различных форматов данных: изображений, видео, аудио, САПР, ГИС, документов и медицинских форматов. Для обработки изображений используются pylab и Python; имеются средства теоретико-графового анализа и визуализации графов.
Есть возможность соединения с базами данных. Поддерживаются различные сетевые протоколы, включая HTTP, NNTP, IMAP, SSH, IRC, FTP.
Реализованы программные интерфейсы для работы с системами Mathematica (также Sage может быть вызван из интерфейса Mathematica[5][6]), Magma и Maple.
Исходный код и исполняемые файлы Sage доступны для скачивания. При сборке системы многие входящие в комплект библиотеки будут автоматически настроены для оптимальной работы на данном оборудовании, принимая в расчёт количество процессоров и ядер, размер кэш-буферов и поддержку специальных наборов инструкций, например SSE.
В процессе разработки Sage Уильям Стейн основывался на том, что для создания достойной альтернативы системам Magma, Maple, Mathematica, и MATLAB потребуются сотни или тысячи человеко-лет, если начинать процесс разработки с нуля, при этом существует большое количество готового математического программного обеспечения с открытым исходным кодом, но написанного на различных языках программирования, из которых наиболее встречаемыми являются Си, C++, Фортран и Python.
Таким образом, вместо того, чтобы начинать с нуля, было решено объединить всё специализированное математическое программное обеспечение в систему с общим интерфейсом. Конечному пользователю необходимо лишь знать язык Python. Если для какой-то частной задачи не существовало программного обеспечения с открытым кодом, тогда стояла задача написания соответствующего блока для Sage, при этом, в отличие от коммерческих систем компьютерной алгебры, часто использовались исходные коды уже имеющегося свободного программного обеспечения.
К разработке Sage привлекаются как профессионалы, так и студенты. Разработчики работают на общественных началах и поддерживаются грантами[7].
Sage — свободное программное обеспечение, распространяемое по условиям лицензии GNU General Public License версии 2+. Исходный код может быть скачан с официального сайта. Также доступны выпуски, находящиеся в процессе разработки, хотя они не рекомендуются обычным пользователям. Исполняемые файлы доступны для операционных систем Linux, Windows, OS X и Solaris (как под архитектуру x86, так и SPARC). Также доступен live CD с версией Linux, что позволяет опробовать Sage без установки на компьютер.
Пользователи могут использовать онлайн-версию Sage. При этом имеются ограничения на объём доступной памяти и конфиденциальность работы.
В 2007 году Sage выиграл первый приз международного конкурса свободного программного обеспечения Les Trophées du Libre[англ.] в разделе научного программного обеспечения[8].
Алгебра | GAP, Maxima, Singular |
Алгебраическая геометрия | Singular |
Арифметика произвольной точности | GMP, MPFR, MPFI, NTL |
Арифметическая геометрия | PARI, NTL, mwrank, ecm |
Матанализ | Maxima, SymPy, GiNaC |
Комбинаторика | Symmetrica, Sage-Combinat |
Линейная алгебра | Linbox, IML |
Теория графов | NetworkX |
Теория групп | GAP |
Численные расчёты | GSL, SciPy, NumPy, ATLAS |
Интерфейс командной строки | IPython |
Базы данных | ZODB, Python Pickles, SQLite |
Графический интерфейс | Sage Notebook, jsmath |
Графика | Matplotlib, Tachyon3d, GD, Jmol |
Интерпретатор команд | Python |
Сетевые возможности | Twisted |
x,a,b,c = var('x,a,b,c')
log(sqrt(a)).simplify_log() # returns (log(a))/2
log(a/b).simplify_log() # returns log(a) - log(b)
sin(a+b).simplify_trig() # returns cos(a)*sin(b) + sin(a)*cos(b)
cos(a+b).simplify_trig() # returns cos(a)*cos(b) - sin(a)*sin(b)
(a+b)^5 # returns (b + a)^5
expand((a+b)^5) # returns b^5 + 5*a*b^4 + 10*a^2*b^3 +
# 10*a^3*b^2 + 5*a^4*b + a^5
limit((x^2+1)/(2+x+3*x^2), x=infinity) # returns 1/3
limit(sin(x)/x, x=0) # returns 1
diff(acos(x),x) # returns -1/sqrt(1 - x^2)
f = exp(x)*log(x)
f.diff(x,3) # returns e^x*log(x) + 3*e^x/x - 3*e^x/x^2 + 2*e^x/x^3
solve(a*x^2 + b*x + c, x) # returns [x == (-sqrt(b^2 - 4*a*c) - b)/(2*a),
# x == (sqrt(b^2 - 4*a*c) - b)/(2*a)]
f = x^2 + 432/x
solve(f.diff(x)==0,x) # returns [x == 3*sqrt(3)*I - 3,
# x == -3*sqrt(3)*I - 3, x == 6]
t = var('t') # define a variable t
x = function('x',t) # define x to be a function of that variable
DE = lambda y: diff(y,t) + y - 1
desolve(DE(x(t)), [x,t]) # returns '%e^-t*(%e^t+%c)'
A = Matrix([[1,2,3],[3,2,1],[1,1,1]])
y = vector([0,-4,-1])
A.solve_right(y) # returns (-2, 1, 0)
A.eigenvalues() # returns [5, 0, -1]
B = Matrix([[1,2,3],[3,2,1],[1,2,1]])
B.inverse()
# [ 0 1/2 -1/2]
# [-1/4 -1/4 1]
# [ 1/2 0 -1/2]
# Moore-Penrose pseudo-inverse
C = Matrix([[1 , 1], [2 , 2]])
C.pseudoinverse()
# [1/10 1/5]
# [1/10 1/5]
prime_pi(1000000) # returns 78498, the number of primes less than one million
E = EllipticCurve('389a') # construct an elliptic curve from its Cremona label
P, Q = E.gens()
7*P + Q # returns (2869/676 : -171989/17576 : 1)
Построение в Sage лемнискаты Жероно, используя неявно заданную функцию.
Лемниската Жероно — плоская кривая, удовлетворяющая уравнению .
## Лемниската Жероно
## x^4=a^2*(x^2-y^2)
a=1
var('x y')
pl=implicit_plot(x^4-(a^2)*(x^2-y^2), (x,-a,a), (y,-a,a),linewidth=2, gridlines=True,frame=False,axes=True)
pl.show()
Основные выпуски:
Версия | Дата выпуска | Описание |
---|---|---|
0.1 | Январь 2005 | Включена Pari, но отсутствуют GAP и Singular |
0.2 — 0.4 | С марта по июль 2005 | База данных Cremona, мультивариантные полиномы, large finite fields и больше документации |
0.5 — 0.7 | С августа по сентябрь 2005 | Векторные поля, кольца, modular symbols и windows usage |
0.8 | Октябрь 2005 | В полном составе включены GAP, Singular |
0.9 | Ноябрь 2005 | Добавлены Maxima и clisp |
1.0 | Февраль 2006 | |
2.0 | Январь 2007 | |
3.0 | Апрель 2008 | Интерактивная оболочка, интерфейс к языку R |
4.0 | May 2009 | Поддержка Solaris 10, поддержка 64bit OSX |
5.0 | Май 2012[9] | Поддержка OSX Lion |
6.0 | Декабрь 2013 | Репозиторий Sage перемещён в Git[10] |
7.0 | Январь 2016 | |
8.0 | Июль 2017 | Поддержка Windows |
9.0 | Январь 2020 | Переход на Python 3 |