************
Введение
************

Данное учебное пособие — лучший способ познакомиться с 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}

.. _installation:

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

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

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

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

#. Если вы желаете использовать пакет SageTeX, который позволяет вставлять
   результаты вычислений Sage в LaTeX файл, требуется сделать SageTeX
   известным вашей системе TeX. Для этого изучите секцию "Make SageTeX known
   to TeX" в `Руководстве по установке Sage <http://doc.sagemath.org/html/en/>`_
   (`данная ссылка <../../en/installation/index.html>`_ ведет к локальному размещению
   копии руководства по установке). Это довольно просто; вам понадобится
   всего лишь скопировать один файл в директорию поиска TeX.

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

Работа в Sage
================

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

-  **Notebook (графический интерфейс):** запустите ``sage -n jupyter``; читайте
    `Jupyter documentation on-line <https://jupyter-notebook.readthedocs.io/en/latest/notebook.html>`_,

-  **Интерактивная командная строка:** см. :ref:`chapter-interactive_shell`;

-  **Программы:** создание интерпретируемых и компилируемых программ в
   Sage (см. :ref:`section-loadattach` и :ref:`section-compile`);

-  **Скрипты:** создание самостоятельных скриптов на Python, использующих
   библиотеки Sage (см. :ref:`section-standalone`).

Цели 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,
   включающие в себя многочисленные примеры и обсуждение математической
   подоплеки.

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

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

