El cálculo del valor de π (pi) es un problema clásico en matemáticas y se presta especialmente bien a la resolución mediante simulaciones. Una de las técnicas para estimar π es a través de la simulación de puntos aleatorios dentro de un área cuadrada que contiene un círculo inscrito. Este enfoque se basa en la relación entre el área de un cuadrado y un círculo, lo que nos permite aproximar el valor de π.
El principio fundamental de esta aproximación es hacer una relación entre el número de puntos generados de forma aleatoria con el área total calculada considerando si estos aparecen dentro del rango del círculo o no. Cuando se usa una escala de generación de números aleatorios entre 0 y 1 el área máxima del cuadrado que podemos calcular es de 1 y el del circulo de acuerdo a las fórmulas de área es de \(\frac{\pi}{4}\), sustituyendo el valor de r , en la ecuación.
\[ Área = \pi r^2 = \frac{\pi}{4} \] Conociendo esta relación, podemos modificar la ecuación para que el área que calculemos a partir de puntos no sea la incógnita y que en su lugar sea π, tal que asi:
\[ \pi = \frac{Área}{r^2} = Área * 4 \]
Para alimentar las simulaciones se hará uso de las funciones de R que permiten generar números bajo diferentes distribuciones de probabilidad. En este caso queremos tener una distribución que nos de una misma probabilidad a lo largo de un rango, por ello se hará uso de la distribución uniforme para generar dos conjuntos de datos de tamaño n, cada uno de una dimensión, pero que al juntarlos formen un espacio bidimensional de puntos dispersos equitativamente.
Para ilustrar la simulación usaremos un rango de generación de numero de tamaño 1 (números entre 0 y 1) y un n = 1.000. Crearemos dos grupos de datos x1, y1.
n1=1000
# Paso 1: Generar coordenadas aleatorias
x1 <- runif(n1, min = 0, max = 1) ## En este caso 1.000 puntos
y1 <- runif(n1, min = 0, max = 1) ## En este caso 1.000 puntos
Al unificar ambos conjuntos para crear un espacio bidimensional este se ve asi:
# Paso 2: Crear un dataframe con las cordenadas
data=as.data.frame(cbind(x1,y1))
# Visualizar
library(ggplot2)
ggplot(data, aes(x = x1, y = y1)) +
geom_point()+
theme_bw()
La forma observada en el plano y la distribución de los puntos asemejan la forma de un cuadrado, en este caso de área = 1. Para lograr una estimación mas acertada es necesario tener una buena cantidad de puntos de referencia, para lo cual es relevante incrementar el valor de n.
El área del círculo puede ser estimada a partir de este conjunto si
consideramos tomar aquellos puntos que estén ubicados a al menos 0.5
unidades del centro, que simula el radio del círculo. Para hacerlo
podemos usar la siguiente ecuación:
\[
Distancia =(x - 0.5)^2 + (y - 0.5)^2
\] La cual realiza el calculo para cada coordenada y determina el
valor de distancia al centro de cada punto. Si el valor final es menor o
igual a 0.25, el punto esta dentro del radio del círculo.
data1$presencia = (x1 - 0.5)^2 + (y1 - 0.5)^2 <= 0.25 ## Genera una columna de TRUE/FALSE segun la condición.
data1$presencia = as.character(data1$presencia)
data1$presencia<- gsub("FALSE", "Afuera", data1$presencia, ignore.case = TRUE) ####
data1$presencia<- gsub("TRUE", "Adentro", data1$presencia, ignore.case = TRUE) ####
Los tres conjuntos de datos generados con anterioridad con 1.000, 10.000 y 100.000 puntos se verían así una vez diferenciados los puntos internos de los externos:
Para el último paso, calcularemos el valor del área del círculo en base a la cantidad de puntos internos dividido entre el total de puntos \(Área = \frac{No. puntosinternos}{No. total de puntos}\) cuyo valor sustituiremos en la ecuación para estimar π, donde \(\pi = \frac{Área}{r^2} = Área * 4\).
E1=as.numeric(table(data1$presencia))
E1= round((E1[1]/n1) * 4,digits=5)
E2=as.numeric(table(data2$presencia))
E2= round((E2[1]/n2) * 4,digits=5)
E3=as.numeric(table(data3$presencia))
E3= round((E3[1]/n3) * 4,digits=5)
La estimación del valor de π usando 1.000, 10.000 y 100.000 puntos se muestra en la siguiente tabla:
| 1.000 | 10.000 | 100.000 |
|---|---|---|
| 3.2 | 3.1528 | 3.144 |
El ejercicio de simulación demuestra que es posible aproximar el valor de π usando un sistema de puntos en un plano que obedezcan a una geometría especifica. Como era de esperarse simulaciones con mayor cantidad de puntos demuestran un mayor ajuste al valor real de π puesto que permiten un calculo mas preciso del área del circulo que se toma como base para la estimación final, lo cual también deja entre ver la gran exigencia en términos de tamaño de muestra que necesita este método en particular para hacer estimaciones confiables.