2022-03-25

Números de Fibonacci

La siguiente función en R genera el último número de la secuencia de números de Fibonacci Números de Fibonacci dada la cantidad de terminos deseada.

library(ggplot2)
fib <- function(n) {
  if (n == 1) {
    return(0)
  }
  else if(n == 2) {
    return(1)
  }
  else if(n > 2) {
    return(fib(n - 1) + fib(n - 2))
  }
}
fib(9)
## [1] 21

Secuencia de Fibonacci

La siguiente función en R genera la secuencia de números de Fibonacci Números de Fibonacci, dando como insumo el número de terminos (m) que se quiere.

s_fib <- function(m) {
    serie <- vector("numeric", length = m)
    for (i in 1:m) {
        serie[i] <- fib(i)
    }
    return(serie)
}
s_fib(30)
##  [1]      0      1      1      2      3      5      8     13     21     34
## [11]     55     89    144    233    377    610    987   1597   2584   4181
## [21]   6765  10946  17711  28657  46368  75025 121393 196418 317811 514229

Razón aurea

Denotando al n-ésimo número de Fibonacci como \({Fib}_{i}\), y al siguiente número de Fibonacci como \({Fib}_{i+1}\), descubrimos que, a medida que \(i\) aumenta, esta razón oscila y es alternativamente menor y mayor que la razón áurea.

\[ \psi=\lim_{i\rightarrow\infty}\frac{{Fib}_{i+1}}{{Fib}_{i}} \]

Ángulo aureo

La proporción de cada cociente de la serie multiplicada por 360 grados conlleva a la definicion del ángulo aureo.

\[ \theta=360\times\lim_{i\rightarrow\infty}\frac{{Fib}_{i+1}}{{Fib}_{i}} \]

Girasol:

r_oro <- function(n) {
  if (n <= 4) {
      return('Utiliza un número mayor a 4')
  }
    else (return(fib(n)/fib(n-1)))
}
options(repr.plot.width=5, repr.plot.height=5)
n <- 2000
alpha <- 360*((2 / (sqrt(5) + 1))**2)
s <- -(1:n)*alpha
x <- sin(s)
y <- cos(s)
df <- data.frame(s, x, y)
p <- ggplot(df, aes(x*s, y*s))
p + geom_point(aes(size = s), alpha = 0.8, color = "black", 
               fill = 'white', shape = 21, stroke = 1)

Cactus

n <- 500
alpha <- 360*((2 / (sqrt(5) + 1))**2)
s <- (1:n)*alpha
x <- sin(s)
y <- cos(s)
df <- data.frame(s, x, y)
p <- ggplot(df, aes(x*s, y*s))
p + geom_point(aes(size = s), alpha = 0.8, color = "darkgreen", 
               fill = 'white', shape = 21, stroke = 5)

Rosa

n <- 300
alpha <- 360*((2 / (sqrt(5) + 1))**2)
s <- (1:n)*alpha
x <- sin(s)
y <- cos(s)
df <- data.frame(s, x, y)
p <- ggplot(df, aes(x*s, y*s))
p + geom_path(color = "darkblue")