Curso de introducción a la programación con python

Autor: Luis Fernando Apáez Álvarez

Sucesión de Fibonacci y el número de oro

Espiral de Fibonecci


La sucesión de Fibonacci comienza con los números 0 y 1. De ahí, obtendremos el siguiente término sumando los dos anteriores. Esto es

De tal manera, en general tenemos que el énesimo término de la sucesión está dado por $$ F_{n}=F_{n-1}+F_{n-2} $$

Esta sucesión fue descrita en Europa por el matemático Leonardo de Pisa, también conocido como Fibonecci. Sin embargo ésta ya había sido descrita en la Matemática de la India. La descripción que presenta Fibonecci es como la solución de un problema relacionado con la cría de conejos:

El primer mes nace una pareja de conejos $a_{1}$, en total hay 1 pareja; en el segundo mes se aparéa esta pareja, en total hay 1 pareja; en el tercer mes la pareja $a_{1}$ da a luz otra pareja $a_{2}$, la pareja inicial se vuelve a cruzar, en total hay 2 parejas; en el cuarto mes la pareja inicial da a luz la pareja $a_{3}$ y se cruza las parejas $a_{1}$ y $a_{2}$, en total hay 3 parejas; en el quinto mes la pareja $a_{1}$ da a luz la pareja $a_{4}$ y la $a_{2}$ da a luz la pareja $a_{5}$, las parejas $a_{1},a_{2}$ y $a_{3}$ se cruzan, en total hay 5 parejas.....

La sucesión de Fibonecci tiene numerosas aplicaciones en Matemáticas, Ciencias de la computación y Economía, además de que ésta aparece en ciertas configuraciones biológicas como en las ramas de los árboles, en cómo el ADN codifica el crecimiento de formas orgánicas complejas, etcétera.


Ahora bien, con base en el comportamiento de la sucesión podemos implementar un código para ir generando números de la sucesión de Fibonecci. Para ello

Recordemos que un lista en python está indexada, comenzando la primera posición con el índice cero. En otras palabras

Para acceder a los elementos de una lista usamos, por ejemplo, n_fibonecci[0] el cual nos arroja

Luego, lo que haremos será implementar un bucle for para ir agregando más elementos a la listan_fibonecci de la siguiente manera:

Efectuamos primero la suma $F_{2}=F_{1}+F_{0}=1+0=1$, lo cual conseguimos usando n_fibonecci[1]+n_fibonecci[0]. Para mayor comodidad utilicemos la variable auxiliar x. Entonces

x = n_fibonecci[1] + n_fibonecci[0]

de modo que x tiene almacenado el valor de 1 y éste será agregado a la lista. Entonces n_fibonecci=[0,1,1]. Luego, para $F_{3}=F_{2}+F_{1}=1+1=2$ usamos

x = n_fibonecci[2]+n_fibonecci[1]

de modo que x tiene almacenado ahora el valor de 2 y n_fibonecci=[0,1,1,2].

Lo anterior lo implementamos como

De tal manera, como el rango del bucle es de 10, el código anterior nos arrojará 10+2=12 números de Fibonecci.


El número de oro

$\varphi = \frac{1+\sqrt{5}}{2}\approx 1.618033988749894$

El número áureo es un número irracional descubierto en la antigüedad como proporción entre dos segmentos de una recta. Cabe resaltar que esta proporción se encuentra muy en figuras geométricas y a menudo en la naturaleza. A los objetos cuyas medidas guardan la proporción áurea se les atribuye propiedades estéticas.

Tomemos los números $a,b$ con $a>b>0$ tales que $a+b$ es la longitud de un segmento de recta. La construcción del número áureo se consigue con la proporción $$ \frac{a+b}{a}=\frac{a}{b} $$ es decir, la longitud del segmento total es a la parte mayor del segmento, como la parte mayor del segmento es a la parte menor.

Resolvamos dicha ecuación $$ 1+\frac{b}{a}=\frac{a}{b} $$ hacemos el cambio de variable $\varphi=\frac{a}{b}$ por lo que $\varphi^{-1}=\frac{b}{a}$, entonces $$ 1+\varphi^{-1}=\varphi\ \ \Rightarrow\ \ \varphi+1=\varphi^{2}\ \ \Rightarrow \varphi^{2}-\varphi-1=0 $$ después usamos la fórmula general $$ \varphi=\frac{-(-1)\pm\sqrt{(-1)^{2}-4(1)(-1)}}{2(1)}=\frac{1\pm\sqrt{5}}{2} $$

De ahí que el número áureo se defina como $$ \varphi=\frac{1+\sqrt{5}}{2}\approx1.618033988749894 $$


Descubramos otra propiedad interesante, para ello utilizaremos los primeros números de la sucesión de Fibonecci. Generemos 54 números de Fibonecci

Ahora efectuemos divisiones de la forma $\frac{F_{n+1}}{F_{n}}$, esto es

Podemos implementar un bucle for para realizar más divisiones

Veamos ahora la división entre los últimos elementos de nuestra lista n_fibonecci:

Dado que Python redondea las cantidades sólo nos muestra los primeros 14 dígitos y redondea el dígito 15. Entonces tenemos que $$ \frac{F_{52}}{F_{51}}\approx1.618033988749895\ \ \ \ \ \textrm{y}\ \ \ \ \ \varphi\approx1.618033988749894 $$

Es decir que la división entre elementos consecutivos de la sucesión de Fibonecci se aproxima al valor de $\varphi$ conforme $n$ crece. Esta es una magnífica propiedad, que de manera más precisa nos dice que $$ \lim\limits_{n\rightarrow \infty}\left(\frac{F_{n+1}}{F_{n}}\right)=\varphi $$

Tomado de pybonacci_spiral.py, tenemos el siguiente código para general la espiral de Fibonecci

Que arroja:

Socialmedia.PNG