我正在尝试通过检查一对随机变量在圆内的频率来估计pi的值
我将绘制更多的随机数(1,000,000或更多),并将pi计算为圆圈内的点数乘以框的面积的比例。
盒子的面积为2x2 = 4,如果x ^ 2 + y ^2≤1,则一对在圆内或圆上。
首先,我如何绘制一个圆x ^ 2 + y ^ 2 = 1?
答案 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之间的cos
和sin
分量(x和y坐标),然后填充曲线之间的区域。固定宽高比可确保圆看起来像一个圆。这是结果图:
感谢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
如果要提高性能,应该采用直线循环。