Wimps / pi1.py
3v324v23's picture
ok
a0589da
import numpy as np
import matplotlib.pyplot as plt
# Constants
num_particles = 1000000 # Increase the number of particles for better accuracy
radius = 1.0 # Radius of the circle
# Generate random points in the unit square [-1, 1] x [-1, 1]
x_positions = np.random.uniform(-radius, radius, num_particles)
y_positions = np.random.uniform(-radius, radius, num_particles)
# Function to estimate pi based on particle positions
def estimate_pi_from_particles(x_positions, y_positions):
inside_circle = np.sum(x_positions**2 + y_positions**2 <= radius**2)
total_particles = len(x_positions)
pi_estimate = (inside_circle / total_particles) * 4 # Area ratio method
return pi_estimate
# Estimate pi
pi_estimate = estimate_pi_from_particles(x_positions, y_positions)
print(f"Estimated value of pi based on particle positions: {pi_estimate}")
# Optional: Visualize the particles
def plot_particles(x_positions, y_positions):
plt.figure(figsize=(8, 8))
plt.scatter(x_positions[x_positions**2 + y_positions**2 <= radius**2],
y_positions[x_positions**2 + y_positions**2 <= radius**2],
color='blue', s=1) # Points inside the circle
plt.scatter(x_positions[x_positions**2 + y_positions**2 > radius**2],
y_positions[x_positions**2 + y_positions**2 > radius**2],
color='red', s=1) # Points outside the circle
plt.xlim(-1.5, 1.5)
plt.ylim(-1.5, 1.5)
plt.title('Monte Carlo Simulation of Pi')
plt.gca().set_aspect('equal', adjustable='box')
plt.axhline(0, color='black', lw=0.5)
plt.axvline(0, color='black', lw=0.5)
plt.grid()
plt.show()
# Uncomment the line below to visualize the particles
# plot_particles(x_positions, y_positions)