Álgebra y matemática discreta sesión de prácticas 1

24
´ Algebra y Matem´ atica Discreta Sesi´ondePr´ 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 16 Sep 2013 - 22 Sep 2013

Upload: nguyenque

Post on 01-Jan-2017

228 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Algebra y Matematica DiscretaSesion de Practicas 1

(c) 2013 Leandro Marın, Francisco J. Vera, Gema M. Dıaz

16 Sep 2013 - 22 Sep 2013

Page 2: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Estructuras Algebraicas

La Estructura como Variable

Tenemos una gran cantidad de estructuras algebraicasdefinidas dentro de sage que podemos utilizar.

Una de las mas sencillas es el conjunto de los numeros enterosZ. En sage este conjunto se denota por ZZ.

Si escribimos

ZZ

el programa nos respondera Integer Ring, es decir anillo delos numeros enteros.

ZZ es una variable mas del sistema.

Page 3: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Estructuras Algebraicas

Operaciones con Enteros

Vamos a hacer algunas operaciones basicas en los numerosenteros. La suma, resta y multiplicacion se realizan con lossımbolos habituales +, - y *.

Si escribimos

a = 6*7*8*9

print a

obtendremos 3024.

Page 4: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Estructuras Algebraicas

Division

La division requiere un poco mas de explicacion, porquepodemos hacer la siguiente operacion:

print a/16

y obtenemos 189 porque la division es exacta, pero si hacemos

print a/10

obtenemos 15125

. En este caso la division no es exacta y nosha dejado la operacion en forma fraccionaria.

Page 5: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Estructuras Algebraicas

Cociente y Resto

El realidad este operador en los numeros enteros no es comoen otros lenguajes, el cociente de la division.

Para obtener el cociente de la division tenemos que poner

print a // 10

con lo que obtenemos 302.

El resto de la division se calcula utilizando el sımbolo %.

Page 6: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Estructuras Algebraicas

El conjunto de los numeros racionales se denota QQ y el de losnumeros reales RR.

El conjunto de los numeros reales RR utiliza representacionesdecimales finitas del numero.

Cuando tenemos un elemento en un conjunto y queremosllevarlo a otro, lo que hacemos es utilizar el nombre de laestructura, ası por ejemplo

a = 1/3

b = RR(a)

print a

print b

nos dara los resultados 13y 0.333333333333333.

Page 7: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Estructuras Algebraicas

En realidad si escribimos

RR

nos dice Real Field with 53 bits of precision, esdecir, cuerpo de los numeros reales con 53 bits de precision.

Es una precision suficientemente buena para la mayorıa denuestras necesidades.

Si en alguna ocasion necesitamos ampliarla (o reducirla) esposible.

Page 8: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Estructuras Algebraicas

Si intentamos forzar a que un elemento este dentro de unaestructura en la que no puede estar, obtenemos un error, porejemplo, si ponemos ZZ(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)()

TypeError: no conversion of this rational to integer

Page 9: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Listas

Listas

Los objetos en sage se pueden agrupar en listas.

Una lista no es mas que una estructura en la que tenemosunos objetos en posiciones concretas. Por ejemplo

milista = [1,2,3]

asigna a la variable milista la lista formada por los numeros1, 2 y 3.

Los elementos estan numerados desde 0, ası milista[0 ]tendra el valor 1, milista[1 ] tendra el valor 2 ymilista[2 ] tendra el valor 3.

Los valores milista[n ] se pueden usar como variablesordinarias y hacer cualquier operacion sobre ellas.

Page 10: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Listas

Recorriendo Listas

La gran ventaja de tener los numeros en una lista, es quepodemos recorrer los elementos de la lista.

Si ponemos

minuevalista = [1,4,7,-1]

for x in minuevalista:

print x*x

Nos escribira los elementos 1,16,49 y 1.

Page 11: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Listas

for,in,:,etc.

Hay varios puntos importantes en el codigo:

minuevalista = [1,4,7,-1]

for x in minuevalista:

print x*x

Utilizamos for para recorrer la lista y decimos comoqueremos llamar a los elementos: los llamaremos x.

Por tanto x ira recorriendo cada uno de los valores de la lista.

Despues ponemos : y la siguiente lınea tiene que estardesplazada a la derecha un numero de espacios. Esedesplazamiento hace a sage reconocer que esas intruccionesestan en el bucle.

Page 12: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Listas

El comando range

Las listas de numeros [ 0,1,2,3,...,n-1] se puedengenerar con el comando range(n)

Si escribimos range(10) nos devolvera la lista[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Podemos usarlo directamente

for j in range(10):

print j

Nos escribira todos los numeros desde el 0 al 9.

Page 13: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Listas

El comando range (II)

Si escribimos range(3,6) nos devolvera [ 3,4,5].

Notemos que el numero 6 no se alcanza, en range(a,b) elprimer valor de la lista sera a y el ultimo b − 1.

Tambien podemos hacer listas que en cada paso sumen unacantidad distinta de 1, por ejemplo

range(7,12 ,2)

Nos escribira [ 7,9,11].

Tambien podemos is hacia abajo, por ejemplorange(10,0,-1)

Page 14: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Listas

Comandos para Listas

Hay muchos comandos que podemos usar sobre listas. Vamosa ver algunos:

Si milista es una variable que contiene una lista, entoncessu longitud es len(milista)

Si queremos saber el numero de veces que un valor aparece enuna lista, milista.count(x) nos dice el numero de vecesque x aparece en milista (que tambien puede ser 0)

El comando sum(milista) nos dice cuanto suman todos loselementos de la lista y prod(milista) su producto.

Page 15: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Listas

Una Programacion 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 asignaa la variable c.

Podemos incluso anadir condiciones:

c = [sqrt(x^2-7) for x in range(5) if x^2-7 > 0]

asignara a c la lista [ sqrt(2), 3].

Page 16: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Los Numeros Enteros

Numeros en una Base

Dado un numero entero, podemos representarlo en diferentesbases. Habitualmente lo representamos en base 10, pero consage podemos transformarlo en cualquier otra base.

Si ponemos

a = ZZ(100)

bin(a)

hex(a)

Obtenemos respectivamente las representaciones binarias yhexadecimal del numero, 0b1100100 y 64.

Page 17: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Los Numeros 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 massignificativa.

El numero de cifras podemos saberlo con len(lascifras) odirectamente a.ndigits(2).

Lo que se ha hecho para la base 2, se puede hacer paracualquier base.

Page 18: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Los Numeros Enteros

Divisibilidad

Una de las propiedades mas interesantes de los numerosenteros es la divisibilidad.

Para ver si dos numeros son divisibles entre sı, podemoscalcular el resto y ver que es cero o utilizar un comandoespecial que nos lo dice:

a = ZZ(10)

b = ZZ(5)

b.divides(a)

nos devolvera True.

Page 19: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Los Numeros Enteros

Divisores de un Numero

Tambien podemos calcular la lista de divisores de un numero.Nos dara los divisores positivos.

El comando es

150.divisors ()

Nos devolvera la lista

[1, 2, 3, 5, 6, 10 , 15 , 25 , 30 , 50 , 75 , 150]

Esta lista se puede asignar a una variable, recorrerla, ocualquier otra operacion que queramos hacerle.

Page 20: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Los Numeros Enteros

Numeros Primos

Un numero es primo si no es 1 y sus unicos divisores son elmismo y la unidad.

Podemos preguntarnos si un numero es primo de diferentesformas, por ejemplo

1.is_prime ()

2.is_prime ()

nos devolveran respectivamente False y True.

Esto es lo mismo que is_prime(1) y is_prime(2).

Page 21: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Los Numeros Enteros

Factorizacion

Podemos descomponer un numero en producto de sus factoresprimos, lo que se conce como factorizacion.

Si ponemos por ejemplo

factor(1234567890)

Nos devolvera 2 · 32 · 5 · 3607 · 3803.

Page 22: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Polinomios

El Anillo de Polinomios

Se pueden definir tambien estructuras mas complejas, porejemplo los polinomios.

Podemos asignar a una variable toda una estructuraalgebraica, por ejemplo:

var(’x’)

R = PolynomialRing(QQ ,’x’)

S = PolynomialRing(RR ,’x’)

nos asignara a R el conjunto de los polinomios con coeficientesen los numeros racionales y variable x . En el caso de S seranlos polinomios con coeficientes reales.

Page 23: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

Polinomios

Polinomios

Con las anteriores definiciones, podemos poner

p = R(x^2-2)

q = S(x^2-2)

Podemos preguntar a sage si p y q son iguales,

p == q

Nos devolvera True, es decir, son el mismo polinomio, pero sucomportamiento es diferente.

Page 24: Álgebra y Matemática Discreta Sesión de Prácticas 1

Algebra y Matematica Discreta Sesion de Practicas 1

Aritmetica

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 en Q elpolinomio es irreducible, pero como polinomio con coeficientesreales no lo es.