Monte Carlo Experiments: 1 Part(s)
A quarter of a circle with random data points
using Random, LinearAlgebra, Plots
Random.seed!()
N = 10^4
data = [[rand(), rand()] for _ in 1:N]
indata = filter((x)-> (norm(x) <= 1), data)
outdata = filter((x)-> (norm(x) > 1), data)
piApprox = 4 * length(indata)/N
println("Pi estimate: ", piApprox)
scatter!(first.(indata), last.(indata), c=:blue, ms=1, msw=0,
xlims = (-1, 1), ylims=(-1, 1))
scatter!(first.(outdata), last.(outdata), c=:red, ms=1, msw=0,
xlims=(0, 1), ylims=(0, 1), legend=:none, ratio=:equal)
# savefig("quarter_circle.png")
A whole circle with random data points
using Random, LinearAlgebra, Plots
Random.seed!()
N = 10^4
data = [[2 * rand() - 1, 2 * rand() - 1] for _ in 1:N]
indata = filter((x) -> norm(x) <= 1, data)
outdata = filter((x) -> norm(x) > 1, data)
piApprox = 4 * length(indata) / N
println("Pi estimate: ", piApprox)
scatter(first.(indata), last.(indata), c=:blue, ms=1, msw=0,
xlims=(-1, 1), ylims=(-1, 1), legend=:none, ratio=:equal)
scatter!(first.(outdata), last.(outdata), c=:red, ms=1, msw=0,
xlims=(-1, 1), ylims=(-1, 1), legend=:none, ratio=:equal)
plot!(x -> sqrt(1 - x^2), -1, 1, c=:black, lw=2)
plot!(x -> -sqrt(1 - x^2), -1, 1, c=:black, lw=2)
# savefig("whole_circle.png")
function approximate_pi(n)
data = [[2 * rand() - 1, 2 * rand() - 1] for _ in 1:n]
indata = filter((x) -> norm(x) <= 1, data)
piApprox = 4 * length(indata) / n
return piApprox
end
values = [10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 70000, 100000, 200000, 500000, 700000, 1000000]
pi_values = [approximate_pi(i) for i in values]
print(pi_values)
# create a scatter plot where xlims is 2.0 to 4.0
scatter(pi_values, c=:blue, lw=2, ylims=(2.0, 4.0), label="π approximation")
# plot a red horizontal line at 3.14159, and set the label
plot!([3.14159 for i in 0:length(values)], c=:red, lw=2, label="π")