Julia Pi值的估计

Julia Pi值的估计,julia,Julia,我试图通过检查一对随机变量在一个圆内的频率来估计pi的值 我将画更多的随机数(1000000或更多)并计算圆周率,圆周率乘以盒子面积 长方体的面积为2x2=4,如果x^2+y^2,则一对在圆内或圆上≤一, 首先,如何绘制一个圆x^2+y^2=1?如果只想估算圆周率,则无需绘制任何图形。生成一个n乘2的矩阵,每个元素都是法线。然后您可以在行中循环,查看平方和是否小于1。您可以使用绘图在一行中绘制一个圆。jl: using Plots gr() plot(cos, sin, 0, 2pi, lin

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

我将画更多的随机数(1000000或更多)并计算圆周率,圆周率乘以盒子面积

长方体的面积为2x2=4,如果x^2+y^2,则一对在圆内或圆上≤一,


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

如果只想估算圆周率,则无需绘制任何图形。生成一个n乘2的矩阵,每个元素都是法线。然后您可以在行中循环,查看平方和是否小于1。

您可以使用
绘图在一行中绘制一个圆。jl

using Plots
gr()

plot(cos, sin, 0, 2pi, line=4, leg=false, fill=(0,:orange), aspect_ratio=1)
这将在0和2pi之间绘制
cos
sin
分量(x和y坐标),然后填充曲线之间的区域。固定纵横比可以确保圆看起来像一个圆。这是结果图:


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

这里有三个例子说明如何使用
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

如果你想提高性能,就应该采用直循环。

我会把你的问题改为“如何在Julia中绘制圆”,因为这就是你在这里要问的问题。如果需要的话,为估算pie打开另一个问题。或者,至少,你能澄清一下,你是否需要绘图或估算pi的帮助吗?嗨@DNF,为标题道歉。我试图估算Pi,并将数据存储在真与假的nx1列向量中。如何使用length()提取“真相”?应该避免创建数据数组。下面我的答案展示了一些零分配的方法。如果您已经有一个数据数组,并且需要计算
true
s,您可以只做
count(arr)
。那么,您得到的任何答复是否回答了您的问题?您似乎已经收到了绘图和计算部分的答案。如果是这样的话,你能把一个标记为已接受吗?没有必要拆分它。只需做
t=LinRange(0,2π,1000);绘图(cos.(t),sin.(t))
。(另外,不要像使用
x
那样
收集
范围。一般来说,你几乎不应该公平地使用
collect
。)今天早上还很早。。。谢谢不,不要创建矩阵,这是非常浪费和缓慢的。只需运行一个循环并使用
rand()^2+rand()^2递增计数器
julia> using BenchmarkTools

julia> N = 10^7
10000000

julia> @btime pisum1($N)
  105.221 ms (0 allocations: 0 bytes)
3.1410964

julia> @btime pisum2($N)
  81.046 ms (0 allocations: 0 bytes)
3.1416524

julia> @btime pisum3($N)
  34.942 ms (0 allocations: 0 bytes)
3.141756