Stars-Knowledge 2024-07-18 00:27 采纳率: 0%
浏览 2

用Monte Carlo方法求π值,为什么结果只有2.8左右,相差那么大? (语言-python)

代码如下:

import numpy as np
from numpy.random import rand
total=1000
N=rand(total)
xrand=N ; yrand=N
k=xrand**2+yrand**2<=1
a=np.sum(k)/total
print("π值为:",a*4)
  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-18 00:27
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    问题1:为什么结果只有2.8左右?

    原因分析:

    1. 样本量过小:代码中使用的样本量(total=1000)非常小。Monte Carlo方法的准确性很大程度上依赖于样本量。样本量越大,结果越接近真实值。
    2. 随机性:随机生成的点可能分布不均匀,特别是在样本量较小的情况下,随机误差的影响更大。
    3. 计算方法:代码中直接将生成的点的坐标平方和与1比较,这种方法虽然简单,但可能不够精确。

    问题2:如何提高计算π值的准确性?

    解决方案:

    1. 增加样本量:增加total的值,从而增加随机生成的点的数量,减少误差。
    2. 多次运行并取平均值:多次运行代码,取多次结果的平均值,可以进一步减少误差。
    3. 优化随机数生成:确保生成的点分布均匀,可以使用不同的随机数生成方法或种子。

    以下是修改后的代码示例:

    import numpy as np
    from numpy.random import rand
    
    def estimate_pi(total=1000, trials=10):
        results = []
        for _ in range(trials):
            xrand = rand(total)
            yrand = rand(total)
            k = (xrand**2 + yrand**2) <= 1
            a = np.sum(k) / total
            results.append(a * 4)
        return np.mean(results)
    
    pi_estimate = estimate_pi(total=1000000, trials=100)
    print("π估计值为:", pi_estimate)
    

    代码解释:

    • 函数定义:定义了一个estimate_pi函数,接受总样本量(total)和试验次数(trials)作为参数。
    • 循环计算:在每次试验中,生成total个随机点的坐标,计算这些点落在单位圆内的比例。
    • 结果平均:将每次试验的结果存储在results列表中,最后计算这些结果的平均值作为π的估计值。
    • 增加样本量和试验次数:将样本量增加到1000000,并运行100次试验,显著提高了计算的准确性。

    通过这些改进,可以显著提高使用Monte Carlo方法计算π值的准确性。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月18日