• No se han encontrado resultados

Polinomios. Taller de Álgebra I. Segundo cuatrimestre de 2013

N/A
N/A
Protected

Academic year: 2021

Share "Polinomios. Taller de Álgebra I. Segundo cuatrimestre de 2013"

Copied!
12
0
0

Texto completo

(1)

Polinomios

Taller de ´Algebra I

(2)

Polinomios

Vamos a pensar en un polinomio como una serie de coeficientes.

Para hacerlo m´as f´acil, vamos a pensar espec´ıficamente en Z[X ]. Es decir, los polinomios con coeficientes enteros.

Entonces, querr´ıamos representar al polinomio

p(x ) = a0+ a1x + a2x2+ a3x3+ · · · + anxn

Como la lista de coeficientes

[a0, a1, a2, . . . , an]

Entonces, queremos que nuestros polinomios sean [Integer ]s. Luego vamos a refinar esta idea, pero por ahora trabajemos con esto.

(3)

Polinomios

Vamos a ver c´omo est´an implementadas algunas de las operaciones que vamos a querer hacer con polinomios. Luego vamos a implementar algunas nosotros.

Para sumar, sumamos coeficiente a coeficiente:

s u m a r :: [ I n t e g e r ] - > [ I n t e g e r ] - > [ I n t e g e r ] s u m a r [] x = x

s u m a r x [] = x

s u m a r ( x : xs ) ( y : ys ) = ( x + y ) : s u m a r xs ys

Para negar un polinomio (es decir, de p(x) obtener -p(x)), tambi´en negamos coeficiente a coeficiente:

n e g a r :: [ I n t e g e r ] - > [ I n t e g e r ] n e g a r [] = []

n e g a r ( x : xs ) = ( - x ) : n e g a r xs

Para restar, sumamos y negamos:

r e s t a r :: [ I n t e g e r ] - > [ I n t e g e r ] - > [ I n t e g e r ] r e s t a r x y = s u m a r x ( n e g a r y )

(4)

Multiplicaci´

on

Para multiplicar, podemos pensar que si tenemos un polinomio

p(x ) = a0+ a1x + a2x2+ · · · + anxn

Lo podemos escribir como

p(x ) = a0+ x ∗ t(x ) Con t un polinomio.

Entonces, al multiplicar p(x ) ∗ q(x ), lo que tenemos es

p(x ) ∗ q(x ) = (a0+ x ∗ t(x )) ∗ q(x ) = a0∗ q(x) + x ∗ t(x) ∗ q(x)

El ´ultimo paso es multiplicar t(x ) por q(x ), y t(x ) tiene menos coeficientes que p(x ). Si supiera multiplicar a0∗ q(x), y multiplicar polinomios por x , entonces ya sabr´ıa multiplicar polinomios!

(5)

Multiplicaci´

on

¿C´omo multiplicarmos por una constante? Pues como siempre, coeficiente a coeficiente :)

m u l t C o n s t a n t e :: I n t e g e r - > [ I n t e g e r ] - > [ I n t e g e r ] m u l t C o n s t a n t e _ [] = []

m u l t C o n s t a n t e k ( x : xs ) = ( k * x ) : m u l t C o n s t a n t e k xs

¿Y c´omo multiplicamos por x ? Poniendo un cero al principio!

m u l t X :: [ I n t e g e r ] - > [ I n t e g e r ] m u l t X xs = 0: xs

(6)

Multiplicaci´

on

Finalmente, multiplicamos polinomios siguiendo lo que hicimos antes con ecuaciones: m u l t i p l i c a r :: [ I n t e g e r ] - > [ I n t e g e r ] - > [ I n t e g e r ] m u l t i p l i c a r [] x = [] m u l t i p l i c a r ( a : t ) q = s u m a r aq xtq w h e r e aq = m u l t C o n s t a n t e a q xtq = m u l t X ( m u l t i p l i c a r t q )

(7)

Tipo de datos

Nos gustar´ıa poder decir que si p y q son dos polinomios, entonces p + q, p − q, y p ∗ q lo son. Para hacer esto, vamos a usar algo que se llaman “type classes”.

Una type class es un conjunto de tipos, todos los cuales implementan ciertas funciones. Por ejemplo, el typeclass Num, que vamos a ver ahora, es el conjunto de todos los tipos que implementan (a grandes razgos, ahora vamos a ver exactamente) ∗, +, y −.

Lo que queremos, entonces, es que nuestro tipo de datos sea un elemento del typeclass Num. Veamos c´omo se hace esto:

(8)

Typeclass

Primero, declaramos nuestro tipo de datos, llamado “Polinomio”.

d a t a P o l i n o m i o = P [ I n t e g e r ]

Ahora, decimos que es miembro de la typeclass “Num”. (No se asusten! Esto es lo ´ultimo “nuevo” que vamos a ver :))

i n s t a n c e Num P o l i n o m i o where −− como sumo d o s p o l i n o m i o s ? (P x s ) + (P y s ) = P ( sumar x s y s ) −− como m u l t i p l i c o d o s p o l i n o m i o s ? (P x s ) ∗ (P ys ) = P ( m u l t i p l i c a r xs ys ) −− como n i e g o un p o l i n o m i o ? n e g a t e (P x s ) = P ( n e g a r x s ) −− s i t e n g o un e n t e r o x , como l o t r a n s f o r m o en un p o l i n o m i o ? f r o m I n t e g e r x = P [ x ] −− p a r a un P o l i n o m i o , e l s i g n o y e l v a l o r a b s o l u t o no t i e n e n −− mucho s e n t i d o , a s i que l o s d e j a m o s como u n d e f i n e d .

signum = u n d e f i n e d abs = u n d e f i n e d

(9)

Show

Para hacernos la vida m´as c´omoda, tambi´en hay otro typeclass llamado Show. Es el conjunto de tipos que se pueden mostrar en pantalla, y lo que hace falta definir para ser parte de Show, es una funci´on llamada show. Entonces, hagamos que Polinomio sea un miembro de Show. Esto no es particularmente importante, pero s´ı les hace las cosas m´as lindas, as´ı que se los mostramos por las dudas.

m o s t r a r : : [ I n t e g e r ] −> S t r i n g m o s t r a r [ ] = ” 0 ”

−− como I n t e g e r e s t a en Show , podemos d e c i r ” show x ” m o s t r a r [ x ] = show x m o s t r a r [ x , y ] = show x ++ ” + ” ++ show y ++ ” x ” m o s t r a r ( x : y : z s ) = m o s t r a r [ x , y ] ++ r e s t z s 2 where r e s t [ ] = ” ” r e s t ( x : x s ) k = ” + ” ++ show x ++ ” x ˆ ” ++ show k ++ r e s t x s ( k + 1 ) i n s t a n c e Show P o l i n o m i o where show (P x ) = m o s t r a r x

(10)

as comodidad

Por ´ultimo, para hacernos la vida a´un m´as c´omoda, definimos a la variable x, as´ı podemos decir 3*x^2 + 4:

x :: P o l i n o m i o x = P [0 , 1]

(11)

Probando...

Probemos esto!

En un archivo con el c´odigo de arriba, escribimos

p :: P o l i n o m i o

p = 3 * x ^2 + 4 * x + 5

Si cargamos este archivo con GHCi, podemos ver

Prelude> p 5 + 4x + 3x^2 Prelude> p^2 25 + 40x + 46x^2 + 24x^3 + 9x^4 Prelude> p^2 - 5*p - 3 -3 + 20x + 31x^2 + 24x^3 + 9x^4

(12)

Ejercicios

Para esto, bajen el archivo Polinomios.hs de la p´agina de la materia. Para cada funci´on, elijan si hacerla como parte del archivo (es decir, teniendo acceso al constructor P) o fuera de ´el, usando s´olo las funciones ya exportadas.

1. Hacer una funci´on

evaluar :: Polinomio -> Integer -> Integer que, dado un polinomio entero p y un entero x , devuelva p(x ).

2. Usar la funci´on divPoli y con ella hacer la funci´on mcd poli :: Polinomio -> Polinomio -> Polinomio, que compute el m´aximo com´un divisor entre dos polinomios, usando el algoritmo de Euclides. Notar que no siempre existe!

3. Hacer una funci´on derivar :: Polinomio -> Polinomio que derive el polinomio dado.

4. Hacer una funci´on raicesRacionales :: Polinomio -> Bool que devuelva True exactamente cuando el polinomio tiene ra´ıces en Q.

Referencias

Documento similar

Por ejemplo, hemos visto cómo el polinomio de Taylor nos sirve para aproximar una función, pero, en lugar de representar la función y dicho polinomio, podríamos representar

Calcular los l´ımites

El nuevo Decreto reforzaba el poder militar al asumir el Comandante General del Reino Tserclaes de Tilly todos los poderes –militar, político, económico y gubernativo–; ampliaba

pygmaeus mostraron en el análisis por citometría de flujo un potencial de membrana muy superior al de fibroblastos control (Figura 10.A). Este aumento es también en este

El inconveniente operativo que presenta el hecho de que la distribuci´ on de probabilidad de una variable aleatoria es una funci´ on de conjunto se resuelve mediante el uso de

Como el lado derecho de la ecuaci´on dada tiene un polinomio de segundo grado y una exponencial, usando el principio de superposici´on 1.1.18 y el m´etodo de los

Y en la figura 4.2, podemos ver la funci´ on original (en negro) y la reconstrucci´ on usando Lagrange (rojo discontinuo), para orden 4, y un espaciado entre nodos de reconstrucci´

En este proyecto se plantea el uso de polinomios ortogonales en cualquier conjunto de datos; este hecho permite generar redes neuronales muy eficientes y que se