viernes, 27 de septiembre de 2013

Triangulares de lado par

Esta entrada participa en la Edición 4.123105 del Carnaval de Matemáticas, cuyo anfitrión es el blog Cifras y Teclas.

Los números triangulares 3, 10, 21, 36,…que nos aparecieron en la anterior entrada (http://hojaynumeros.blogspot.com.es/2013/09/igualdad-de-sumas-de-cuadrados-con-un.html) son aquellos cuyo número de orden es par: 3=T(2)=2*3/2; 10=T(4)=4*5/2; 21=T(6)=6*7/2,…

Si aplicamos la expresión algebraica de un número triangular, la de estos será

T(2n)=2n(2n+1)/2=n(2n+1)=2n2+n

Los podemos representar como formados por filas de triángulos de 3 elementos separados por otros elementos aislados. En la imagen hemos representado el 36, es decir T(8)


Observa que está formado por 10 triángulos de tres elementos y 6 puntos aislados. Nos sugiere que un número triangular de orden par equivale al triangular de orden mitad multiplicado por 3 más su triangular anterior, es decir:

T(2n)=3T(n)+T(n-1)

Es fácil demostrarlo por inducción: T(2)=3*T(1)+T(0)=3*1+0=3; T(4)=3*T(2)+T(1)=3*3+1=10…

Probemos con T(2(n+1))=T(2n)+(2n+1)+(2n+2) por definición de número triangular. Si aceptamos la hipótesis para n, tendremos:

T(2(n+1))=3*T(n)+T(n-1)+(n+1+n+1+n+1)+n=3*T(n)+3*(n+1)+T(n-1)+n=3*T(n+1)+T(n), luego la hipótesis se cumple para n+1.

La fórmula T(2n)=3T(n)+T(n-1) es válida

Adaptamos una demostración visual contenida en http://math.berkeley.edu/~rbayer/09su-55/handouts/ProofByPicture-printable.pdf



Así se ve  mejor la relación.

En realidad, estos números son los triangulares que no pueden ser hexagonales. Se sabe que todo hexagonal es triangular, porque su expresión es H(n)=n(2n-1)=2n(2n-1)/2=T(2n-1), pero el número de orden del triangular es 2n-1, impar, luego los que no son hexagonales formarán la sucesión que estamos estudiando: 3, 10, 21, 36,…, que está contenida en http://oeis.org/A014105

Expresión como diferencia entre una suma de pares y otra de impares

En la página OEIS enlazada se destacan estas relaciones:

3=4-1
10=6+8-1-3
21=8+10+12-1-3-5
36=10+12+14+16-1-3-5-7

No se justifican, y esto es una invitación a que lo hagamos nosotros. En primer lugar generalizamos.

Llamamos a nuestra sucesión TT(n)

TT(n)=T(2n)=SP(2(n+1),n)-SI(1,n)

Con SP(2(n+1),n) deseamos expresar que se toman n números pares a partir de 2(n+1) y con SI(1,n) que se suman los primeros n impares. Lo intentamos demostrar por inducción:

TT(n+1)=TT(n)+2n+1+2n+2, como ya sabemos por los párrafos anteriores. Si usamos la hipótesis para n queda:

TT(n+1)=2(n+1)+2(n+2)+…+2(2n)-1-3-5-7…- (2n-1)+2n+1+2n+2

Para construir la nueva suma de pares hay que añadir 2(2n+1)+2(2n+2) y eliminar 2(n+1). La diferencia es 4n+2+4n+4-2n-2=6n+4, que ha de salir de los nuevos sumandos 2n+1+2n+2=4n+3, que equivalen a 6n+4-(2n+1), siendo el paréntesis el nuevo impar que habría que restar, luego la estructura de la fórmula se mantiene y es correcta.

Usamos el álgebra

TT(n)=T(2n)=n(2n+1)=2n2+n
SP(2(n+1),n)=(2(n+1)+2(2n))*n/2=3n2+n
SI(1,n)=n2 como es sabido.

Por tanto, se verifica la diferencia.

Demostración visual

Ahí te la dejamos para el caso de 36. Analízala e intenta reproducirla para otros casos:



Esta construcción sólo es posible porque el triángulo es de orden par.

Otros desarrollos

Se cumple que TT(n)=T(2n)=3+7+11+15+…(4n-1), es decir, que es la suma de impares tomados de 4 en 4 a partir de 3. Si sabes verlo ( mira sólo las bolas rojas de la figura de la  derecha), en la anterior imagen se muestra esa suma con claridad. Puedes justificarlo algebraicamente:

3+7+11+15+…(4n-1)=(3+4n-1)*n/2=(4n+2)*n/2=n(2n+1)=TT(n)

Este desarrollo se puede escribir así:

TT(n)=22-12+42-32+62-52+82-72

que es una forma elegante de terminar esta entrada.






jueves, 19 de septiembre de 2013

Igualdad de sumas de cuadrados con un escalón

Repasando algunas propiedades curiosas me encontré en hojamat.es con esta:

365=102+112+122 = 132+142

La pregunta inmediata que me surgió fue la de si existían otros números con la misma propiedad o similar. Los encontré en OEIS (http://oeis.org/) pero  no descubriré dónde por ahora, aunque los lectores experimentados sabrán hallarlos. Con esto quiero aclarar que lo que se consiga en esta entrada está ya descubierto, pero el objetivo (tan frecuente en este blog) es intentar la concurrencia de métodos y el uso de la hoja de cálculo.

Nos acercaremos al problema con el planteamiento de dos preguntas:

¿Existen más números en los que la suma de tres cuadrados consecutivos coincida con los dos siguientes?
¿Qué ocurrirá si aumentamos o disminuimos el número de cuadrados?

Es probable que hayas pensado en el 25=32+42=52, luego parece que sí existen casos similares. Lo vemos.

Acercamiento con la hoja de cálculo

Si concretamos un número de inicio n y un número de cuadrados igual a k+1 en el primer miembro y a k en el segundo, con estas sencillas líneas podemos descubrir si existen otros casos:

For i=1 to 10000 (por ejemplo)
‘calcula el primer miembro
a = 0
For l = 0 To k
a = a + (i + l) ^ 2
Next l

‘calcula el segundo miembro
b = 0
For l = k + 1 To 2 * k
b = b + (i + l) ^ 2
Next l

‘Los compara y si son iguales lo comunica
If a = b Then
Msgbox(n)
Msgbox(a)
End If
Next i

Hemos tomado como tope 10000, pero después habrá quizás que ampliar. Implementa esto como rutina en tu hoja de cálculo y descubrirás que para cada k existe una solución y sólo una.

Recogemos en una tabla los primeros resultados:



Ahora ya descubrimos que los resultados coinciden con los recogidos en http://oeis.org/A059255, pero no podemos dejarlo así, porque en la tabla aparecen números triangulares y múltiplos de 5. Algo habrá detrás. Intentamos descubrirlo.

Un poco de Álgebra

Si sospechamos que las soluciones son únicas para cada valor de k, es probable que exista una relación algebraica sencilla. En efecto, aunque los principios son algo farragosos, con paciencia algebraica llegaremos a la meta. No damos todos los detalles y te dejamos practicar:

Primera suma de cuadrados A

Suponemos que comienza en n y termina en n+k (k+1 sumandos), es decir:


Segunda suma de cuadrados B


Observa cómo lo hemos escrito, para que te aproveches de la fórmula para la suma de números naturales consecutivos.

Desarrolla cada suma separando los coeficientes de n2, de n y los independientes. Como esta tarea te puede llevar a la desesperación, usa las dos populares fórmulas:



Calcula A-B para igualarla a cero y ve encontrando los coeficientes:

De n2 te deberá resultar a=1. Es fácil verlo.

De n, si sabes usar la primera fórmula ofrecida, con algún retoque, te dará b=-2k2

El coeficiente independiente es un poco más complejo de encontrar correctamente. Puedes usar la suma de cuadrados de los primeros naturales. Deberá resultar c=-2k3-k2

Así que la ecuación para calcular n quedaría así:


Su discriminante es el cuadrado de 2k(k+1), lo que nos garantiza una solución entera. Tomamos la positiva y, efectivamente n=k(2k+1), que es el número triangular de orden 2k, como habíamos sospechado al principio.

Para cada valor de k, la igualdad de cuadrados pretendida ocurre para n=k(2k+1), el número triangular correspondiente a 2k, y es por tanto la solución única.

Hemos resuelto con rigor lo que sospechábamos tras el uso de la hoja de cálculo. Esto es imprescindible: las herramientas informáticas sólo proponen o dan pistas, pero no demuestran nada. A veces olvidamos esta limitación.

Expresión de la suma

Ahora podemos calcular el valor de las dos sumas. Sustituimos k(2k+1) en una de ellas, y sacando factor común nos resulta

A(k)=k(k+1)(2k+1)(12k2+12k+1)/6. 

Por ejemplo, para k=3 resulta 3*4*7*(12*9+12*3+1)=2030.

El problema se ha reducido a una cuestión algebraica.

Carácter de múltiplos de 5

Es fácil ver que aunque la expresión propuesta tiene denominador 6, su resultado será entero, porque ese ha sido su origen, y porque los factores k(k+1)(2k+1) garantizan un factor 2 y un 3. Estúdialo, que no es difícil de descubrir.

¿De dónde sacamos el factor 5?

Lo podemos ver mediante congruencias módulo 5. El valor de k puede presentar respecto al 5 los restos 0, 1, 2, 3 o 4.

Resto 0: En ese caso k contiene el factor 5

Resto 1: El factor 12k2+12k+1 será múltiplo de 5

Resto 2: Contamos con el factor 2k+1

Resto 3: El factor 12k2+12k+1 sería congruente con 12*9+12*3+1=108+36+1=145, múltiplo de 5

Resto 4: Nos proporciona el factor deseado el valor de k+1

En todos los casos la suma de cuadrados será un múltiplo de 5.

Hemos terminado con éxito. Nuestras sospechas tenían fundamento y la sucesión 25, 365, 2030, 7230, 19855, 45955, 94220, 176460… representa simplemente los distintos valores de un polinomio de quinto grado definido sobre los números naturales.

jueves, 12 de septiembre de 2013

Tus funciones, disponibles en todas las hojas de cálculo (2)


Procedimiento para Apache OpenOffice y LibreOffice

En la entrada anterior (http://hojaynumeros.blogspot.com.es/2013/09/tus-funciones-disponibles-en-todas-las.html) proponíamos un procedimiento para extender tus funciones a cualquier hoja de cálculo que abras. Propusimos el procedimiento de crear e instalar un complemento para Excel. Si pasamos a Apache OpenOffice o LibreOffice, la creación de complementos (extensiones) se complica, porque está orientada al uso de terceros. Como aquí sólo nos interesa que tengas disponibles tus funciones en cualquier archivo nuevo que crees para tu propio uso, desarrollaremos un método mucho más sencillo.

Usaremos el código que se presentó en la anterior entrada para descomponer un número natural en sus factores primos. Cópialo y guárdalo, porque te servirá en esta entrada.

Una vez decidido el código deberás pasarlo a Apache OpenOffice o a LibreOffice. El procedimiento es similar en ambos programas, y sólo añadiremos los detalles específicos de LibreOffice si fuera necesario.

Abre una hoja nueva. Acude al menú Herramientas y en él elige Macros, después Organizar macros y finalmente OpenOffice Basic (o LibreOffice Basic)



Observa que tu archivo aparecerá en la parte baja (en la imagen aún no tiene título). Tú has de ir a la superior, “Mis macros - Standard”. Pide crear un módulo nuevo con el botón “Nuevo” de la parte derecha. Si ya existe uno, como ocurre en la imagen, le asignará el nombre de Module 2 u otro similar.

Abre el nuevo módulo que has creado (pinchando sobre su nombre) y pégale el código que desees, como el que te ofrecimos en la anterior entrada. Acepta y cierra todo.

Ahora puede ser un buen momento para comprobar si todo va bien. Vuelve a la hoja. Escribe cualquier número entero, por ejemplo 366220 en la celda B4. En otra celda escribe =factores(B4). Si ves escrito [2,2][5,1][18311,1] es que tu función se comporta bien. La interpretación de lo que ves es que el primer número de cada corchete es el factor primo y el segundo el exponente al que está elevado. En este caso 366220=22*5*18311. No intentes cálculos con esta expresión, que tiene formato de texto.

Como has usado el contenedor “Mis macros”, todo lo que has construido hasta ahora lo encontrarás implementado en cualquier libro que abras. Prueba a hacerlo. Cierra el archivo, abre uno nuevo, y en cualquier celda escribe un número entero y aplícale la función factores (no aparecerá en ningún catálogo. Te lo tienes que aprender)

En la imagen se ha descompuesto el número 491300 en factores dentro de un archivo recién creado:



Ahora inténtalo tú.

lunes, 9 de septiembre de 2013

Tus funciones, disponibles en todas las hojas de cálculo (1)


Procedimiento para Excel

El autor de esta entrada necesita frecuentemente descomponer un número en factores primos. Como esta función no viene implementada en la hoja de cálculo, ha tenido que programarla en el Basic de Excel. El problema que surge es que sólo está disponible en la hoja que contiene el código y no en cualquier otra que se cree. Esto tiene un remedio, y es la construcción de un complemento de Excel que nos permita acceder a esa factorización cuando se abra cualquier hoja.

Complementos de Excel

Para saber de qué estamos hablando, entra en las Opciones de Excel y busca Complementos. En la ventana que se abre podrás comprobar qué complementos tienes instalados en tu equipo














(el volcado de pantalla corresponde al Excel 2007 sobre Windows XP, una querida antigüedad,
pero igual te funciona en Excel 2010)

En la imagen vemos que el autor tiene instaladas dos herramientas de análisis, el Solver y un complemento suyo titulado Micomplemento. Como habrás comprendido, los cuatro contienen funciones y rutinas que no vienen implementadas en Excel originariamente.

Crea tu propio complemento

Al final de esta entrada se ha incluido el código mínimo necesario para implementar la descomposición factorial de un número entero (dentro de los límites de Excel y del propio código, no le pidas milagros) como un regalo del autor a sus lectores.

Pasos a seguir

En primer lugar tienes que escribir tus funciones. En el caso que estamos desarrollando basta con que las copies desde el final de esta entrada. Abre un archivo nuevo y pega en él las definiciones que desees según te explicamos a continuación:

Una vez decidido el código deberás pasarlo a Excel. Para ello acude a la pestaña Programador de la cinta de opciones. Si no la tienes visible deberás activarla en Opciones de Excel – Más frecuentes.

Entras en el ámbito de programación mediante el primer botón de la ficha Programador:



Te aparecerá el acceso a las macros que utiliza tu hoja de cálculo en este momento:



A ti no te aparecerá la referencia a Micomplemento. También, si usas la versión 2010 los colores podrán cambiar, pero el contenido será el mismo.

Ahora debes crear un módulo que aloje tu código. Pide Insertar – Módulo y Excel lo hará con el nombre de Modulo 1 (salvo que tengas otro anterior).

En la hoja en blanco que aparece pega el código que habrás copiado desde esta entrada o que haya sido creado por ti:



Ahora puede ser un buen momento para comprobar si todo va bien. Guarda el archivo nuevo como Libro habilitado para macros. Vuelve a la hoja. Escribe cualquier número entero, por ejemplo 366220 en la celda B4. En otra celda escribe =factores(B4). Si ves escrito [2,2][5,1][18311,1] es que tu función se comporta bien. La interpretación de lo que ves es que el primer número de cada corchete es el factor primo y el segundo el exponente al que está elevado. En este caso 366220=22*5*18311. No intentes cálculos con esta expresión, que tiene formato de texto.

Lo que has construido hasta ahora sólo te vale para el archivo que contiene el código. Para que se active en cualquier hoja hay que convertirlo en complemento.

Instalación del complemento

Borra si acaso los cálculos efectuados y vuelve a guardar el libro como complemento de Excel. Puedes cambiarle el nombre a factores. Guíate por la imagen:



Observa que Excel te lleva a la carpeta Complementos, que es donde debe estar alojado el tuyo.
No cambies esa carpeta, que si no, no podrás instalar el complemento.

Puedes acceder a la ruta en la que está situada la carpeta:



En Office 2010 se te muestra también toda la ruta, que es distinta a la anterior:





Es interesante conocer esa ruta, por si deseas borrar el archivo.

Instalación

Ya sólo te falta instalar tu complemento. Vuelve a las opciones de Excel y busca Complementos. En la parte inferior de la ventana tendrás el botón Ir… Úsalo y descubrirás que tu trabajo está preparado ya para ser usado:



Activa la casilla de verificación que está junto al nombre Factores y pulsa Aceptar. Si todo ha ido bien, cuando abras Excel de nuevo, en el catálogo de funciones definidas por el usuario dispondrás de la función factores:



Las otras dos funciones ajusta y sacaprimos son auxiliares y no tienes por qué usarlas, ya que quizás no interpretarías bien su resultado.

Ahora define tú un complemento propio ¡Suerte!


Código en Basic


Global primo(50), expo(50)
Global numomega

Function ajusta$(a)
Dim d$
d$ = Str$(a)
While Left$(d$, 1) = " "
d$ = Right$(d$, Len(d$) - 1)
Wend
ajusta$ = d$

End Function

Public Function sacaprimos(n)
Dim f, a, e

a = n
f = 2: i = 0: numomega = 0
While f * f <= a
e = 0
While a / f = Int(a / f)
e = e + 1
a = a / f
Wend
If e > 0 Then
numomega = numomega + 1
primo(numomega) = f
expo(numomega) = e
End If
If f = 2 Then f = 3 Else f = f + 2
Wend
If a > 1 Then
numomega = numomega + 1
primo(numomega) = a
expo(numomega) = 1
End If
sacaprimos = numomega

End Function

Public Function factores(n) As String
Dim a, nn
Dim s$

'saca factores en forma de string
a = n
nn = sacaprimos(a)
s$ = ""
For i = 1 To numomega
s$ = s$ + "[" + ajusta(primo(i)) + "," + ajusta(expo(i)) + "]"
Next i
factores = s$
End Function