jueves, 4 de noviembre de 2010

¿En cuántas sumas de cuadrados? (4 de 5)

Problema del círculo de Gauss

En la anterior entrada nos aparecía el número PI de forma algo sorprendente. En esta veremos que de sorpresa nada. Todo está relacionado, y se basa en la solución del llamado Problema del círculo de Gauss.

No entraremos demasiado en la parte teórica, que podéis consultar en las páginas


o en el Blog “Juan de Mairena”


Lo que presentaremos aquí es su tratamiento con hoja de cálculo, pero con una pequeña introducción.

En las dos entradas anteriores desarrollamos los números enteros positivos como sumas de dos cuadrados de base entera. Estamos en el terreno del Teorema de Pitágoras, y si representamos todas las soluciones para un número N dado como catetos de un triángulo, los puntos representados por ellos se situarán todos en el círculo de radio la raíz cuadrada de N.

Si con una hoja de cálculo creamos una lista de valores X e Y tales que X2+Y2 sea menor o igual que N, según lo explicado, se rellenarán puntos dentro de un círculo, lo que representará perfectamente el círculo de Gauss. 

En la imagen puedes ver el gráfico correspondiente a N=22


Para conseguir esta imagen necesitaremos el algoritmo que encuentre todas las soluciones para que X2+Y2 no sobrepase N. Una vez conseguida la lista de soluciones bastará con crear un gráfico del tipo XY para conseguir la aproximación al círculo.
Se puede usar un código en el Basic de OpenOffice.org similar al siguiente (fácilmente adaptable a Excel):

Sub desarrollo(n)
dim i,j,s,t,fi,a,b,x

fi=5
StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(3,fi).value=0
StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(4,fi).value=0
for x=1 to n
i=0
a=sqr(x)
while <=a
j=x-i*i
if j=int(sqr(j))^2 or j=0 then
b=sqr(j)
for s=-1 to 1 step 2
for t=-1 to 1 step 2
fi=fi+1
StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(3,fi).value=i*s
StarDesktop.CurrentComponent.sheets(0).GetCellByPosition(4,fi).value=b*t
next t
next s
end if
i=i+1
wend
next x
End Sub

Puedes descargarte las versiones en Excel 2007 y OpenOffice.org 3 desde la dirección