La estimación del valor de \(π\) ha sido un problema apasionante en la historia de las matemáticas. En este contexto, nos enfrentamos al desafío de estimar \(π\) utilizando una simulación basada en la geometría del círculo inscrito en un cuadrado unitario. Este método aprovecha la relación entre las áreas del círculo y del cuadrado para obtener una aproximación del valor de \(π\).
La siguiente figura sugiere cómo estimar el valor de \(π\) mediante una simulación. En ella, se muestra un círculo con un área igual a \(π/4\), inscrito en un cuadrado cuya área es igual a \(1\). Se seleccionan de forma aleatoria n puntos dentro del cuadrado. La probabilidad de que un punto esté dentro del círculo es igual a la fracción del área del círculo con respecto al área del cuadrado, que es \(π/4\). Por lo tanto, se puede estimar el valor de \(π/4\) contando el número de puntos dentro del círculo, para obtener la estimación de \(π/4\). A partir de este último resultado, se puede encontrar una aproximación para el valor de \(π\).
Notas
Es probable que la estimación con solo 1000 puntos tenga un margen de error de 0.05 o más. No obstante, al llevar a cabo una simulación con 10000 o 100000 puntos, las posibilidades de obtener una estimación más precisa, cercana al valor verdadero, aumentan considerablemente.
Funciones recomendadas : runif(),
function(){}
Problema tomado de Navidi(2006)
La metodología empleada para abordar este problema se basa en el método de Monte Carlo. Implica la generación de coordenadas aleatorias dentro de un cuadrado unitario, seguido por la determinación de cuántas de estas coordenadas caen dentro de un círculo inscrito. Utilizando la proporción de puntos dentro del círculo, se realiza una estimación del valor de π. Este enfoque se replica para distintos tamaños de muestra con el fin de evaluar la precisión de la estimación.
Generación de coordenadas X y Y: Se generarán n coordenadas x,
denotadas como \(X1\), \(X2\), …, \(Xn\), y coordenadas Y, denotadas como \(Y1\), \(Y2\), …, \(Yn\), utilizando la función
runif() de R. Esta función permite generar variables
aleatorias distribuidas uniformemente en el intervalo [0, 1].
Evaluación de puntos dentro del círculo: Para determinar qué puntos \((Xi, Yi)\) se encuentran dentro del círculo, se calculará la distancia euclidiana de cada punto al centro del cuadrado, ubicado en (0.5, 0.5). Esta distancia se calcula utilizando la fórmula \((Xi - 0.5)^2 + (Yi - 0.5)^2\). Si el valor de esta expresión es menor que 0.25 (el radio del círculo al cuadrado), entonces el punto se considera dentro del círculo. Se contabilizará el número de puntos dentro del círculo.
Estimación de \(π\): A partir del número de puntos dentro del círculo, se obtendrá una estimación de \(π\) utilizando la relación entre el área del círculo y el área del cuadrado. Dado que el área del cuadrado es 1 y el área del círculo es π/4, la proporción de puntos dentro del círculo respecto al total de puntos generados proporcionará una estimación de \(π/4\). Multiplicando esta estimación por 4, se obtendrá una aproximación del valor de \(π\).
Presentación de resultados: Se presentaron los resultados acompañados de gráficos que proporcionan respuestas a las preguntas clave: ¿Cuántos puntos se encuentran dentro del círculo? y ¿Cuál es la estimación de \(π\)?
Se llevarán a cabo estas etapas para diferentes valores de n, comenzando con 1000 puntos y aumentando progresivamente a 10000 y 100000 puntos, como se recomienda en la nota. Esto permitirá evaluar cómo varía la precisión de la estimación de π conforme aumenta el tamaño de la muestra.
El proceso se inició con el desarrollo de una función para estimar el
valor de \(π\)
(estimar_pi) utilizando la estructura
function(n), donde “n” representa el número de puntos que
se desean evaluar. Posteriormente, el código genera coordenadas
aleatorias dentro del cuadrado unitario. Estas coordenadas, que varían
entre 0 y 1, se obtienen mediante la función runif(), la
cual genera números pseudoaleatorios siguiendo una distribución
uniforme. Además, se importó la biblioteca ggplot2 para su posterior
utilización en la creación de gráficos.
library(ggplot2) # Librería para graficar
# Función para estimar pi utilizando el método de Monte Carlo
estimar_pi <- function(n) {
# Generar coordenadas aleatorias dentro del cuadrado unitario
x <- runif(n, min = 0, max = 1)
y <- runif(n, min = 0, max = 1)
}Para determinar si un punto está dentro del círculo, se requiere que su distancia al centro sea menor O igual al radio. En este caso, el radio es de 0.5 unidades, y el centro está ubicado en las coordenadas (0.5, 0.5). Por lo tanto, se debe satisfacer la fórmula de la distancia euclidiana en dos dimensiones:
\[ (X_i - 0.5)^2 + (Y_i - 0.5)^2 \leq 0.5^2 \]
Aqui \(Xi\) y \(Yi\) representan las coordenadas del punto en cuestión, y la desigualdad establece la condición para que el punto esté dentro del círculo.
Siguiendo este enfoque, se procedió a determinar si los puntos
generados aleatoriamente se encontraban dentro del círculo. Para ello,
se llevó a cabo una iteración empleando la función for
desde 1 hasta n. Antes de iniciar la iteración, se estableció un
contador (contar) para registrar el número de puntos que
quedaban dentro del círculo, y se creó un vector
(dentro_circulo) para almacenar esta información punto por
punto. Durante cada iteración, se evaluó si el punto actual cumplía con
la condición de pertenencia al círculo mediante el uso de la distancia
euclidiana.
#...............
# Contador para los puntos dentro del círculo
contar <- 0
# Vector para almacenar si cada punto está dentro del círculo
dentro_circulo <- rep(FALSE, n)
# Iterar sobre cada punto y determinar si está dentro del círculo
for (i in 1:n) {
if ((x[i] - 0.5)^2 + (y[i] - 0.5)^2 <= 0.25) {
contar <- contar + 1
dentro_circulo[i] <- TRUE
}
}
}Contando los puntos que caen dentro del círculo y considerando la relación de áreas entre el círculo y el cuadrado, es posible obtener una estimación del valor de \(π\). Esta estimación se obtiene dividiendo la cantidad de puntos dentro del círculo entre el número total de puntos (n), y luego multiplicando este cociente por 4 para obtener una aproximación del valor de \(π\).
La función concluye generando un gráfico que ilustra la disposición
de los puntos y devuelve las variables de interés mediante
return(). Además, se agregó la función
set.seed() de R al principio de la función
estimar_pi(). Esta función se utiliza para establecer una
semilla inicial en el generador de números aleatorios de R, lo que
garantiza que los resultados sean reproducibles. Esto significa que si
se ejecuta la función varias veces con la misma semilla, se obtendrán
los mismos resultados. A continuación, se presenta el código completo de
la función estimar_pi().
library(ggplot2) # Librería para graficar
# Función para estimar pi utilizando el método de Monte Carlo
estimar_pi <- function(n) {
# Se agrega la semilla para que pueda ser reproducible y verificable
set.seed(123)
# Generar coordenadas aleatorias dentro del cuadrado unitario
x <- runif(n, min = 0, max = 1)
y <- runif(n, min = 0, max = 1)
# Contador para los puntos dentro del círculo
contar <- 0
# Vector para almacenar si cada punto está dentro del círculo
dentro_circulo <- rep(FALSE, n)
# Iterar sobre cada punto y determinar si está dentro del círculo
for (i in 1:n) {
if ((x[i] - 0.5)^2 + (y[i] - 0.5)^2 <= 0.25) {
contar <- contar + 1
dentro_circulo[i] <- TRUE
}
}
# Estimar pi
pi_estimado <- 4 * (contar / n)
# Crear dataframe con coordenadas
df <- data.frame(x = x, y = y, dentro_circulo = dentro_circulo)
# Crear gráfico
plot <- ggplot(df, aes(x, y)) +
geom_point(aes(color = dentro_circulo), alpha = 0.5) +
labs(
title = sprintf("Estimación de π con %d puntos: %.4f", n, pi_estimado)
) +
coord_equal() + # Ajustar la escala para que sea igual en ambos ejes
theme_minimal()+
scale_color_manual(name = "Dentro del Círculo",
values = c("TRUE" = "#00bfc4", "FALSE" = "#F8766D"))
return(list(pi_estimado = pi_estimado, plot = plot, contar = contar, df = df))
}Ahora bien, al emplear la función creada con distintos valores de
n, obtendremos un gráfico que muestra la distribución de
los puntos, así como una estimación del valor de \(π\) y la cantidad de puntos que se
encuentran dentro del círculo.
# Definir tamaño de muestra
n <- 1000
# Estimar pi y obtener gráfico de puntos dentro del círculo
result <- estimar_pi(n)
pi_estimado <- result$pi_estimado
contar <- result$contar
plot <- result$plot
#df <- result$df #ver el dataframe generado
# Mostrar gráfico,n usado,estimación de pi y número de puntos dentro del círculo
print(plot)print(sprintf("Al utilizar %d puntos, la estimación de π es de %.4f, y dentro del círculo se encuentran %d puntos", n, pi_estimado, contar))## [1] "Al utilizar 1000 puntos, la estimación de π es de 3.2000, y dentro del círculo se encuentran 800 puntos"
# Definir tamaño de muestra
n <- 10000
# Estimar pi y obtener gráfico de puntos dentro del círculo
result <- estimar_pi(n)
pi_estimado <- result$pi_estimado
contar <- result$contar
plot <- result$plot
#df <- result$df #ver el dataframe generado
# Mostrar gráfico,n usado,estimación de pi y número de puntos dentro del círculo
print(plot)print(sprintf("Al utilizar %d puntos, la estimación de π es de %.4f, y dentro del círculo se encuentran %d puntos", n, pi_estimado, contar))## [1] "Al utilizar 10000 puntos, la estimación de π es de 3.1576, y dentro del círculo se encuentran 7894 puntos"
# Definir tamaño de muestra
n <- 100000
# Estimar pi y obtener gráfico de puntos dentro del círculo
result <- estimar_pi(n)
pi_estimado <- result$pi_estimado
contar <- result$contar
plot <- result$plot
#df <- result$df #ver el dataframe generado
# Mostrar gráfico,n usado,estimación de pi y número de puntos dentro del círculo
print(plot)print(sprintf("Al utilizar %d puntos, la estimación de π es de %.4f, y dentro del círculo se encuentran %d puntos", n, pi_estimado, contar))## [1] "Al utilizar 100000 puntos, la estimación de π es de 3.1463, y dentro del círculo se encuentran 78658 puntos"
La estimación de π mediante el método de Monte Carlo basado en la geometría del círculo inscrito en un cuadrado se ha revelado como una técnica eficaz y simple. Este enfoque, que se basa en la generación aleatoria de puntos dentro del cuadrado unitario y la posterior evaluación de cuántos caen dentro del círculo inscrito, ofrece una aproximación sólida del valor de \(π\).
La precisión de esta estimación mejora notablemente con el aumento del número de puntos generados, como se evidencia en los resultados obtenidos con 1000, 10000 y 100000 puntos. Esto subraya la importancia del tamaño de la muestra en la calidad de la estimación, aunque es necesario equilibrar la precisión deseada con el costo computacional asociado.
El método de Monte Carlo no se limita a la estimación de π y puede adaptarse para abordar una amplia gama de problemas en diversas disciplinas. Su flexibilidad y versatilidad lo convierten en una herramienta poderosa en la práctica científica y técnica.
Es esencial tener en cuenta las limitaciones y suposiciones inherentes al método, como la distribución de puntos generados aleatoriamente y el tiempo de computación requerido para obtener estimaciones altamente precisas en problemas complejos.
En resumen, la estimación de \(π\) mediante el método de Monte Carlo ilustra la intersección entre la teoría matemática y la práctica computacional en la exploración y resolución de problemas científicos y técnicos. Su simplicidad conceptual y su robustez hacen de este enfoque una herramienta valiosa en la estimación numérica y la investigación científica.
La solución propuesta destaca la eficacia del método de Monte Carlo en la estimación de \(π\), mediante la generación aleatoria de coordenadas dentro de un cuadrado unitario y el cálculo de la proporción de puntos dentro de un círculo inscrito en él. La distribución uniforme de coordenadas asegura una representación equitativa de puntos, mejorando la precisión de la estimación con el aumento del número de puntos generados. Sin embargo, es importante considerar que, después de alcanzar cierto número de puntos, como en el caso de n = 100,000, el tiempo de cálculo puede aumentar significativamente, requiriendo una mayor capacidad computacional para lograr una mayor precisión. Además, la aplicación de conceptos geométricos fundamentales, como la relación entre áreas de figuras geométricas, respalda y fundamenta el proceso de estimación de \(π\), realzando la utilidad del método de Monte Carlo en la resolución de problemas numéricos y científicos.
CONTACTO