Download Representación con Sage de cuencas de puntos finales inducidas
Transcript
Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades III Jornada Sage/Python (Vigo, 2012) Representación con Sage de cuencas de puntos finales inducidas por funciones racionales Luis Javier Hernández Paricio, Miguel Marañón Grandes y Marı́a Teresa Rivas Rodrı́guez Universidad de La Rioja 21 de junio de 2012 Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 1 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Índice de contenidos 1 Marco teórico 2 Algoritmos 3 Manual de usuario 4 Aplicaciones 5 Dificultades Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 2 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Semiflujos discretos Definición Un semiflujo discreto en un conjunto (espacio topológico) X es una aplicación (continua) ϕ : N × X → X tal que: (i) ϕ(0, x) = x, ∀x ∈ X . (ii) ϕ(n, ϕ(m, x)) = ϕ(n + m, x), ∀x ∈ X , ∀n, m ∈ N. Denotaremos a un semiflujo discreto en X por (X , ϕ) y, cuando no haya lugar a confusión, usaremos X y n · x = ϕ(n, x) para abreviar. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 3 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Semiflujos discretos Definición Un semiflujo discreto en un conjunto (espacio topológico) X es una aplicación (continua) ϕ : N × X → X tal que: (i) ϕ(0, x) = x, ∀x ∈ X . (ii) ϕ(n, ϕ(m, x)) = ϕ(n + m, x), ∀x ∈ X , ∀n, m ∈ N. Denotaremos a un semiflujo discreto en X por (X , ϕ) y, cuando no haya lugar a confusión, usaremos X y n · x = ϕ(n, x) para abreviar. Un semiflujo discreto (X , ϕ) induce una aplicación (continua) ϕ1 : X → X y una aplicación (continua) f : X → X induce un semiflujo discreto ϕ : N × X → X , ϕ(n, x) = f n (x). Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 3 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Semiflujos discretos Definición Un semiflujo discreto en un conjunto (espacio topológico) X es una aplicación (continua) ϕ : N × X → X tal que: (i) ϕ(0, x) = x, ∀x ∈ X . (ii) ϕ(n, ϕ(m, x)) = ϕ(n + m, x), ∀x ∈ X , ∀n, m ∈ N. Denotaremos a un semiflujo discreto en X por (X , ϕ) y, cuando no haya lugar a confusión, usaremos X y n · x = ϕ(n, x) para abreviar. Un semiflujo discreto (X , ϕ) induce una aplicación (continua) ϕ1 : X → X y una aplicación (continua) f : X → X induce un semiflujo discreto ϕ : N × X → X , ϕ(n, x) = f n (x). Dado un semiflujo discreto X = (X , f ), la trayectoria de un punto x ∈ X , ϕx , viene dada por la sucesión (f n (x))n∈N . Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 3 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Puntos finales asociados a un semiflujo discreto Dado un espacio métrico (X , d) y un semiflujo discreto ϕ : N × X → X , llamaremos semiflujo discreto métrico al triple (X , d, ϕ). Definición Dado un semiflujo discreto métrico X = (X , d, f ), se define el espacio de puntos finales de X como el conjunto cociente Π(X , d) = {(f n (x))n∈N | x ∈ X } , ∼ donde (f n (x)) ∼ (f n (y )) si y sólo si (d(f n (x), f n (y ))) → 0, x, y ∈ X . Un elemento a = [(f n (x))] ∈ Π(X , d) se denomina punto final del semiflujo discreto métrico. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 4 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Cuencas de puntos finales Podemos definir la aplicación natural ω : X → Π(X , d), dada por ω(x) = [(f n (x))] = [(x, f (x), f 2 (x), . . . )]. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 5 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Cuencas de puntos finales Podemos definir la aplicación natural ω : X → Π(X , d), dada por ω(x) = [(f n (x))] = [(x, f (x), f 2 (x), . . . )]. Definición Sea (X , d) un semiflujo discreto métrico. El subconjunto denotado por Xa = ω −1 (a), a ∈ Π(X , d) se denomina cuenca del punto final a. Existe una partición inducida en X : G X = Xa , a∈Π(X ,d) a la que llamaremos ω-descomposición del semiflujo discreto métrico (X , d). Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 5 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Puntos fijos y periódicos Definición Sea X un semiflujo discreto y x un punto de X . (i) x es un punto fijo si para todo n ∈ N, n · x = x. (ii) x es un punto periódico si existe n ∈ N, n 6= 0, tal que n · x = x. Los subconjuntos de los puntos fijos y periódicos de un semiflujo discreto se denotarán por Fix(X ) y P(X ), respectivamente. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 6 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Puntos fijos y periódicos Definición Sea X un semiflujo discreto y x un punto de X . (i) x es un punto fijo si para todo n ∈ N, n · x = x. (ii) x es un punto periódico si existe n ∈ N, n 6= 0, tal que n · x = x. Los subconjuntos de los puntos fijos y periódicos de un semiflujo discreto se denotarán por Fix(X ) y P(X ), respectivamente. Sea (X , d) un semiflujo discreto métrico. Si y ∈ Fix(X ), podemos interpretar que y es un punto final: y ≡ [(y )] = [(y , y , . . . )] ∈ Π(X , d). Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 6 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Estructuras diferenciables y complejas en C ∪ {∞} Se pretende estudiar funciones racionales complejas extendidas sobre la esfera de Riemann h : C ∪ {∞} → C ∪ {∞}. Para ello, se consideran las siguientes estructuras: S2 ∼ = C ∪ {∞} ∼ = P1 (C) S 2 variedad diferenciable de dimensión 2 P1 (C) variedad compleja de dimensión 1 Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 7 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Biyección entre P1 (C) y S 2 Consideremos la biyección θ : S 2 → P1 (C) dada por: θ(r1 , r2 , r3 ) = [r1 + ir2 , 1 − r3 ]. La aplicación inversa de θ, θ−1 : P1 (C) → S 2 , viene dada por la fórmula: z̄t + z t̄ i(z̄t − z t̄) −t̄t + zz̄ −1 , , . θ ([z, t]) = t̄t + zz̄ t̄t + zz̄ t̄t + zz̄ Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 8 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Coordenadas homogéneas normalizadas Dado un punto [z, t] ∈ P1 (C), al par (z, t) se le conoce como las coordenadas homogéneas del punto y t/z (z/t) son las coordenadas absolutas de dicho punto. En los algoritmos, usaremos las siguientes coordenadas homogéneas normalizadas para cualquier punto de P1 (C): ( [z/t, 1], si |t| ≥ |z|, [z, t] = [1, t/z], si |t| < |z|. El uso de coordenadas homogéneas normalizadas evitará el desbordamiento de las coordenadas z, t en nuestros programas. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 9 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Funciones racionales complejas a(u p + a1 u p−1 + · · · + ap ) la expresión de una función (u q + b1 u q−1 + · · · + bq ) racional compleja, a ∈ C, a 6= 0. Si tomamos u = z/t y n = máx{p, q}, tenemos: a(z p t n−p + a1 z p−1 t n−p+1 + · · · + ap t n ) . z q t n−q + b1 z q−1 t n−q+1 + · · · + bq t n Sea h(u) = Tanto el numerador F (z, t) = a(z p t n−p + a1 z p−1 t n−p+1 + · · · + ap t n ) como el denominador G (z, t) = z q t n−q + b1 z q−1 t n−q+1 + · · · + bq t n son polinomios homogéneos en las variables z, t de grado n, de forma que [F (z, t), G (z, t)] ∈ P1 (C), h(u) = F (u, 1) . G (u, 1) Esta técnica permite trabajar con funciones racionales complejas en P1 (C) utilizando coordenadas homogéneas normalizadas. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 10 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Puntos fijos de una función racional Lema Si f es una función racional compleja representada por un par de polinomios homogéneos coprimos A(z, t), B(z, t) de grado n, entonces el conjunto [z1 , t1 ], . . . , [zn+1 , tn+1 ] de ceros de A(z, t)t − B(z, t)z es el conjunto de puntos fijos de f . Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 11 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Puntos fijos de una función racional Lema Si f es una función racional compleja representada por un par de polinomios homogéneos coprimos A(z, t), B(z, t) de grado n, entonces el conjunto [z1 , t1 ], . . . , [zn+1 , tn+1 ] de ceros de A(z, t)t − B(z, t)z es el conjunto de puntos fijos de f . Lema Si f es una función racional compleja representada por un par de polinomios homogéneos coprimos A(z, t), B(z, t) de grado n, entonces f r es una función racional de grado nr que tiene nr + 1 puntos fijos (teniéndose en cuenta la multiplicidad). Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 11 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Métrica cordal en P1 (C) Como S 2 es un subespacio de R3 , la métrica euclı́dea usual de R3 induce una métrica euclı́dea d E en S 2 . Usando la biyección θ−1 : P1 (C) → S 2 , podemos trasladar las estructuras métricas de S 2 a P1 (C) mediante la expresión: d1E ([z, t], [z 0 , t 0 ]) = d E (θ−1 ([z, t]), θ−1 ([z 0 , t 0 ])). Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 12 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Métrica cordal en P1 (C) Como S 2 es un subespacio de R3 , la métrica euclı́dea usual de R3 induce una métrica euclı́dea d E en S 2 . Usando la biyección θ−1 : P1 (C) → S 2 , podemos trasladar las estructuras métricas de S 2 a P1 (C) mediante la expresión: d1E ([z, t], [z 0 , t 0 ]) = d E (θ−1 ([z, t]), θ−1 ([z 0 , t 0 ])). Una fórmula explı́cita para d1E viene dada por: 0 E 0 d1 ([z, t], [z , t ]) = = z̄t + z t̄ t̄t + zz̄ − z¯0 t 0 + z t¯0 t¯0 t 0 + z 0 z¯0 Hernández, Marañón, Rivas (U.R.) !2 + i(z̄t − z t̄) t̄t + zz̄ − i(z¯0 t 0 − z 0 t¯0 ) t¯0 t 0 + z 0 z¯0 !2 + III Jornada Sage/Python (Vigo, 2012) −t̄t + zz̄ t̄t + zz̄ − −t¯0 t 0 + z 0 z¯0 t¯0 t 0 + z 0 z¯0 !2 ! 1 21 de junio de 2012 2 . 12 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Aplicación tangente de una función racional Definición Sea f : P1 (C) → P1 (C) una función analı́tica y p ∈ P1 (C) un punto fijo. Entonces, se dice que p es superatractor, atractor, indiferente o repulsor si la norma de la aplicación tangente en ese punto es 0, menor que 1, igual a 1 ó mayor que 1, respectivamente. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 13 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Marco teórico y justificación matemática de los algoritmos Aplicación tangente de una función racional Definición Sea f : P1 (C) → P1 (C) una función analı́tica y p ∈ P1 (C) un punto fijo. Entonces, se dice que p es superatractor, atractor, indiferente o repulsor si la norma de la aplicación tangente en ese punto es 0, menor que 1, igual a 1 ó mayor que 1, respectivamente. Sean x, y : P1 (C) → S 2 cartas dadas por x([z, t]) = z/t e y ([z, t]) = t/z, Dom x = {[z, t] ∈ P1 (C) | t 6= 0}, Dom y = {[z, t] ∈ P1 (C) | z 6= 0}. Dado p = [z, t] ∈ P1 (C), para determinar si un punto fijo es superatractor, atractor, indiferente o repulsor basta comprobar si ( Abs(xfx −1 )0 (z), si t=1, t’=1, |Jp (f )| = Abs(yfy −1 )0 (t), si z=1, z’=1 es 0, menor que 1, igual a 1 ó mayor que 1. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 13 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Cuencas de puntos finales inducidas por una función racional en C ∪ {∞} Semiflujos discretos inducidos por una función racional Cualquier función racional compleja h : C → C induce una aplicación extensión f = h+ : C ∪ {∞} → C ∪ {∞} que dota a C ∪ {∞} de una estructura de semiflujo discreto mediante la fórmula n · p = f n (p). Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 14 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Cuencas de puntos finales inducidas por una función racional en C ∪ {∞} Semiflujos discretos inducidos por una función racional Cualquier función racional compleja h : C → C induce una aplicación extensión f = h+ : C ∪ {∞} → C ∪ {∞} que dota a C ∪ {∞} de una estructura de semiflujo discreto mediante la fórmula n · p = f n (p). Por otro lado, disponemos de la aplicación natural ω : C ∪ {∞} → Π(C ∪ {∞}) dada por ω(p) = [(p, f (p), f 2 (p), . . . )], la cual permitirá descomponer el espacio C ∪ {∞} en cuencas de atracción disjuntas asociadas a puntos finales. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 14 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Cuencas de puntos finales inducidas por una función racional en C ∪ {∞} Ejemplo En el siguiente ejemplo estudiamos la función racional h(z) = GF (z) (z) , donde 5 4 F (z) = 4z + 1 y G (z) = 5z . En este caso, la aplicación inducida f = h+ en X = C ∪ {∞} posee seis puntos fijos: p0 = ∞, p1 = −0,809017 − 0,587785i, p3 = 0,309017 − 0,951057i, Hernández, Marañón, Rivas (U.R.) p2 = −0,809017 + 0,587785i, p4 = 0,309017 + 0,951057i, III Jornada Sage/Python (Vigo, 2012) p5 = 1. 21 de junio de 2012 15 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Cuencas de puntos finales inducidas por una función racional en C ∪ {∞} Ejemplo En el siguiente ejemplo estudiamos la función racional h(z) = GF (z) (z) , donde 5 4 F (z) = 4z + 1 y G (z) = 5z . En este caso, la aplicación inducida f = h+ en X = C ∪ {∞} posee seis puntos fijos: p0 = ∞, p1 = −0,809017 − 0,587785i, p3 = 0,309017 − 0,951057i, p2 = −0,809017 + 0,587785i, p4 = 0,309017 + 0,951057i, p5 = 1. Por tanto, consideraremos la esfera dividida en siete partes: X = (X \ D) t D∞ t Dp1 t Dp2 t Dp3 t Dp4 t Dp5 , donde D = D∞ ∪ Dp1 ∪ Dp2 ∪ Dp3 ∪ Dp4 ∪ Dp5 . Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 15 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Cuencas de puntos finales inducidas por una función racional en C ∪ {∞} Relación entre regiones, colores y puntos fijos A cada región se le asocia un color diferente: D p0 D p1 D p2 D p3 D p4 D p5 Región X \D = ω −1 ω(p0 ) = ω −1 ω(p1 ) = ω −1 ω(p2 ) = ω −1 ω(p3 ) = ω −1 ω(p4 ) = ω −1 ω(p5 ) Hernández, Marañón, Rivas (U.R.) Color 0 1 2 3 4 5 6 Tipo de punto fijo asociado Repulsor Atractor Atractor Atractor Atractor Atractor III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 16 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Cuencas de puntos finales inducidas por una función racional en C ∪ {∞} Relación entre regiones, colores y puntos fijos A cada región se le asocia un color diferente: D p0 D p1 D p2 D p3 D p4 D p5 Región X \D = ω −1 ω(p0 ) = ω −1 ω(p1 ) = ω −1 ω(p2 ) = ω −1 ω(p3 ) = ω −1 ω(p4 ) = ω −1 ω(p5 ) Color 0 1 2 3 4 5 6 Tipo de punto fijo asociado Repulsor Atractor Atractor Atractor Atractor Atractor En X \ D se pueden encontrar puntos cuya cuenca de atracción está asociada a un punto final que no está vinculado a ningún punto fijo (por ejemplo, cuencas de 2-ciclos, 3-ciclos,. . . ) o puntos tales que, tras un número prefijado de iteraciones, forman parte de una sucesión que aún no ha convergido a ningún punto fijo. Los demás colores corresponden a las cuencas asociadas a los diferentes puntos fijos. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 16 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Cuencas de puntos finales inducidas por una función racional en C ∪ {∞} Representación de las cuencas de atracción La esfera de la izquierda muestra las regiones cercanas al origen (polo sur de la esfera), mientras que la de la derecha muestra las próximas al punto del infinito (polo norte de la esfera). Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 17 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos Cálculo de los puntos fijos Hemos visto que el conjunto [z1 , t1 ], . . . , [zn+1 , tn+1 ] de ceros del polinomio homogéneo A(z, t)t − B(z, t)z coincide con el conjunto de A(z, t) puntos fijos de f (z, t) = . B(z, t) Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 18 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos Cálculo de los puntos fijos Hemos visto que el conjunto [z1 , t1 ], . . . , [zn+1 , tn+1 ] de ceros del polinomio homogéneo A(z, t)t − B(z, t)z coincide con el conjunto de A(z, t) puntos fijos de f (z, t) = . B(z, t) Si t = 0 es raı́z de B(1, t) y z1 , . . . , zn son las raı́ces de A(z, 1) − B(z, 1)z = 0, entonces {[1, 0], [z1 , 1], . . . , [zn , 1]} es el conjunto de los puntos fijos de f . Si t = 0 no es raı́z de B(1, t) y z1 , . . . , zn , zn+1 son las raı́ces de A(z, 1) − B(z, 1)z = 0, entonces {[z1 , 1], . . . , [zn , 1], [zn+1 , 1]} es el conjunto de los puntos fijos de f . Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 18 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos fixedPointsZeros def fixedPointsZeros (U, V): w = var(’w’) con = V(z = 1, t = 0) solaux = solve(U(z = w, t = 1)-(V(z = w, t = 1))*w == 0, w, to_poly_solve = true, solution_dict = true) def errorEq(): boo = false k = 0 while k < len(solaux) and boo == false: if w in solaux[k].keys(): k = k + 1 else: boo = true return boo if errorEq(): sol1=[] print "There was a problem with function solve: cannot solve equation", U(w, 1)-(V(w, 1))*w == 0 else: sol1=[homogeneousNormalization((n(t[w]),1)) for t in solaux] if (con == 0): sol1.insert(0, (1, 0)) return sol1 Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 19 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos Distancia entre dos puntos Utilizando la biyección dada entre P1 (C) y S 2 y la métrica euclı́dea en S 2 , podemos obtener la distancia entre dos puntos de P1 (C). sphereBijection((1,0)) (0,0,1) chordalMetric((1,0),(1,1)) 1.41421356237310 Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 20 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos sphereBijection def sphereBijection(twotuple): z = twotuple[0] t = twotuple[1] return ((conjugate(z)*t + conjugate(t)*z) / (conjugate(t)*t + conjugate(z)*z), (I*(conjugate(z)*t - conjugate(t)*z)) / (conjugate(t)*t + conjugate(z)*z), (-conjugate(t)*t + conjugate(z)*z) / (conjugate(t)*t + conjugate(z)*z)) Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 21 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos chordalMetric def chordalMetric(twotuple, twotuple1): t1 = sphereBijection(twotuple) t2 = sphereBijection(twotuple1) m1 = Matrix([[t1[0], t1[1], t1[2]]]); m2 = Matrix([[t2[0], t2[1], t2[2]]]); return n(norm(m1-m2)) Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 22 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos Iteración de la función racional Con el fin de encontrar el punto final asociado a un punto x ∈ P1 (C), se tiene que iterar (componer consigo misma) la función f para obtener una sucesión finita (x, f (x), f 2 (x), f 3 (x), . . . , f k−1 (x), f k (x)). Al programar en el ordenador, se debe considerar un número máximo de iteraciones l y prefijar una precisión c para determinar cuándo debemos detener el proceso iterativo. Es por ello que trabajaremos siempre con sucesiones tales que k ≤ l. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 23 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos Iteración de la función racional Con el fin de encontrar el punto final asociado a un punto x ∈ P1 (C), se tiene que iterar (componer consigo misma) la función f para obtener una sucesión finita (x, f (x), f 2 (x), f 3 (x), . . . , f k−1 (x), f k (x)). Al programar en el ordenador, se debe considerar un número máximo de iteraciones l y prefijar una precisión c para determinar cuándo debemos detener el proceso iterativo. Es por ello que trabajaremos siempre con sucesiones tales que k ≤ l. Después de cada iteración, se nos presentarán dos posibles opciones: 1) Si la distancia cordal desde f k−1 (x) hasta f k (x) es menor que 10−c , entonces tomamos como salida la lista [f k (x), k]; en otro caso, se aplica 2). 2) Si k < l, se lleva a cabo una nueva iteración y se aplica de nuevo 1); en otro caso (si k = l), se toma como salida [f l (x), l]. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 23 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos newstep def newstep(U, V, iter, precision, pointinternumber): point = pointinternumber number = 0 imagepoint = rationalFunction(U, V, point) while (chordalMetric(point, imagepoint) > 10.**(-precision)) and (number < iter): point = imagepoint imagepoint = rationalFunction(U, V, point) number = number + 1 else: return [imagepoint, number] Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 24 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos Determinación del punto fijo al que converge una trayectoria y del número de iteraciones Consideremos la sucesión ordenada de puntos fijos {x1 , x2 , . . . , xn+1 }. Del mismo modo, dado un punto x ∈ C ∪ {∞}, consideremos la sucesión de iteraciones (x, f (x), f 2 (x), f 3 (x), . . . , f k−1 (x), f k (x)). Si existe i ∈ {1 . . . , n + 1} tal que la distancia cordal entre f k (x) y el punto fijo xi es menor que 10−c , entonces positionIterationNumber debe devolver [i, k]; en otro caso, k = l y la salida debe ser [0, l], donde l es el número máximo de iteraciones prefijada de antemano. positionIterationNumber(A,B,fixedPointsZeros(A,B),25,4,(-0.1-0.1*i,1)) [0,25] positionIterationNumber(A,B,fixedPointsZeros(A,B),25,4,(-0.1-0.09*i,1)) [5,23] Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 25 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos positionIterationNumber def positionIterationNumber(U, V, fixedpointlist, iter, precision, twotuple): result = newstep(U, V, iter, precision, twotuple) if (result[1] != iter): return [position(fixedpointlist, precision, result[0]), result[1]] else: return [0, result[1]] Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 26 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos Derivada de una función racional en un punto fijo Para saber si un punto fijo es superatractor, atractor, indiferente o repulsor, podemos calcular la derivada de la función racional en ese punto usando el siguiente algoritmo: fixedPointsTangentMapNorm(A,B,(1,0)) ((1,0),1.33333333333333) Supongamos que A(z, t), B(z, t) son polinomios homogéneos y que [z, t] es un punto fijo representado en forma de coordenadas homogéneas normalizadas. Entonces, el subprograma fixedPointsTangentMapNorm devuelve una lista con dos elementos: el punto fijo considerado [z, t] y la norma de la derivada de la función racional en ese punto. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 27 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos fixedPointsTangentMapNorm a, b = var(’a, b’) def fixedPointsTangentMapNorm(A, B, twotuple): nor = homogeneousNormalization(twotuple) if (nor[1] == 1): return (nor, abs(derivative(A(a, 1)/B(a, 1),a)(a = nor[0]))) else: return (nor, abs(derivative(B(1, b)/A(1, b),b)(b = nor[1]))) Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 28 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos Cuencas de n-ciclos de una función racional Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 29 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos Cuencas de n-ciclos de una función racional El programa posee un argumento opcional que permite trabajar con las parejas de polinomios asociadas a f 2 , f 3 , . . . . Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 29 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos Cuencas de n-ciclos de una función racional El programa posee un argumento opcional que permite trabajar con las parejas de polinomios asociadas a f 2 , f 3 , . . . . La utilidad de esto radica en que las cuencas de atracción de los puntos fijos de la función f compuesta dos veces consigo misma, f 2 = f ◦ f , corresponden a cuencas de puntos fijos y de 2-ciclos de f ; si dos puntos fijos de f 2 conforman un 2-ciclo, la cuenca de atracción de este 2-ciclo es la unión de las cuencas de estos dos puntos fijos. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 29 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos Cuencas de n-ciclos de una función racional El programa posee un argumento opcional que permite trabajar con las parejas de polinomios asociadas a f 2 , f 3 , . . . . La utilidad de esto radica en que las cuencas de atracción de los puntos fijos de la función f compuesta dos veces consigo misma, f 2 = f ◦ f , corresponden a cuencas de puntos fijos y de 2-ciclos de f ; si dos puntos fijos de f 2 conforman un 2-ciclo, la cuenca de atracción de este 2-ciclo es la unión de las cuencas de estos dos puntos fijos. Este hecho puede generalizarse a una función compuesta n veces, f n . Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 29 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos compose def compose(h, num): H = h if (num < 1): print("Rational function must be composed once at least.") for cont in range(num-1): H = h.subs(x = H) return H Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 30 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos homogenize def homogenize(f, g): F = R(0); G = R(0) fdeg = f.degree(x) gdeg = g.degree(x) deg = max(fdeg, gdeg) if(fdeg != 0): monf = [z^q[1]*q[0] for q in f.coefficients(x)] for m in monf: d = m.degree(z) F = F + m * t^(deg - d) else: F = f * t^deg if(gdeg != 0): mong = [z^q[1]*q[0] for q in g.coefficients(x)] for m in mong: d = m.degree(z) G = G + m * t^(deg - d) else: G = g * t^deg return [F, G] Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 31 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Descripción de los algoritmos composeHomogenize def composeHomogenize(f, g, n): if(g.degree(x) == 0): comp = compose(f, n) homo = homogenize(comp, g) else: h = f / g comp = compose(h, n).simplify_rational(’simple’) num = comp.numerator() den = comp.denominator() homo = homogenize(num, den) A = homo[0] B = homo[1] return [A, B] Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 32 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales Estrategias de asignación de color Dibujaremos un fractal usando el punto fijo al que converge la trayectoria (quizá no exista ninguno) y el número de iteraciones necesarias para alcanzar la convergencia, y una de las siguientes estrategias: Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 33 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales Estrategias de asignación de color Dibujaremos un fractal usando el punto fijo al que converge la trayectoria (quizá no exista ninguno) y el número de iteraciones necesarias para alcanzar la convergencia, y una de las siguientes estrategias: 1) Punto fijo al que converge la trayectoria: se asigna un color a la cuenca de atracción de cada punto fijo, de modo que cada punto x se colorea según el punto fijo al cual f k (x) converge; se marca con un nuevo color si, después de un cierto número de iteraciones, la sucesión no converge. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 33 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales Estrategias de asignación de color Dibujaremos un fractal usando el punto fijo al que converge la trayectoria (quizá no exista ninguno) y el número de iteraciones necesarias para alcanzar la convergencia, y una de las siguientes estrategias: 1) Punto fijo al que converge la trayectoria: se asigna un color a la cuenca de atracción de cada punto fijo, de modo que cada punto x se colorea según el punto fijo al cual f k (x) converge; se marca con un nuevo color si, después de un cierto número de iteraciones, la sucesión no converge. 2) Número de iteraciones: se asigna el color atendiendo al número de iteraciones necesarias para alcanzar algún punto fijo con una determinada precisión. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 33 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales Estrategias de asignación de color Dibujaremos un fractal usando el punto fijo al que converge la trayectoria (quizá no exista ninguno) y el número de iteraciones necesarias para alcanzar la convergencia, y una de las siguientes estrategias: 1) Punto fijo al que converge la trayectoria: se asigna un color a la cuenca de atracción de cada punto fijo, de modo que cada punto x se colorea según el punto fijo al cual f k (x) converge; se marca con un nuevo color si, después de un cierto número de iteraciones, la sucesión no converge. 2) Número de iteraciones: se asigna el color atendiendo al número de iteraciones necesarias para alcanzar algún punto fijo con una determinada precisión. 3) Combinación de las estrategias anteriores: se asigna un color a cada cuenca de atracción de un punto fijo, pero haciendo que este color sea más claro o más oscuro en función del número de iteraciones necesarias para alcanzar la raı́z con la precisión prefijada. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 33 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales Punto fijo al que converge la trayectoria Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 34 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales Número de iteraciones Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 35 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales Combinación de las estrategias anteriores Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 36 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales Algoritmos Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 37 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales Algoritmos Con la función fractalPlot obtenemos un fractal coloreado en un rectángulo. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 37 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales Algoritmos Con la función fractalPlot obtenemos un fractal coloreado en un rectángulo. fractalPlotInsideOutside devuelve dos discos: en el primero se representa la intersección de las cuencas de atracción con el disco unidad y en el segundo, mediante inversión, obtenemos la intersección de las cuencas con el complementario del disco en C ∪ {∞}. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 37 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales Algoritmos Con la función fractalPlot obtenemos un fractal coloreado en un rectángulo. fractalPlotInsideOutside devuelve dos discos: en el primero se representa la intersección de las cuencas de atracción con el disco unidad y en el segundo, mediante inversión, obtenemos la intersección de las cuencas con el complementario del disco en C ∪ {∞}. Con la función spherePlot se obtiene un fractal 3D en la esfera unidad en el que se muestran todos los puntos fijos con un tamaño mayor que el resto de puntos. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 37 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales Algoritmos Con la función fractalPlot obtenemos un fractal coloreado en un rectángulo. fractalPlotInsideOutside devuelve dos discos: en el primero se representa la intersección de las cuencas de atracción con el disco unidad y en el segundo, mediante inversión, obtenemos la intersección de las cuencas con el complementario del disco en C ∪ {∞}. Con la función spherePlot se obtiene un fractal 3D en la esfera unidad en el que se muestran todos los puntos fijos con un tamaño mayor que el resto de puntos. El subprograma cubicSpherePlot devuelve lo mismo que spherePlot, pero la esfera que se obtiene con la primera función es ligeramente distinta a la que se obtiene con la segunda, pues sus puntos se distribuyen sobre su superficie de una forma diferente (concretamente, proyectando un cubo sobre la esfera unidad). Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 37 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales fractalPlot Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 38 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales fractalPlotInsideOutside Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 39 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales spherePlot Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 40 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Algoritmos para dibujar fractales spherePlot vs cubicSpherePlot Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 41 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Ejemplo de uso Ejemplo de uso El programa es muy fácil de usar. Para dibujar el fractal asociado a una determinada función racional, es suficiente con especificar los polinomios que forman su numerador y denominador en la variable x y ejecutar una de las siguientes subrutinas, dependiendo del tipo de fractal que queramos dibujar: fractalPlotInsideOutside, fractalPlot, spherePlot o cubicSpherePlot. M=4*x**5+1; N=5*x**4 fractalPlotInsideOutside(M,N,100,positionPlusConvergence) Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 42 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Parámetros de entrada fractalPlot fractalPlot(M, N, xmin, xmax, ymin, ymax, points = 100, function = onlyPosition, iter = 25, prec = 3, ncomp = 1, colorfunction = ’spectral’) M,N son el numerador y el denominador de la función racional dada en la variable x, respectivamente. La tupla xmin,xmax,ymin,ymax representa los vértices del rectángulo en el que se dibujará el fractal. points es un entero que representa el número de puntos del gráfico. function indica la estrategia que se empleará al dibujar el fractal. iter es un entero que representa el número máximo de iteraciones. prec es un entero tal que, si la distancia entre dos puntos es menor que 10−prec , entonces el algoritmo considera que los dos puntos son el mismo. ncomp es un entero que representa el número de veces que la función racional se compone consigo misma. colorfunction es un colormap de Sage que se usa para asignar un color a cada punto del plano complejo. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 43 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Parámetros de entrada fractalPlotInsideOutside fractalPlotInsideOutside(M, N, points = 100, function = onlyPosition, iter = 25, prec = 3, ncomp = 1, reflection = -1, colorfunction = ‘spectral’) M,N son el numerador y el denominador de la función racional dada en la variable x, respectivamente. points es un entero que representa el número de puntos del gráfico. function indica la estrategia que se empleará al dibujar el fractal. iter es un entero que representa el número máximo de iteraciones. prec es un entero tal que, si la distancia entre dos puntos es menor que 10−prec , entonces el algoritmo considera que los dos puntos son el mismo. ncomp es un entero que representa el número de veces que la función racional se compone consigo misma. reflection es un número igual a 1 ó −1 que indica el signo de la reflexión del método de inversión. colorfunction es un colormap de Sage que se usa para asignar un color a cada punto del plano complejo. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 44 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Parámetros de entrada spherePlot spherePlot(M, N, points = 100, function = onlyPosition, iter = 25, prec = 3, ncomp = 1) M,N son el numerador y el denominador de la función racional dada en la variable x, respectivamente. points es un entero que representa el número de puntos del gráfico. function indica la estrategia que se empleará al dibujar el fractal. iter es un entero que representa el número máximo de iteraciones. prec es un entero tal que, si la distancia entre dos puntos es menor que 10−prec , entonces el algoritmo considera que los dos puntos son el mismo. ncomp es un entero que representa el número de veces que la función racional se compone consigo misma. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 45 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Parámetros de entrada cubicSpherePlot cubicSpherePlot(M, N, numdiv = 60, function = onlyPosition, iter = 25, prec = 3, ncomp = 1) M,N son el numerador y el denominador de la función racional dada en la variable x, respectivamente. numdiv es un entero que indica el número de subdivisiones de las caras del cubo que se proyecta sobre la esfera unidad. function indica la estrategia que se empleará al dibujar el fractal. iter es un entero que representa el número máximo de iteraciones. prec es un entero tal que, si la distancia entre dos puntos es menor que 10−prec , entonces el algoritmo considera que los dos puntos son el mismo. ncomp es un entero que representa el número de veces que la función racional se compone consigo misma. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 46 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Aplicaciones de los algoritmos Funciones racionales inducidas por métodos iterativos numéricos Todos los ceros de un polinomio complejo son puntos fijos de la función racional obtenida a partir de él mediante los métodos numéricos iterativos más usuales. Cada punto fijo de esta función racional asociada puede interpretarse directamente como un punto final. Ası́, toda cuenca de atracción de una raı́z del polinomio complejo primitivo es precisamente la cuenca del punto final asociado. Si p es una raı́z del polinomio complejo original, el significado de que un punto x esté en la cuenca correspondiente al punto fijo p es que, al aplicar a ese punto x la función racional asociada al método numérico con el que estamos trabajando, estaremos aproximándonos cada vez más a la raı́z p del polinomio dado. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 47 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Aplicaciones de los algoritmos Conexiones con la Geometrı́a Fractal Intuitivamente, se puede decir que un punto x ∈ X pertenece al conjunto de Fatou si existe un entorno abierto U de x tal que ω(x) = ω(y ), ∀y ∈ U (es decir, si la cuenca de un punto final asociada a cualquier punto muy cercano a x es la misma que la cuenca del punto final a la que pertenece x). El conjunto de Julia es la frontera de las cuencas de atracción de los puntos fijos atractores de f , incluyendo a ∞. En consecuencia, se puede considerar que el conjunto de Julia está formado por puntos que se encuentran en la frontera de las cuencas de puntos atractores (y por tanto, el resto de puntos de X están en el conjunto de Fatou). Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 48 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Aplicaciones de los algoritmos Aplicaciones futuras Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 49 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Aplicaciones de los algoritmos Aplicaciones futuras Nuestros algoritmos pueden emplearse con el propósito de obtener una estimación numérica del área en la esfera de las cuencas de atracción asociadas a las raı́ces de un polinomio, ası́ como la probabilidad de que un punto x0 ∈ C ∪ {∞} pertenezca a una u otra región. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 49 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Aplicaciones de los algoritmos Aplicaciones futuras Nuestros algoritmos pueden emplearse con el propósito de obtener una estimación numérica del área en la esfera de las cuencas de atracción asociadas a las raı́ces de un polinomio, ası́ como la probabilidad de que un punto x0 ∈ C ∪ {∞} pertenezca a una u otra región. Algunas partes de los algoritmos pueden ser también útiles para hacer un estudio más detallado de los conjuntos de Julia de los fractales obtenidos, calculando, por ejemplo, su dimensión fractal y otros invariantes homotópicos y homológicos. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 49 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Aplicaciones de los algoritmos Aplicaciones futuras Nuestros algoritmos pueden emplearse con el propósito de obtener una estimación numérica del área en la esfera de las cuencas de atracción asociadas a las raı́ces de un polinomio, ası́ como la probabilidad de que un punto x0 ∈ C ∪ {∞} pertenezca a una u otra región. Algunas partes de los algoritmos pueden ser también útiles para hacer un estudio más detallado de los conjuntos de Julia de los fractales obtenidos, calculando, por ejemplo, su dimensión fractal y otros invariantes homotópicos y homológicos. Se ha comenzado a desarrollar en Sage un algoritmo que permite hallar los números de Betti asociados a las cuencas de atracción de puntos finales inducidas por funciones racionales mediante el cálculo de la homologı́a de complejos cúbicos. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 49 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Dificultades encontradas al programar en Sage Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 50 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Dificultades encontradas al programar en Sage Incoherencias entre los atributos degree, coefficients, monomials de los polinomios, dependiendo de si son de una o de varias variables y del anillo en el que se definen. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 50 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Dificultades encontradas al programar en Sage Incoherencias entre los atributos degree, coefficients, monomials de los polinomios, dependiendo de si son de una o de varias variables y del anillo en el que se definen. Manejo de constantes en determinados anillos. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 50 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Dificultades encontradas al programar en Sage Incoherencias entre los atributos degree, coefficients, monomials de los polinomios, dependiendo de si son de una o de varias variables y del anillo en el que se definen. Manejo de constantes en determinados anillos. Falta de correspondencia entre las paletas de color asociadas a gráficos en dos y tres dimensiones. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 50 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Dificultades encontradas al programar en Sage Incoherencias entre los atributos degree, coefficients, monomials de los polinomios, dependiendo de si son de una o de varias variables y del anillo en el que se definen. Manejo de constantes en determinados anillos. Falta de correspondencia entre las paletas de color asociadas a gráficos en dos y tres dimensiones. “Reorganización” automática indebida de los colores de una paleta de color en los gráficos obtenidos con density plot. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 50 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Dificultades encontradas al programar en Sage Incoherencias entre los atributos degree, coefficients, monomials de los polinomios, dependiendo de si son de una o de varias variables y del anillo en el que se definen. Manejo de constantes en determinados anillos. Falta de correspondencia entre las paletas de color asociadas a gráficos en dos y tres dimensiones. “Reorganización” automática indebida de los colores de una paleta de color en los gráficos obtenidos con density plot. Jmol: problemas al cargar los gráficos y puntos que no aparecen al dibujar las esferas. ¿ParametricPlot3D de Mathematica? Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 50 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Dificultades encontradas al programar en Sage Incoherencias entre los atributos degree, coefficients, monomials de los polinomios, dependiendo de si son de una o de varias variables y del anillo en el que se definen. Manejo de constantes en determinados anillos. Falta de correspondencia entre las paletas de color asociadas a gráficos en dos y tres dimensiones. “Reorganización” automática indebida de los colores de una paleta de color en los gráficos obtenidos con density plot. Jmol: problemas al cargar los gráficos y puntos que no aparecen al dibujar las esferas. ¿ParametricPlot3D de Mathematica? Lentitud en los cálculos. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 50 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Dificultades encontradas al programar en Sage Incoherencias entre los atributos degree, coefficients, monomials de los polinomios, dependiendo de si son de una o de varias variables y del anillo en el que se definen. Manejo de constantes en determinados anillos. Falta de correspondencia entre las paletas de color asociadas a gráficos en dos y tres dimensiones. “Reorganización” automática indebida de los colores de una paleta de color en los gráficos obtenidos con density plot. Jmol: problemas al cargar los gráficos y puntos que no aparecen al dibujar las esferas. ¿ParametricPlot3D de Mathematica? Lentitud en los cálculos. Y por supuesto. . . poca experiencia programando en Sage. Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 50 / 51 Marco teórico Algoritmos Manual de usuario Aplicaciones Dificultades Muchas gracias por su atención Hernández, Marañón, Rivas (U.R.) III Jornada Sage/Python (Vigo, 2012) 21 de junio de 2012 51 / 51