估算Pi的值

时间:2018-10-16 21:41:14

标签: julia

我正在尝试通过检查一对随机变量在圆内的频率来估计pi的值

我将绘制更多的随机数(1,000,000或更多),并将pi计算为圆圈内的点数乘以框的面积的比例。

盒子的面积为2x2 = 4,如果x ^ 2 + y ^2≤1,则一对在圆内或圆上。

首先,我如何绘制一个圆x ^ 2 + y ^ 2 = 1?

3 个答案:

答案 0 :(得分:1)

您可以使用Plots.jl在1条直线上绘制一个圆:

using Plots
gr()

plot(cos, sin, 0, 2pi, line=4, leg=false, fill=(0,:orange), aspect_ratio=1)

这将绘制0和2pi之间的cossin分量(x和y坐标),然后填充曲线之间的区域。固定宽高比可确保圆看起来像一个圆。这是结果图:

enter image description here

感谢DNF提出了一个简单的解决方案。

答案 1 :(得分:0)

如果您只想估计pi,则无需绘制任何内容。生成一个n x 2矩阵,每个元素均为法线。然后,您可以遍历各行以查看平方和是否小于1。

答案 2 :(得分:0)

以下是三个使用def find_text_bits(payload): if payload['mimeType'] == 'multipart': return [part_text for part in payload['parts'] for part_text in find_text_bits(part)] elif payload['mimeType'] == 'text': return [payload] 方法计算π的示例。前两个使用生成器,而最后一个使用普通循环。请注意,为了避免分配内存,我避免创建数组。

rand

让我们测试它们的速度:

pisum1(N) = count(true for _ in 1:N if rand()^2 + rand()^2 <= 1) * 4/N

pisum2(N) = count(rand()^2 + rand()^2 <= 1 for _ in 1:N) * 4/N

function pisum3(N)
    s = 0
    for _ in 1:N
        s += (rand()^2 + rand()^2 <= 1)
    end
    return 4s/N
end

如果要提高性能,应该采用直线循环。