Sucesiones aditivas recurrentes: la sucesión de Fibonacci

Sucesiones recurrentes aditivas

Una sucesión recurrente es una secuencia numérica caracterizada porque cada uno de sus valores se obtiene aplicando una regla fija a algunos de los valores anteriores, partiendo de unos valores iniciales fijos. La sucesión recurrente es aditiva cuando la regla que se aplica es simplemente la suma.

En general, los términos \(\left\{a_n\right\}\) de una sucesión recurrente aditiva de orden 2 se obtienen a partir de dos valores iniciales \(a_1\) y \(a_2\) mediante la expresión:

\[a_n = a_{n-1} + a_{n-2}\] Así, si \(a_{1}=2\) y \(a_2=5\) se tiene que:

Los términos de esta sucesión serían entonces 2, 5, 7, 12, 19, 31, 50, 81, …

 

La sucesión de Fibonacci

En el caso particular de que \(a_1=1\) y \(a_2=1\) se obtiene la conocida sucesión de Fibonacci:

\[1, 1, 2, 3, 5, 8, 13, 21, 34, ...\]

 

Diagrama de flujo para la generación de una sucesión recurrente aditiva

 

En este diagrama de flujo nótese que:

 

representa que el vector \(V\), inicializado previamente como \(V=[a_1, a_2]\), se va a “rellenar” desde \(k=3\) hasta \(n\) con los valores \(a_k=a_{k-1}+a_{k-2}\). Esta tarea puede llevarse a cabo directamente con un simple bucle for.

Ejercicios.

  1. Transcribir el diagrama de flujo anterior a código Matlab. Concretamente, construir una función que llamaremos fibGen (acrónimo de Fibonacci Generalizada) que reciba como argumentos los valores de \(a1, a2\) y \(n\) y devuelva los \(n\) primeros términos de la sucesión recurrente aditiva correspondiente. El “esqueleto” de la función debe ser de la forma:

function V=fibGen(a1,a2,n)
% Esta función devuelve los n primeros términos de una sucesión recurrente
% generalizada de orden 2, partiendo de los valores iniciales a1 y a2


end

esto es, queremos que la función devuelva un vector (que hemos llamado \(V\)) con los valores de la sucesión.


function F=fibGen(a1,a2,n)
% Esta función devuelve los n primeros términos de una sucesión recurrente
% generalizada de orden 2, partiendo de los valores iniciales a1 y a2
% En primer lugar comprobamos que n es entero y positivo
if mod(n,1)~=0
    disp 'Error: el valor de n no es entero';
    F=[];
elseif n<=0
    disp 'Error: el valor de n debe ser positivo';
    F=[];
elseif n==1
    F=[a1];
elseif n==2
    F=[a1, a2];
else
    F=[a1, a2];
    for k=3:n
        F(k)=F(k-1)+F(k-2);
    end
end
end
  1. Utilizar la función anterior para generar los primeros 20 términos de la sucesión de Fibonacci.

>> fibGen(1,1,20)

ans =

 Columns 1 through 11:

      1      1      2      3      5      8     13     21     34     55     89

 Columns 12 through 20:

    144    233    377    610    987   1597   2584   4181   6765
  1. Utilizar la función anterior para generar los primeros 20 términos de la sucesión recurrente aditiva cuyos dos primeros valores son 1 y 3.

>> fibGen(1,3,20)

ans =

 Columns 1 through 10:

       1       3       4       7      11      18      29      47      76     123

 Columns 11 through 20:

     199     322     521     843    1364    2207    3571    5778    9349   15127
  1. Genera los 100 primeros valores de la sucesión de Fibonacci y guárdalos en el vector F. Construye un bucle while para determinar cuál es la posición del primer valor mayor que \(10^{16}\).

  2. Tras guardar la sucesión de Fibonacci en el vector F , si pides a Matlab que te muestre el valor F(45) observarás que devuelve el valor 1.1349e+09. Ello es debido a que dicho valor es mayor que \(10^8\) y a partir de ahí Matlab muestra los valores en notación decimal. Es posible conseguir que nos muestre valores enteros hasta \(10^{16}\), pero para ello hay que utilizar la función fprintf. Investiga como se usa dicha función y utilízala para mostrar los valores enteros de la sucesión de Fibonacci menores que \(10^{16}\).

  3. ¿Cuánto vale la suma de los primeros 25 términos de la sucesión recurrente aditiva cuyos dos primeros términos son 1 y 7?

  4. ¿Cuál es el el promedio (media aritmética) de los 20 primeros valores de la sucesión de Fibonacci?

  5. Modifica la función que construiste en el apartado 1 de forma que partiendo de \(a_1\) y \(a_2\) calcule la sucesión \(a_k=a_{k-1}+a_{k-2}\) desde \(k=1\) hasta \(n\) y devuelva como salida la sucesión de los cocientes \(b_n=\frac{a_n}{a_{n-1}}\) hasta el valor \(n\) indicado. ¿Los cocientes de la sucesión de Fibonacci convergen a algún valor (es decir, existe algún valor \(n\) tal que a partir de éste en adelante los valores de \(b_n\) apenas cambian)?

  1. ¿Converge a algún valor la sucesión de cocientes de la sucesión recurrente aditiva cuyos valores iniciales son 1 y 7?. Prueba con otros valores iniciales y observa el resultado.

  2. Modifica la función anterior de forma que si entre dos valores sucesivos \(b_n\) y \(b_{n-1}\) ocurre que \(|b_n-b_{n-1}|<1e-12\) la función se detenga y muestre solo el valor de \(b_n\)