使用Sobol序列在Julia中计算pi

3

通过观察正方形中随机生成的点与内部圆之间的关系,可以近似计算π。

enter image description here

function picircle(n)
n = n
N = 2n+1

x = range(-1, 1, length=N)
y = rand(N)

center = (0,0)
radius = 1

n_in_circle = 0

for i in 1:N
    if norm((x[i], y[i]) .- center) < radius
        n_in_circle += 1
    end
end

println(4 * n_in_circle / N)
end
picircle(1000)

3.1424287856071964

然而,我想使用拟蒙特卡洛方法。我不想使用伪随机数,而是想使用Sobol序列中的数字。我知道如何生成它们,但不确定如何在我的代码中实现。

using Sobol
s = SobolSeq(2) # Creates a Sobol-Sequenz in 2 Dimensions
1个回答

3
请参阅 Sobol.jlREADME.md 以了解如何迭代 SobolSeq。 要点在于我们可以使用 next!(s) 来获取下一个 n 个元素,对于 n 维序列。
julia> using Sobol

julia> s = SobolSeq(2)
2-dimensional Sobol sequence on [0,1]^2

julia> N = 10_000_000
10000000

julia> 4 * count(hypot(next!(s)...) < 1 for _ in 1:N) / N
3.1415952

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接