我有一组由不等式定义的点
例如0<x<3
,0<y<3
和x^2+y^2>1
,
如何从该集合中随机选择一个点?
答案 0 :(得分:2)
您可以使用拒绝采样,例如:
function myrand(R)
while true
x, y = 3rand(), 3rand() # now x∈[0,3[ and y∈[0,3[
x^2+y^2>R^2 && return (x,y)
end
end
当然,您应该确保R^2<18
,否则您将获得无限循环。 R
越靠近此边界,功能越昂贵(花费更多时间完成)。
如果您想提高它和R>3
的速度(例如,当您非常靠近边界时),则可以从间隔{{1 }},通过适当地重新缩放x
结果。原因是您知道如果y
或[sqrt(R^2-9),3]
小于或等于rand()
,您将确定拒绝这样的样本(实际上是从较小的正方形中采样)。