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, …
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, ...\]
En este diagrama de flujo nótese que:
La sucesión pedida se devuelve en el vector \(V\).
La comprobación de si el valor de \(n\) es válido consiste en comprobar si es entero y positivo (no es posible mostrar dos valores y medio de una sucesión, ni es posible mostrar -5 valores, por ejemplo). En ambos casos, el algoritmo lanza un mensaje de error por pantalla, y devuelve una sucesión vacía.
El fragmento de la esquina inferior izquierda:
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.
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
>> 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
>> 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
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}\).
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}\).
¿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?
¿Cuál es el el promedio (media aritmética) de los 20 primeros valores de la sucesión de Fibonacci?
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)?
¿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.
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\)