Este blog es un complemento natural de mi página http://www.hojamat.es. Por ello, se dedicará a los temas numéricos tratados con Hoja de Cálculo y a la estructura y prestaciones de esta. Su nivel será elemental o medio, y su orientación lúdica e investigadora.
miércoles, 28 de octubre de 2015
Damos vueltas a los triangulares cuadrados (1) Generación.
Generación de la sucesión
Dos entradas del blog de John D. Cook (http://www.johndcook.com/blog/2015/08/20/when-is-a-triangle-a-square/ y siguiente) me han animado a volver a tomar el tipo de entrada al que llamé “dar vueltas” a un tema o concepto. Lo haré sobre estos números:
0, 1, 36, 1225, 41616, 1413721, 48024900, 1631432881,… (http://oeis.org/A001110)
Evidentemente, tienen en común el ser triangulares y cuadrados a la vez. Puedes leer un desarrollo sencillo y claro en este documento:
http://www2.caminos.upm.es/Departamentos/matematicas/revistapm/revista_impresa/vol_IV_num_1/jue_mat_num_triang.pdf
Me he dado cuenta de que es un concepto sencillo pero que da lugar a bastantes reflexiones, algoritmos y repasos de teoría.
Nosotros seguiremos en parte este documento para iniciar el tema.
Búsqueda de números triangulares cuadrados
Un número triangular tiene por fórmula n(n+1)/2 y un cuadrado m2. Aquellos números que participen de las dos características tendrán que cumplir la igualdad
De esta igualdad deducimos esta otra mucho más práctica:
O bien
Con cambio de variable se convierte en una ecuación de Pell:
Esta ecuación la tenemos muy estudiada
http://hojamat.es/parra/pell.pdf (documento de Rafael Parra)
http://hojaynumeros.blogspot.com.es/2010/02/ecuacion-de-pell.html
Disponemos además de una hoja de cálculo para ayudar a resolverla:
http://www.hojamat.es/sindecimales/aritmetica/herramientas/herrarit.htm#pell
Usamos esta herramienta para el coeficiente 8 y el segundo miembro 1 y nos dan las primeras soluciones:
(1,0) (3,1) (17,6) (99,35) (577,204) (3363,1189) (19601,6930) (114243, 40391),…
Por recurrencia:
Según la teoría de la ecuación de Pell, las soluciones aparecen con las recurrencias (en este caso) xn=3*xn-1+8*yn-1 yn=3*yn-1+1*xn-1. Por ejemplo, 99=3*17+8*6, 35=3*6+1*17.
Ahora sólo nos queda elevar al cuadrado las soluciones de y (que equivalen a la variable m de la primera igualdad que planteamos) y nos resultarán los triangulares cuadrados:
020, 12=1, 62=36, 352=1225, 2042=41616, 11892=1413721,…
Primer algoritmo
El estudio que acabamos de desarrollar nos da una pista para la generación de términos triangulares cuadrados: Iniciamos dos variables X=1, Y=0, y en cada paso del algoritmo convertimos X en 3X+8Y y la Y en 3Y+X. Terminado el cálculo presentamos el valor de Y2 como siguiente triangular cuadrado. En el Basic de las hojas de cálculo quedaría así:
Sub triangcuad()
Dim x, y, x1, y1, i, t, fila
x = 1: y = 0 ‘Valores de inicio
fila = 3 ‘Fila inicial
Cells(fila, 4).Value = 0 ‘El primer valor es un cero
For i = 1 To 8 ‘Calculamos sólo ocho
x1 = 3 * x + 8 * y ‘Iteración para x
y1 = 3 * y + x ‘Iteración para y
x = x1
y = y1
t = y * y ‘Número triangular cuadrado
fila = fila + 1
Cells(fila, 4).Value = t ‘Se presenta el resultado
Next i
End Sub
Obtendríamos:
El que el último se nos ofrezca en coma flotante nos da idea de las limitaciones de la hoja para cálculos con enteros de muchas cifras. Si acudimos a PARI no nos encontraremos con esas limitaciones. Prueba este código:
{x=1;y=0;print(0);while(x<10^10,x1=3*x+8*y;y1=3*y+x;x=x1;y=y1;t=y^2;print(t))}
En pocos segundos te presenta los triangulares cuadrados menores que 10^10.
Relación de recurrencia con una sola variable
Por la naturaleza de su definición podemos esperar que estos números sigan una relación de recurrencia de segundo orden. Para encontrar su expresión, que será del tipo
An=aAn-1+bAn-2+c usaremos los valores iniciales 0, 1, 36, 1225, 41616 para plantear:
36=a*1+b*0+c
1225=a*36+b*1+c
41616=a*1225+b*36+c
Resolvemos
1189=35a+b
40391=1189a+35b
1224=36a y a=34, b=-1 y c=2
Según los cálculos anteriores, la relación de recurrencia será
An=34An-1-An-2+2
Es la misma que propone John D. Cook en su blog.
En este blog no olvidamos la hoja de cálculo. Intenta una resolución como la de la imagen usando cálculo matricial:
A partir de esta escritura matricial del sistema de ecuaciones, creamos debajo la matriz inversa de los coeficientes con MINVERSA, y a su derecha su producto por los términos independientes con MMULT:
Conseguimos así la misma solución 34, -1, 2
Segundo algoritmo
La relación de recurrencia nos permite un segundo algoritmo para encontrar los triangulares cuadrados. El que describimos a continuación presenta los nueve primeros (después existen problemas de coma flotante)
Sub triancuad1()
Dim m, n, p, k, fila
m = 0: n = 1 ‘Valores iniciales
fila = 3
Cells(1, 3).Value = m ‘presenta los dos primeros términos
Cells(2, 3).Value = n
For k = 1 To 7
p = 34 * n - m + 2 ‘relación de recurrencia
Cells(fila, 3).Value = p: fila = fila + 1 ‘presenta los siguientes términos
m = n: n = p ‘cada término se convierte en el anterior
Next k
End Sub
Los términos rellenarán una columna de hoja de cálculo:
Siguiendo nuestra costumbre, lo traducimos a PARI para conseguir más términos:
{x=0;y=1;print(0);print(1);for (k=1, 20, z=34*y-x+2;print(z);x=y;y=z)}
No resistimos la tentación, al igual que propone J.C. Cook, de intentar una versión recursiva en forma de función. Funciona muy bien en hoja de cálculo:
Public Function ftriangcuad(n)
If n < 2 Then
ftriangcuad = n
Else
ftriangcuad = 34 * ftriangcuad(n - 1) - ftriangcuad(n - 2) + 2
End If
End Function
No necesita explicación. La tabla siguiente se forma con gran rapidez de cálculo:
Fórmula directa
Si lees el capítulo sobre sucesiones recurrentes en nuestra publicación Sucesiones (http://www.hojamat.es/publicaciones/sucesiones.pdf) entenderás que a partir de la fórmula de recurrencia es posible encontrar la expresión directa de cada término (fórmula del término general). Sólo insertamos la captura de pantalla de nuestra hoja de cálculo Recurrencias
(http://www.hojamat.es/sindecimales/aritmetica/herramientas/herrarit.htm#recurre2) en la parte homogénea de la recurrencia:
Con un ligero retoque y la interpretación de los decimales llegamos a la propuesta por John D. Cook:
El uso de la raíz cuadrada de 2 le quita utilidad en nuestro trabajo, por lo que intentaremos prescindir de ella. Para ver la influencia del formato de coma flotante, la implementamos en hoja de cálculo, y el resultado es similar al de los algoritmos anteriores:
Función generatriz
Para quien no lo sepa, diremos que la función generatriz de una sucesión, si se desarrolla como una serie de potencias, poseerá como coeficientes de esas potencias de x los términos de la sucesión.
En el caso de los números triangulares cuadrados la función generatriz es
(ver http://oeis.org/A001110)
Con esta sencilla orden de PARI podemos comprobar su desarrollo.
print(taylor(x*(1+x)/((1-x)*(1-34*x+x^2)),x,20))
Tercer algoritmo
Finalizamos la entrada con la presentación de un algoritmo de los que llamamos “ingenuos”, que no usan la teoría para simplificar los cálculos, pero sí la fuerza bruta de la velocidad de proceso. En este caso obligaremos a los números naturales a ir creciendo hasta alcanzar un cuadrado, y después a la inversa, que los cuadrados avancen hasta alcanzar un triangular. Cuando se llegue a una igualdad se imprime el resultado. A pesar de su simplicidad, no resulta lento. Es éste:
Sub triancuad2()
Dim i, j, m, n, k, fila
m = 3: n = 4: i = 2: j = 3 ‘Se inician las variables
k = 10 ^ 7
fila = 3
Cells(fila, 3).Value = 1: fila = fila + 1
While m < k ‘Busca soluciones menores que k
While m <= n ‘Los triangulares crecen
If m = n Then Cells(fila, 3).Value = m: fila = fila + 1 ‘Hay igualdad
i = i + 1: m = m + i
Wend
While n <= m ‘Los cuadrados crecen
If m = n Then Cells(fila, 3).Value = m: fila = fila + 1 ‘Hay igualdad
j = j + 2: n = n + j
Wend
Wend
End Sub
Dejamos a los lectores el estudio de por qué funciona este algoritmo para descubrir los triangulares cuadrados. Como los anteriores, llega a los mismos resultados, en este caso hasta 10^7.
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario