.. _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