Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1
´
Algebra y Matem´atica Discreta
Sesi´on de Pr´acticas 1
(c) 2013 Leandro Mar´ın, Francisco J. Vera, Gema M. D´ıaz
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Estructuras Algebraicas
La Estructura como Variable
Tenemos una gran cantidad de estructuras algebraicas definidas dentro de sageque podemos utilizar.
Una de las m´as sencillas es el conjunto de los n´umeros enteros
Z. En sageeste conjunto se denota por ZZ. Si escribimos
ZZ
el programa nos responder´aInteger Ring, es decir anillo de los n´umeros enteros.
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Estructuras Algebraicas
Operaciones con Enteros
Vamos a hacer algunas operaciones b´asicas en los n´umeros enteros. La suma, resta y multiplicaci´on se realizan con los s´ımbolos habituales +,-y*.
Si escribimos
a = 6*7*8*9
print a
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Estructuras Algebraicas
Divisi´on
La divisi´on requiere un poco m´as de explicaci´on, porque podemos hacer la siguiente operaci´on:
print a/16
y obtenemos 189 porque la divisi´on es exacta, pero si hacemos print a/10
obtenemos 15125 . En este caso la divisi´on no es exacta y nos ha dejado la operaci´on en forma fraccionaria.
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Estructuras Algebraicas
Cociente y Resto
El realidad este operador en los n´umeros enteros no es como en otros lenguajes, el cociente de la divisi´on.
Para obtener el cociente de la divisi´on tenemos que poner print a//10
con lo que obtenemos 302.
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Estructuras Algebraicas
El conjunto de los n´umeros racionales se denotaQQ y el de los n´umeros reales RR.
El conjunto de los n´umeros realesRR utiliza representaciones decimales finitas del n´umero.
Cuando tenemos un elemento en un conjunto y queremos llevarlo a otro, lo que hacemos es utilizar el nombre de la estructura, as´ı por ejemplo
a = 1/3 b = RR ( a )
print a
print b
nos dar´a los resultados 1
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Estructuras Algebraicas
En realidad si escribimos
RR
nos dice Real Field with 53 bits of precision, es decir, cuerpo de los n´umeros reales con 53 bits de precisi´on. Es una precisi´on suficientemente buena para la mayor´ıa de nuestras necesidades.
Si en alguna ocasi´on necesitamos ampliarla (o reducirla) es posible.
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Estructuras Algebraicas
Si intentamos forzar a que un elemento est´e dentro de una estructura en la que no puede estar, obtenemos un error, por ejemplo, si ponemosZZ(2/3) lo que obtenemos es un error
---TypeError Traceback (most recent call last)
/home/leandro/docencia/AMD12/quickref/<ipython console> in <module>()
/usr/local/sage-5.0.beta6/local/lib/python2.7/site-packages/sage/structure/parent.so /in sage.structure.parent.Parent.__call__ (sage/structure/parent.c:7886)()
/usr/local/sage-5.0.beta6/local/lib/python2.7/site-packages/sage/rings/rational.so /in sage.rings.rational.Q_to_Z._call_ (sage/rings/rational.c:23746)()
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Listas
Listas
Los objetos ensage se pueden agrupar en listas.
Una lista no es mas que una estructura en la que tenemos unos objetos en posiciones concretas. Por ejemplo
m i l i s t a = [1 ,2 , 3]
asigna a la variable milista la lista formada por los n´umeros 1, 2 y 3.
Los elementos est´an numerados desde 0, as´ımilista[0]
tendr´a el valor 1, milista[1] tendr´a el valor 2 y
milista[2] tendr´a el valor 3.
Los valores milista[n] se pueden usar como variables ordinarias y hacer cualquier operaci´on sobre ellas.
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Listas
Recorriendo Listas
La gran ventaja de tener los n´umeros en una lista, es que podemos recorrer los elementos de la lista.
Si ponemos
m i n u e v a l i s t a = [1 ,4 ,7 ,-1] for x in m i n u e v a l i s t a:
print x*x
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Listas
for,in,:,etc.
Hay varios puntos importantes en el c´odigo:
m i n u e v a l i s t a = [1 ,4 ,7 ,-1] for x in m i n u e v a l i s t a:
print x*x
Utilizamos forpara recorrer la lista y decimos c´omo queremos llamar a los elementos: los llamaremos x.
Por tanto xir´a recorriendo cada uno de los valores de la lista. Despu´es ponemos : y la siguiente l´ınea tiene que estar
desplazada a la derecha un n´umero de espacios. Ese
desplazamiento hace asage reconocer que esas intrucciones est´an en el bucle.
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Listas
El comando
range
Las listas de n´umeros [0,1,2,3,...,n-1] se pueden generar con el comandorange(n)
Si escribimosrange(10) nos devolver´a la lista
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Podemos usarlo directamente for j in range( 10 ):
print j
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Listas
El comando
range
(II)
Si escribimosrange(3,6) nos devolver´a [3,4,5]. Notemos que el n´umero 6 no se alcanza, enrange(a,b)el primer valor de la lista ser´aa y el ´ultimo b−1.
Tambi´en podemos hacer listas que en cada paso sumen una cantidad distinta de 1, por ejemplo
range(7 , 12 , 2 )
Nos escribir´a [7,9,11].
Tambi´en podemos is hacia abajo, por ejemplo
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Listas
Comandos para Listas
Hay muchos comandos que podemos usar sobre listas. Vamos a ver algunos:
Si milistaes una variable que contiene una lista, entonces su longitud eslen(milista)
Si queremos saber el n´umero de veces que un valor aparece en una lista,milista.count(x) nos dice el n´umero de veces que xaparece en milista(que tambi´en puede ser 0) El comandosum(milista) nos dice cuanto suman todos los elementos de la lista y prod(milista)su producto.
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Listas
Una Programaci´on Elegante
Podemos crear listas como sigue:
c = [x ^ 2 for x in range( 5 )]
Esto nos proporciona la lista [0, 1, 4, 9, 16]y la asigna a la variable c.
Podemos incluso a˜nadir condiciones:
c = [sqrt( x ^ 2-7 ) for x in range( 5 ) if x ^ 2-7 > 0] asignar´a a cla lista [sqrt(2), 3].
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Los N´umeros Enteros
N´umeros en una Base
Dado un n´umero entero, podemos representarlo en diferentes bases. Habitualmente lo representamos en base 10, pero con
sage podemos transformarlo en cualquier otra base. Si ponemos
a = ZZ ( 100 ) bin ( a ) hex ( a )
Obtenemos respectivamente las representaciones binarias y hexadecimal del n´umero, 0b1100100y64.
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Los N´umeros Enteros
Listas de Cifras
Si queremos la lista de todas las cifras, lo podemos hacer con
lascifras = a.digits(2)
Las cifras van desde la menos significativa hasta la m´as significativa.
El n´umero de cifras podemos saberlo conlen(lascifras)o directamente a.ndigits(2).
Lo que se ha hecho para la base 2, se puede hacer para cualquier base.
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Los N´umeros Enteros
Divisibilidad
Una de las propiedades m´as interesantes de los n´umeros enteros es la divisibilidad.
Para ver si dos n´umeros son divisibles entre s´ı, podemos calcular el resto y ver que es cero o utilizar un comando especial que nos lo dice:
a = ZZ ( 10 ) b = ZZ ( 5 ) b . d i v i d e s ( a )
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Los N´umeros Enteros
Divisores de un N´umero
Tambi´en podemos calcular la lista de divisores de un n´umero. Nos dar´a los divisores positivos.
El comando es
150 . d i v i s o r s ()
Nos devolver´a la lista
[1 , 2 , 3 , 5 , 6 , 10 , 15 , 25 , 30 , 50 , 75 , 150] Esta lista se puede asignar a una variable, recorrerla, o cualquier otra operaci´on que queramos hacerle.
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Los N´umeros Enteros
N´umeros Primos
Un n´umero es primo si no es 1 y sus ´unicos divisores son ´el mismo y la unidad.
Podemos preguntarnos si un n´umero es primo de diferentes formas, por ejemplo
1 . i s _ p r i m e () 2 . i s _ p r i m e ()
nos devolver´an respectivamenteFalse yTrue.
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Los N´umeros Enteros
Factorizaci´on
Podemos descomponer un n´umero en producto de sus factores primos, lo que se conce como factorizaci´on.
Si ponemos por ejemplo
factor ( 1 2 3 4 5 6 7 8 9 0 )
Nos devolver´a 2·32
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Polinomios
El Anillo de Polinomios
Se pueden definir tambi´en estructuras m´as complejas, por ejemplo los polinomios.
Podemos asignar a una variable toda una estructura algebraica, por ejemplo:
var (’x ’)
R = P o l y n o m i a l R i n g ( QQ ,’x ’) S = P o l y n o m i a l R i n g ( RR ,’x ’)
nos asignar´a aRel conjunto de los polinomios con coeficientes en los n´umeros racionales y variablex. En el caso de Sser´an los polinomios con coeficientes reales.
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica
Polinomios
Polinomios
Con las anteriores definiciones, podemos poner
p = R ( x ^ 2-2 ) q = S ( x ^ 2-2 )
Podemos preguntar a sage si p yq son iguales,
p = = q
Nos devolver´a True, es decir, son el mismo polinomio, pero su
Algebra y Matem´atica Discreta Sesi´on de Pr´acticas 1 Aritm´etica Polinomios
Polinomios (II)
Si escribimos factor ( p ) factor ( q ) Obtenemos respectivamente (x2−2) (x−1.41421356237310)·(x+ 1.41421356237310)Eso es porque como polinomio con coeficientes enQel polinomio es irreducible, pero como polinomio con coeficientes reales no lo es.