jueves, 28 de enero de 2010

Compartir o no compartir (2)

(Continuación de la entrada anterior)

Propuesta de investigación en el aula

Fase 2

Simulación

Con una hoja de cálculo se pueden simular dos columnas de números aleatorios. La fórmula, como puede ser complicada, se debe sugerir. Recomendamos usar

=ENTERO(1+ALEATORIO()*COTA)

siendo COTA la que deseemos marcar para los números del experimento, porque funciona bien en Excel y Calc y no da problemas al recalcular.

En una nueva columna escribimos su M.C.D y contaremos, con CONTAR.SI, la cantidad de valores 1 que aparezcan. Dividimos después por el número de filas usadas y tendremos una aproximación a la probabilidad.

Esta tabla contiene el final de una simulación de números con cota 2000 en una simulación de 2000 filas:


El total de pares se ha calculado con la función CONTAR, el de coprimos con CONTAR.SI aplicado al valor 1, y la frecuencia mediante división.

Si deseas una simulación más potente mediante macros, puedes usar este código:

Sub compartir
Dim i,n,cota,m
dim a,b

randomize

cota=val(inputbox("Cota"))

n=val(inputbox("Número de repeticiones"))
m=0

for i=1 to n
a=int(rnd()*cota+1)

b=int(rnd()*cota+1)

if mcd(a,b)=1 then m=m+1

next i
msgbox(m)

end Sub


Con esta macro podemos preparar tablas en las que se observe su acercamiento al límite teórico. La siguiente está construida con 10000 simulaciones para cada nivel:


Se observa la gran estabilidad de este cálculo, ya que a veces los errores propios de la simulación esconden la convergencia al límite.

Límite similar

Presenta el mismo límite 0,60792710...la frecuencia con la que aparecen los números libres de cuadrados dentro del conjunto de números enteros. Se llaman así a aquellos que no son divisibles entre ningún cuadrado, como 21 o 30. Es un poco complicado buscar esos números de forma manual, por lo que podemos usar una función nueva en la hoja de cálculo, cuyo código puede ser:

Public function librecuad(a)
dim m,n,p
dim divi as boolean
if a<4 then librecuad="1" else divi=false:n=2:p=1
while divi=false and n<=int(sqr(a)) if a/n/n = int(a/n/n) then divi=true:p=0 n=n+1
wend
librecuad=p
end if
end function

Es una función que nos devuelve un 1 si el número está libre de cuadrados, y 0 si contiene alguno. Se pueden crear columnas paralelas como las de la imagen y después usar la función CONTAR para calcular la frecuencia


Si diseñamos dobles columnas para números de mil en mil, nos sorprenderemos de la estabilidad de las frecuencias y su cercanía al límite



No hay comentarios: