Введение

Данное учебное пособие — лучший способ познакомиться с Sage за несколько часов. Вы можете использовать его в HTML или PDF формате, а также открыть интерактивную версию для непосредственной работы в Sage notebook: нажмите Help, потом Tutorial. (Интерактивная версия может быть недоступна на русском языке, но может быть более полной и точнее соответствовать текущей версии Sage.)

Существенная часть Sage написана на языке программирования Python, однако его знание не требуется для чтения данного пособия. Если Вы пожелаете узнать больше о Python (очень элегантный язык!), существует много прекрасных (и бесплатных) источников. Руководство для начинающих Python [PyB] перечисляет множество вариантов. Для первого же знакомства с Sage данное пособие является отличной отправной точкой. Итак:

sage: 2 + 2
4
sage: factor(-2007)
-1 * 3^2 * 223

sage: A = matrix(4,4, range(16)); A
[ 0  1  2  3]
[ 4  5  6  7]
[ 8  9 10 11]
[12 13 14 15]

sage: factor(A.charpoly())
x^2 * (x^2 - 30*x - 80)

sage: m = matrix(ZZ,2, range(4))
sage: m[0,0] = m[0,0] - 3
sage: m
[-3  1]
[ 2  3]

sage: E = EllipticCurve([1,2,3,4,5]);
sage: E
Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5
over Rational Field
sage: E.anlist(10)
[0, 1, 1, 0, -1, -3, 0, -1, -3, -3, -3]
sage: E.rank()
1

sage: k = 1/(sqrt(3)*I + 3/4 + sqrt(73)*5/9); k
36/(20*sqrt(73) + 36*I*sqrt(3) + 27)
sage: N(k)
0.165495678130644 - 0.0521492082074256*I
sage: N(k,30)      # Точность 30 бит
0.16549568 - 0.052149208*I
sage: latex(k)
\frac{36}{20 \, \sqrt{73} + 36 i \, \sqrt{3} + 27}
>>> from sage.all import *
>>> Integer(2) + Integer(2)
4
>>> factor(-Integer(2007))
-1 * 3^2 * 223

>>> A = matrix(Integer(4),Integer(4), range(Integer(16))); A
[ 0  1  2  3]
[ 4  5  6  7]
[ 8  9 10 11]
[12 13 14 15]

>>> factor(A.charpoly())
x^2 * (x^2 - 30*x - 80)

>>> m = matrix(ZZ,Integer(2), range(Integer(4)))
>>> m[Integer(0),Integer(0)] = m[Integer(0),Integer(0)] - Integer(3)
>>> m
[-3  1]
[ 2  3]

>>> E = EllipticCurve([Integer(1),Integer(2),Integer(3),Integer(4),Integer(5)]);
>>> E
Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5
over Rational Field
>>> E.anlist(Integer(10))
[0, 1, 1, 0, -1, -3, 0, -1, -3, -3, -3]
>>> E.rank()
1

>>> k = Integer(1)/(sqrt(Integer(3))*I + Integer(3)/Integer(4) + sqrt(Integer(73))*Integer(5)/Integer(9)); k
36/(20*sqrt(73) + 36*I*sqrt(3) + 27)
>>> N(k)
0.165495678130644 - 0.0521492082074256*I
>>> N(k,Integer(30))      # Точность 30 бит
0.16549568 - 0.052149208*I
>>> latex(k)
\frac{36}{20 \, \sqrt{73} + 36 i \, \sqrt{3} + 27}

Установка

Если на вашем компьютере не установлен Sage, и вы хотите попробовать некоторые команды, воспользуйтесь этой ссылкой: http://sagecell.sagemath.org.

Руководство по установке Sage можно просмотреть на главной странице Sage в разделе документации: [SA] Здесь мы приведем лишь несколько комментариев:

  1. Загруженный файл установки Sage является самодостаточным. То есть, хотя Sage использует Python, IPython, PARI, GAP, Singular, Maxima, NTL, GMP и т.д., отдельной установки вышеперечисленных пакетов не требуется, так как они уже включены. Однако, для использования некоторых функций Sage таких, как Macaulay или KASH, вы должны установить требующиеся файлы или иметь соответствующие программы на вашем компьютере.

  2. Предварительно скомпилированную бинарную версию Sage, которую также можно найти на веб-сайте, будет легче установить, чем версию в исходном коде. Просто распакуйте и выполните sage.

  3. Если вы желаете использовать пакет SageTeX, который позволяет вставлять результаты вычислений Sage в LaTeX файл, требуется сделать SageTeX известным вашей системе TeX. Для этого изучите секцию «Make SageTeX known to TeX» в Руководстве по установке Sage (данная ссылка ведет к локальному размещению копии руководства по установке). Это довольно просто; вам понадобится всего лишь скопировать один файл в директорию поиска TeX.

    Документация по использованию SageTeX находится в $SAGE_ROOT/venv/share/texmf/tex/latex/sagetex/, где «$SAGE_ROOT» соответствует директории, где установлен сам Sage, например, /opt/sage-9.6.

Работа в Sage

Работа в Sage может быть осуществлена несколькими путями:

Цели Sage

  • Полезный: предполагаемая аудитория пользователей Sage — это школьники старших классов, студенты, учителя, профессора и математики-исследователи. Цель: предоставить программное обеспечение, которое было бы полезно для изучения и исследований с помощью математических конструкций в алгебре, геометрии, теории чисел, численных вычислениях и т.д. Sage упрощает интерактивное экспериментирование с помощью математических объектов.

  • Эффективный: Будьте быстрыми в вычиселниях. Sage использует высокооптимизированное программное обеспечение, как GMP, PARI, GAP, and NTL, и поэтому является очень быстрым в операциях.

  • Свободный и открытый: Исходный код должен быть свободно доступным, тем самым предоставляя пользователям возможность понять, что именно выполняется системой, и легко дополнять ее. Так же, как и математики приобретают более глубокое понимание теоремы, углубляясь в ее доказательство, люди, выполняющие вычисления, в силах понять, как эти вычисления производятся, почитав документированный исходный код. Если вы используете вычисления Sage в своих публикациях, вы можете быть уверены, что ваши читатели будут всегда иметь доступ к Sage и всему исходному коду. Вы также можете архивировать и перераспределять используемую версию Sage.

  • Легко компилируемый: Sage должно быть легко скомпилировать из исходных кодов под GNU/Linux, OS X и Windows. Это предоставит пользователям возможность модифицировать и оптимизировать систему под свои предпочтения.

  • Взаимодействие: Обеспечить простые и надежные интерфейсы для многих других систем компьютерной алгебры, включая PARI, GAP, Singular, Maxima, KASH, Magma, Maple, and Mаthematica. Sage создан для объединения и расширения возможностей существующего математического программного обеспечения.

  • Хорошо документированный: Вы имеете доступ к учебному пособию, руководству по программированию, справочному руководству и how-to, включающие в себя многочисленные примеры и обсуждение математической подоплеки.

  • Расширяемый: Объявляйте новые типы данных или расширяйте встроенные, используйте код, написанный во множестве языков.

  • Дружественный: Вам будет легко понимать функциональность любого объекта, а также просматривать документацию и исходный код. Также имейте в виду высокий уровень поддержки пользователей.