Esta entrada cierra el estudio de funciones definidas para ciertos tipos de números, así como de sus funciones inversas. En esta tercera se estudiarán las definidas por recurrencia.
Funciones
sobre recurrencias
Son aquellas que se definen mediante los
términos iniciales, y además, expresan a(n+1) en función de los anteriores
términos. Por ejemplo, la sucesión de Fibonacci se define como a(1)=1, a(2)=1,
y para el resto, a(n+1)=a(n)+a(n-1). Si esta última relación sólo usa el
término a(n) se llama de primer orden, y así, se pueden plantear de segundo,
tercero o más órdenes.
Recurrencias de primer orden
Cada función de este tipo deberá estar
definida por dos parámetros, a(1) y otro según la definición, que puede ser
DIFERENCIA en las progresiones aritméticas, RAZÓN en las geométricas, o bien
cualquier otra relación entre a(n+1) y a(n). No existen ejemplos populares
concretos para definir funciones.
Recurrencias de segundo orden
Existen muchas recurrencias de segundo
orden, como la ya citada de Fibonacci. Las más simples son las llamadas
Horadam, y se caracterizan porque la relación de recurrencia es lineal. Vemos
las más importantes.
Caso particular: sucesiones
Horadam
Son aquellas que están definidas por
cuatro parámetros, a1, a2, c1 y c2, de la forma a(1) = a1, a(2) =a2, a(n) =
a(n-2)*c1+a(n*1)*c2. Así, tenemos muchos ejemplos concretos de este tipo de
sucesiones recurrentes de segundo grado:
Horadam(1,1,1,1): Números de Fibonacci:
1,
1, 2, 3, 5
Horadam(2,1,1,1): Números de Lucas: 2, 1, 3,
4, 7, 11, 18, 29, 47, …
Horadam(1,2,1,2): Potencias de 2:1, 2, 4,
8, 16, 32, …
Horadam(0,1,2,1): Números de Pell: 0, 1,
2, 5, 12, 29, 70, …
Horadam(1,1,2,1): Números de Pell-Lucas: 1,
1, 3, 7, 17, 41, 99, …
Horadam(2,3,3,-2): Sucesión de Pisot (2n+1):
2,
3, 5, 9, 17, 33, …
Horadam(0,1,1,2): Sucesión de Jacobsthal:
2,
3, 5, 9, 17, 33, …
Son muy sencillas de programar, y su
búsqueda suele ser rápida. Para encontrar un término general hay que usar los
cuatro parámetros citados más el número de orden n.
En lenguaje PARI
horadam(n,a1, a2, c1, c2) = {my(i,f,t,v,u); if(n==1,f=a1);
if(n==2,f=a2);if(n>2,v=a1;t=a2;for(i=3,n,u=c1*t+c2*v;v=t;t=u);f=u);f}
En Vbasic
Function
horadam(n, a1, a2, c1, c2)
Dim i, f, v, u
If n = 1 Then
horadam = a1: Exit Function
If n = 2 Then
horadam = a2: Exit Function
v = a1: t = a2
For i = 3 To n
u = c1 * t + c2 *
v: v = t: t = u
Next i
horadam = u
End Function
Si se dispone de estas dos funciones, podemos definir las
funciones FIBONACCI(N), PELL(N), LUCAS(N) y demás, igualando su definición a la
de Horadam. Por ejemplo, LUCAS(N) se definirá así:
Lucas(n)=horadam(n, 2,1,1,1)
Así tendremos que
lucas(10)=horadam(10,2,1,1,1)=76, como puedes ver en cualquier descripción de
estos números. Imagina que puedes definir así todas estas sucesiones.
El autor lleva años usando FIBONACCI(N) en
sus cálculos.
La función ORDEN se puede construir de
similar a la que usamos para Primos o capicúas. Puede ser esta:
Function
eshoradam(n, a1, a2, c1, c2) As Long
Dim
v, u, k, t As Long
Dim
es As Long
If
n = a1 Then eshoradam = 1: Exit Function
If
n = a2 Then eshoradam = 2: Exit Function
v
= a1: t = a2: k = 2
While
t <= n
If
t = n Then
es
= k
ElseIf
t > n Then
es
= 0
End
If
u
= c1 * t + c2 * v: v = t: t = u: k = k + 1
Wend
eshoradam = es
End Function
Nos devuelve el orden k si es un término
de la sucesión, o un cero si no lo es.
El autor usa en su hoja de cálculos
diarios esta versión, que le permite averiguar si un número dado es de uno de
los tipos populares de esta sección:
Function
estipohoradam$(n)
Dim
s$
Dim
es As Long
s = ""
es = eshoradam(n, 1, 1, 1, 1):
If es <> 0 Then s = s + " Fibonacci " + " & " +
ajusta(es)
es = eshoradam(n, 2, 1, 1, 1):
If es <> 0 Then s = s + " Lucas " + " & " +
ajusta(es)
es = eshoradam(n, 0, 1, 2, 1):
If es <> 0 Then s = s + " Pell " + " & " +
ajusta(es)
es = eshoradam(n, 1, 1, 2, 1):
If es <> 0 Then s = s + " Pell-Lucas " + " & " +
ajusta(es)
es = eshoradam(n, 2, 3, 3,
-2): If es <> 0 Then s = s + " Pisot " + " & " +
ajusta(es)
es = eshoradam(n, 0, 1, 1, 2):
If es <> 0 Then s = s + " Jacobsthal " + " & " +
ajusta(es)
es = eshoradam(n, 2, 1, 1, 2):
If es <> 0 Then s = s + " Jacobsthal-Lucas " + " &
" + ajusta(es)
If s = "" Then s =
"No es de ningún tipo"
estipohoradam = s
End Function
Así, por ejemplo, estipohoradam(76) nos
devuelve Lucas & 10, y estipohoradam(81),
No es de ningún tipo.
Podemos seguir recorriendo tipos de
sucesiones recurrentes, como las de Perrin y otras, pero no suelen demandar
nuestros trabajos unas funciones directas como las que aquí se han presentado.
Otras recurrencias
El contenido de esta entrada nos ayuda si
necesitamos definir una función para sucesiones que no sean de Horadam, pero el
procedimiento para encontrar funciones de este tipo es el mismo, salvo la
fórmula de recurrencia.
No hay comentarios:
Publicar un comentario