如何解决在 Julia 中使用 Sobol 序列计算 pi
我们可以通过观察正方形上随机生成的点与内部圆的关系来近似 pi。
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
解决方法
请参阅 Sobol.jl
的 README.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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。