2.2 Teorema de Zeckendorf

Anuncio
UNIVERSIDAD DE PANAMÁ
FACULTAD DE CIENCIAS NATURALES, EXACTAS Y TECNOLOGÍA
ESCUELA DE MATEMÁTICA
TEOREMA DE ZECKENDORF
POR:
DEMETRIO WENHAM V.
MONOGRAFÍA
PRESENTADA
COMO
UN
REQUISITO PARA OPTAR POR EL TÍTULO DE
LICENCIATURA EN MATEMÁTICA
CIUDAD UNIVERSITARIA, OCTAVIO MENDÉZ PEREIRA
PANAMÁ, 2009
Teorema de Zeckendorf
Índice
Introducción
1. Reseña histórica
2. Teorema de Zeckendorf
2.1 Sucesión de Fibonacci
2.2 Enunciado del teorema
3. Implementación computacional
3.1 Mathematica
3.2 Comandos y funciones a utilizarse
3.3 Desarrollo de la lógica del programa
a. Inicio
b. Cuerpo del programa
c. Decisión de impresión
Conclusión
Bibliografía
Algebra computacional
Teorema de Zeckendorf
Introducción
Este trabajo de Algebra Computacional trata sobre los números de Fibonacci, más
precisamente sobre el teorema de Zeckendorf el cual me dice que puedo representar
cualquier número natural en números de Fibonacci. Se definirán conceptos importantes
para tener en cuenta antes de abordar el tema mediante el uso tecnológico.
El punto importante a destacar de este trabajo es la implementación del teorema al campo
de desarrollos algorítmicos para su muestra, el software a utilizar para desarrollar la lógica
y para el desarrollo del teorema, es Mathematica del cual mostraremos algunos comandos y
funciones que utilizaremos para el desarrollo del algoritmo.
Algebra computacional
Teorema de Zeckendorf
1. Reseña Histórica
Leonardo de Pisa (c. 1170 - 1250)
A finales del siglo XII, la república de Pisa es una gran potencia comercial, con
delegaciones en todo el norte de África. En una de estas delegaciones, en la ciudad argelina
de Bugía, uno de los hijos de Bonaccio, el responsable de la oficina de aduanas en la
ciudad, Leonardo, es educado por un tutor árabe en los secretos del cálculo posicional
hindú y tiene su primer contacto con lo que acabaría convirtiéndose, gracias a él, en uno de
los más magníficos regalos del mundo árabe a la cultura occidental: nuestro actual sistema
de numeración posicional.
Leonardo de Pisa, Fibonacci, nombre con el que pasará a la Historia, aprovechó sus viajes
comerciales por todo el mediterráneo, Egipto, Siria, Sicilia, Grecia..., para entablar contacto
y discutir con los matemáticos más notables de la época y para descubrir y estudiar a fondo
los Elementos de Euclides, que tomará como modelo de estilo y de rigor.
Liber Abaci. Escrito en 1202, revisado y considerablemente aumentado en 1228, se divide
en quince capítulos. Un capítulo importante está dedicado a las fracciones graduales, de las
que expone las propiedades. En ellas basa una teoría de los números fraccionarios y,
después de haberlas introducido en los cálculos de números abstractos, las vuelve un
instrumento práctico para la obtención de números concretos. Todas las fracciones se
presentan a la manera egipcia, es decir, como suma de fracciones con numeradores
2
unitarios y denominadores no repetidos. La única excepción es la fracción 3, que no se
Algebra computacional
Teorema de Zeckendorf
descompone. Incluye una tabla para descomposición en fracciones unitarias que se lee
derecha a izquierda, como en las lenguas semíticas.
Antes de que Fibonacci escribiera su trabajo, la sucesión de los números de Fibonacci había
sido descubierta por matemáticos indios tales como Gopala (antes de 1135) y Hemachandra
(c. 1150), quienes habían investigado los patrones rítmicos que se formaban con sílabas o
notas de uno o dos pulsos. El número de tales ritmos (teniendo juntos una cantidad n de
pulsos) era fn + 1, que produce explícitamente los números 1, 2, 3, 5, 8, 13, 21, etc.
La sucesión fue descrita por Fibonacci como la solución a un problema de la cría de
conejos: "Cierto hombre tenía una pareja de conejos juntos en un lugar cerrado y uno
desea saber cuántos son creados a partir de este par en un año cuando es su naturaleza
parir otro par en un simple mes, y en el segundo mes los nacidos parir también".
De esta manera Fibonacci presentó la sucesión en su libro Liber Abaci, publicado en 1202.
Muchas propiedades de la sucesión de Fibonacci fueron descubiertas por Édouard Lucas,
responsable de haberla denominado como se la conoce en la actualidad.
También Kepler describió los números de Fibonacci, y el matemático escocés Robert
Simson descubrió en 1753 que la relación entre dos números de Fibonacci sucesivos fn + 1 /
fn se acerca a la relación áurea fi (
) cuanto más se acerque a infinito; es más: el cociente
de dos términos sucesivos de toda sucesión recurrente de orden dos tiende al mismo límite.
Esta serie ha tenido popularidad en el siglo XX especialmente en el ámbito musical, en el
que compositores con tanto renombre como Béla Bartók u Olivier Messiaen la han
utilizado para la creación de acordes y de nuevas estructuras de frases musicales.
Algebra computacional
Teorema de Zeckendorf
Edouard Zeckendorf (1901-1983)
Nació en Lieja, Bélgica, el 2 de mayo de 1901, en 1925 se graduó de medico en la
universidad de Lieja, luego se incorporo en el ejercito belga como oficial medico. Cuando
el ejército Alemán invade Bélgica fue hecho prisionero de guerra y permaneció en prisión
hasta 1945. Durante este periodo brindo servicios a los prisioneros aliados. Zeckendorf se
despidió del ejército con el rango de coronel en 1957.
Pero se preguntaran que tiene que ver Zeckendorf con matemáticas. En el campo de las
matemáticas, mas precisamente en teoría elemental de números en conocido por sus
trabajos sobre los números de Fibonacci y por enunciar un teorema y demostrarlo
posteriormente el cual lleva su nombre, el cual habla sobre una representación de los
números naturales en términos de números de Fibonacci.
Algebra computacional
Teorema de Zeckendorf
2. Teorema de Zeckendorf
El teorema de Zeckendorf habla sobre una representación de los números naturales
en términos de números de Fibonacci. Para tocar más el teorema antes debemos tener en
claro algunos conocimientos sobre los números de Fibonacci.
2.1 La sucesión de Fibonacci
La sucesión de Fibonacci es una secuencia de números enteros. Los números que
conforman esta sucesión de les llama números de Fibonacci los cuales son 𝑓0 , 𝑓1 , 𝑓2 , … y se
definen como:
1
𝑠𝑖
𝑖=0
1
𝑠𝑖
𝑖=1
𝑓𝑖 = {
𝑓𝑖−1 + 𝑓𝑖−2 𝑝𝑎𝑟𝑎 𝑖 > 1
2.2 Teorema de Zeckendorf
Indica que cada número entero positivo puede ser representado de una manera única como
la suma de uno o más números de Fibonacci no consecutivos, una cantidad que cumple
estas condiciones se llama una representación Zeckendorf.
Por ejemplo:
9=8+1, ya que 8 es el sexto número de Fibonacci y se toma el 1 como el segundo se ve
claramente que no son consecutivos y es única su representación.
Usted puede definir la operación de la siguiente manera 𝑎 ∗ 𝑏 los números naturales a, b:
teniendo en cuenta las representaciones Zeckendorf 𝑎 = ∑𝑛𝑖=0 𝐹𝑐𝑖 , (𝑐𝑖 ≥ 2) 𝑦
𝑏=
Algebra computacional
Teorema de Zeckendorf
∑𝑛𝑖=0 𝐹𝑑𝑖 , 𝑑𝑖 ≥ 2 a este producto se llama Producto de
Fibonacci 𝑎 ∗ 𝑏 =
∑𝑛𝑖=0 ∑𝑖𝑗=0 𝐹𝑐𝑖 +𝑑𝑗 . Por ejemplo, la representación Zeckendorf de 1 es 1 = F 2 (porque no se
les permite la representación de F 1).
Algebra computacional
Teorema de Zeckendorf
3. Implementación computacional
Esta es la parte fundamental del trabajo, ya que nuestro problema esta en diseñar un
algoritmo que represente el teorema enunciado en la sección anterior. En otras palabras
mostrar mediante un programa de computadora la descomposición de un número dado en
números de Fibonacci.
Para esto utilizaremos un software el cual nos facilitara la muestra del teorema.
3.1 Mathematica
Es un programa utilizado en áreas científicas, de ingeniería, matemáticas y áreas
computacionales. Originalmente fue concebido por Stephen Wólfram, quien continúa
siendo el líder del grupo de matemáticos y programadores que desarrollan el producto en
Wolfram Research, compañía ubicada en Champaign, Illinois. Comúnmente considerado
como un sistema de álgebra computacional, Mathematica es también un poderoso lenguaje
de programación de propósito general. La versión que utilizaremos para la implementación
del teorema de Zeckendorf será la 7.
3.2 Comandos y funciones de Mathematica a utilizarse:

𝐈𝐧𝐩𝐮𝐭[ ]: Este comando se utiliza para ingresar los dates al programa, tales pueden
ser números, listas, símbolos, etc.

𝐖𝐡𝐢𝐥𝐞[𝐜𝐨𝐧𝐝𝐢𝐜𝐢ó𝐧, 𝐜𝐮𝐞𝐫𝐩𝐨 ]: Este comando se utiliza para tomar una decisión a
hacer, esto me dice que mientras la condición se cumpla entonces el lo hará hasta
que la condición falle.
Algebra computacional
Teorema de Zeckendorf

𝐅𝐢𝐛𝐨𝐧𝐚𝐜𝐜𝐢[ 𝐢𝐧𝐝𝐢𝐜𝐞 𝐝𝐞𝐥 𝐧𝐮𝐦𝐞𝐫𝐨]: Esta es una función que me dice los números de
Fibonacci según su ubicación en la sucesión de Fibonacci.

𝐈𝐧𝐬𝐞𝐫𝐭[ 𝐥𝐢𝐬𝐭𝐚, 𝐞𝐥𝐞𝐦𝐞𝐧𝐭𝐨, 𝐩𝐨𝐬𝐢𝐜𝐢ó𝐧]: Inserta en una lista los elementos que uno
quiera según la posición adecuada en la lista.

𝐈𝐟[𝐜𝐨𝐧𝐝𝐢𝐜𝐢ó𝐧, 𝐜𝐢𝐞𝐫𝐭𝐨, 𝐟𝐚𝐥𝐬𝐨]: Este comando se utiliza para toma decisiones si se
cumple hace sino ejecuta otra acción si lo desea.

𝐆𝐫𝐢𝐝[ ]: Extrae los elementos de una lista

𝐏𝐫𝐢𝐧𝐭[ ]: Se utiliza para imprimir en pantalla lo que desee.
3.3 Desarrollo de la Lógica del programa
En esta sección explicare la lógica utilizada para resolver el problema de crear un algoritmo
en matemática para el teorema de Zeckendorf.
a. Inicio
n=Input["Ingrese un número natural cualquiera"];
natural=n;
i=2;
z=0;
ind={};
Empezamos con Input para ingresar el dato, en este caso es cualquier número natural y se
guardara en la variable n. En natural otra variable guardaremos el valor de n. Las variables
Algebra computacional
Teorema de Zeckendorf
i e z las iniciamos en 2 y en 0 respectivamente. La variable ind vendría siendo una lista
vacía en la cual voy almacenado valores.
b. Cuerpo del programa
While[n0,
{While[Fibonacci[i] n,{i=i+1, t=i}],
t=t-1,
z=z+1,
ind=Insert[ind,t,z],
n=n-Fibonacci[t],i=2}];
y=Fibonacci[ind];
Este viene siendo el cuerpo del programa el cual realiza la tarea de buscar la representación
de Zeckendorf para n.
El primer ciclo While inicia con la condición de que n tiene que ser distinto de 0, esta
razón se explicara posteriormente en el desarrollo de la lógica del programa.
El segundo While en este la condición es que busque el número de Fibonacci más cercano
a n, o sea menor o igual a él, después de haber terminado guarda en t el valor de i que
excede al numero de Fibonacci más cercano, por ese hecho en el siguiente paso resto 1 a t y
vuelvo a guardar en t el valor obtenido, luego z va a ser un contador el cual me va a indicar
la posición en la lista ind que es en la cual voy a ir almacenando los valores que se generan
en t.
Algebra computacional
Teorema de Zeckendorf
Este paso me va a indicar si el número de Fibonacci que yo encontré es menor o igual, si es
menor la diferencia seria distinta de cero y se inicializa i en 2 y vuelve y entra en el primer
ciclo While, sino, eso quiere decir que el numero n es de Fibonacci y no entra al ciclo otra
vez.
El algoritmo se detiene cuando ya el ultimo número más cercano al almacenado en n
generado de la diferencia anterior son iguales lo cual haciendo la diferencia me da cero y no
entra al primer ciclo While.
El último paso del cuerpo sería guardar en una variable y una lista que se genera calculando
para los índices almacenados en ind los números de Fibonacci mediante la función
Fibonacci de Mathematica.
c. Decisión de las impresiones
If[{natural}==y,Print["El
sucesión de Fibonacci y
número
",natural,"
su posición
esta
en
la
en la sucesión es
",Grid[{ind}]]]
If[{natural}y,Print["La
descomposición
números de Fibonacci es ", y , " y
de
"
,natural,"
en
sus posiciones en la
sucesión son ", ind] ].
Estas dos decisiones me indican en caso de las dos posibilidades como enviar el resultado:
Algebra computacional
Teorema de Zeckendorf
En el primer If se verifica si la lista almacenada en y es igual al numero almacenado en la
variable natural si esto se cumple, entonces se imprimirá el número que este almacenado
en natural diciendo que es de Fibonacci y la posición que ocupa.
El segundo If me verifica si en efecto son diferentes me dice que la descomposición del
numero almacenado en natural en términos de números de fibonacci esta en la variable y, y
además sus respectivas posiciones en la sucesión almacenadas en la variable ind.
Algoritmo completo
Luego de haber visto la lógica el algoritmo competo seria:
n=Input["Ingrese un número natural cualquiera"];
natural=n;
i=2;
z=0;
ind={};
While[n0,
{While[Fibonacci[i] n,{i=i+1, t=i}],
t=t-1,
z=z+1,
ind=Insert[ind,t,z],
n=n-Fibonacci[t],i=2}];
y=Fibonacci[ind];
Algebra computacional
Teorema de Zeckendorf
If[{natural}==y,Print["El
sucesión de Fibonacci y
número
",natural,"
su posición
esta
en
la
en la sucesión es
",Grid[{ind}]]]
If[{natural}y,Print["La
descomposición
números de fibonacci es ", y , " y
de
"
,natural,"
en
sus posiciones en la
sucesión son ", ind] ]
Por ejemplo: Si el numero ingresado en n=8 entonces el resultado seria.
El numero 8 esta en la sucesión de Fibonacci y su posición en
la sucesión es 6.
Algebra computacional
Teorema de Zeckendorf
Conclusiones

Pudimos observar que con los números de Fibonacci se puede representar cualquier
número natural.

Mediante el uso del software Mathematica 7 pudimos hacer muestra de la
representación de Zeckendorf, creando un algoritmo y aprovechando la potencia del
software. El desarrollo de la lógica es importante ya que proporciona al usuario la
ayuda para entender en que consiste el algoritmo, y permite a este proporcionarse
preguntas y criticas para el mejoramiento del programa.
Algebra computacional
Teorema de Zeckendorf
Bibliografía
 www.worldlingo.com/ma/enwiki/es/Zeckendorf
 it.wikipedia.org/wiki/Teorema_di_Zeckendorf
 www.learnmath.info/mathematicians/.../historyDetail.htm?id=Zeckendorf
 es.wikipedia.org/wiki/Sucesión_de_Fibonacci
 www.ite.educacion.es/formacion/.../fibonacci/fibonacci
Algebra computacional
Descargar