如何使用Julia lang从集合中随机选择一个点?

时间:2018-07-26 05:59:17

标签: set julia

我有一组由不等式定义的点

例如0<x<30<y<3x^2+y^2>1

如何从该集合中随机选择一个点?

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(),您将确定拒绝这样的样本(实际上是从较小的正方形中采样)。