Anillos Elementales¶
Cuando definimos matrices, vectores o polinomios, a veces es útil, incluso necesario, especificar el «anillo» sobre el que están definidos. Un anillo es una construcción matemática consistente en un conjunto de elementos sobre los que está bien definidas las operaciones de suma y producto; si la noción de anillo no te resulta familiar, probablemente sólo necesitas conocer estos cuatro anillos:
los enteros
, a los que nos referimos en Sage porZZ
.los números racionales – e.g., fracciones, o cocientes de números enteros –,
QQ
en Sage.los números reales,
RR
en Sage.los números complejos,
CC
en Sage.
Es importante conocer estas distinciones porque el mismo polinomio, por
ejemplo, puede ser tratado de forma diferente dependiendo del anillo sobre el
que se ha definido. Por ejemplo, el polinomio
sage: ratpoly.<t> = PolynomialRing(QQ)
sage: realpoly.<z> = PolynomialRing(RR)
Veamos el punto que hicimos antes sobre factorizar
sage: factor(t^2-2)
t^2 - 2
sage: factor(z^2-2)
(z - 1.41421356237310) * (z + 1.41421356237310)
Comentarios similares se aplican a las matrices: la forma reducida por filas de una matriz puede depender del anillo en que está definida, al igual que sus autovalores y autofunciones. Hay más construcciones con polinomios en la sección Polinomios, y más construcciones con matrices en Álgebra Lineal.
El símbolo I
representa la raíz cuadrada de i
es un
sinónimo de I
. Por supuesto, no es un número racional:
sage: i # raíz cuadrada de -1
I
sage: i in QQ
False
Nota: El código siguiente puede no funcionar como esperas si hemos asignado
otro valor a la variable i
, por ejemplo si la hemos usado como variable
interna de un bucle. En este caso, podemos devolver i
a su valor original:
sage: reset('i')
Hay una sutileza al definir números complejos: el símbolo i
representa una
raíz cuadrada de CC(i)
o CC.0
o CC.gen(0)
obtenemos el número complejo
de coma flotante que es la raíz cuadrada de
sage: i = CC(i) # número complejo de coma flotante
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() # parte imaginaria
0.666666666666667
sage: z.real() == a # conversión automática antes de la comparación
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 # conversión automática antes de la suma
0.766666666666667
sage: 0.1 + 2/3 # las reglas de conversión son simétricas en Sage
0.766666666666667
Veamos más ejemplos de anillos elementales en Sage. Como mencionamos antes,
nos podemos referir al anillo de números racionales usando QQ
, o también
RationalField()
(field, o cuerpo, se refiere a un anillo en el que
el producto es conmutativo y todo elemento excepto el cero tiene un inverso
para la multiplicación. De este modo, los racionales son un cuerpo, pero los
enteros no:
sage: RationalField()
Rational Field
sage: QQ
Rational Field
sage: 1/2 in QQ
True
El número decimal 1.2
se considera que está en QQ
: los números
decimales, que también son racionales, se pueden convertir a racionales de
forma automática. Sin embargo, los números
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
En Sage también podemos trabajar con otros anillos, como cuerpos finitos,
enteros
sage: GF(3)
Finite Field of size 3
sage: # es necesario dar un nombre al generador si el número
sage: GF(27, 'a') # de elementos no es primo
Finite Field in a of size 3^3
sage: Zp(5)
5-adic Ring with capped relative precision 20
sage: sqrt(3) in QQbar # clausura algebraica de QQ
True