.. _section-rings:
Основные кольца
===============
При объявлении матриц, векторов или полиномов для них иногда полезно,
а иногда и необходимо определять "кольца", на которых они определены.
*Кольцо* - это математическая конструкция, в которой существуют
определенные понятия суммы и произведения. Если вы никогда о них не
слышали, то вам, вероятно, достаточно знать об этих четырех часто
используемых кольцах:
* целые числа `\{..., -1, 0, 1, 2, ...\}`, называемые ``ZZ`` в Sage.
* рациональные числа -- например, дроби или отношения целых чисел –-,
называемые ``QQ`` в Sage.
* вещественные числа, называемые ``RR`` в Sage.
* комплексные числа, называемые ``CC`` в Sage.
Знание различий между данными кольцами очень важно, так как один и
тот же полином, определенный в разных кольцах, может вести себя
по-разному. Например, полином `x^2-2` имеет два корня: `\pm \sqrt{2}`.
Эти корни не являются рациональными числами, поэтому если вы работаете
с полиномами с рациональными коэффициентами, то полином не будет
разлагаться на множители. С вещественными коэффициентами — будет.
Поэтому стоит определить кольцо, чтобы быть уверенным, что полученный
результат будет правильным. Следующие две команды задают множества
полиномов с рациональными коэффициентами и вещественными коэффициентами
соответственно. Множества названы "ratpoly" и "realpoly", но это не
столь важно в данном контексте, однако символьные сочетания ".<t>" и
".<z>" являются названиями переменных, использованных в двух случаях.
::
sage: ratpoly.<t> = PolynomialRing(QQ)
sage: realpoly.<z> = PolynomialRing(RR)
Факторизируем `x^2-2`:
.. link
::
sage: factor(t^2-2)
t^2 - 2
sage: factor(z^2-2)
(z - 1.41421356237310) * (z + 1.41421356237310)
Символ ``I`` обозначает квадратный корень из :math:`-1`; ``i`` — это
то же самое, что ``I``. Конечно, это не рациональное число:
::
sage: i # квадратный корень из -1
I
sage: i in QQ
False
Заметка: Вышеописанный код может работать не так, как задумывалось,
если переменной ``i`` было задано другое значение, например, если
оно было использовано, как счетчик для цикла. В таком случае введите
::
sage: reset('i')
для того, чтобы получить изначальное комплексное значение ``i``.
Есть одна тонкость в задании комплексных чисел: как описано выше,
символ ``i`` представляет квадратный корень из `-1`, но это корень
из `-1` как алгебраическое число. Вызов ``CC(i)`` или ``CC.gen(0)``
или ``CC.0`` вернет *комплексный* квадратный корень из `-1`.
::
sage: i = CC(i) # комплексное число с плавающей запятой
sage: i == CC.0
True
sage: a, b = 4/3, 2/3
sage: z = a + b*i
sage: z
1.33333333333333 + 0.666666666666667*I
sage: z.imag() # мнимая часть
0.666666666666667
sage: z.real() == a # автоматическое приведение типов перед сравнением
True
sage: a + b
2
sage: 2*b == a
True
sage: parent(2/3)
Rational Field
sage: parent(4/2)
Rational Field
sage: 2/3 + 0.1 # автоматическое приведение типов перед сложением
0.766666666666667
sage: 0.1 + 2/3 # приведение типов в Sage симметрично
0.766666666666667
Далее следуют примеры базовых колец в Sage. Как отмечено выше,
кольцо рациональных чисел обозначается как ``QQ``, а также как
``RationalField()`` (*поле* - это кольцо, в котором произведение
является коммутативным и в котором каждый ненулевой элемент имеет
обратную величину в этом кольце (рациональные числа являются полем,
а целые - нет):
::
sage: RationalField()
Rational Field
sage: QQ
Rational Field
sage: 1/2 in QQ
True
Десятичное число ``1.2`` рассматривается как ``QQ``: десятичные числа,
которые также являются рациональными, могут быть "приведены" к
рациональным числам. Числа `\pi` и `\sqrt{2}` не являются рациональными:
::
sage: 1.2 in QQ
True
sage: pi in QQ
False
sage: pi in RR
True
sage: sqrt(2) in QQ
False
sage: sqrt(2) in CC
True
Для использования в высшей математике Sage также может выполнять операции
с другими кольцами, как конечные поля, `p`-адические числа, кольцо
алгебраических чисел, полиномиальные кольца и матричные кольца. Далее
показаны некоторые из них:
::
sage: GF(3)
Finite Field of size 3
sage: GF(27, 'a') # если поле не простое, нужно задать имя генератора
Finite Field in a of size 3^3
sage: Zp(5)
5-adic Ring with capped relative precision 20
sage: sqrt(3) in QQbar # алгебраическое замыкакие QQ
True