【问题标题】:Compute ???? as a random sum (Monte Carlo)计算???作为随机和(蒙特卡洛)
【发布时间】:2016-05-13 20:04:08
【问题描述】:

我需要通过求和来估计 pi ​​的值 ?????? = (1 / (???? + 1)) ∑ 1/( 1 - ???? ????2 )^ (1 / 2) 其中 ??????????是均匀分布的随机数。

import math
import random

def Pi(N,x):
     S = (1/(N+1))*(1/(1-x**2)**(0.5))
     return S

def function(N,a,b):
     x = random.uniform(a,b)
     total = sum(Pi(N,x))
     return total

print(function(1000,0.0,1.0))

输出基本上是给我这个。

TypeError: 'float' 对象不能被解释为整数

【问题讨论】:

  • 哪个部分抛出错误?
  • 对不起,我没有包括输出。我不断收到“TypeError:'float' 对象不能被解释为整数”,老实说,我不知道我的意思。我会看看你刚才放的链接。
  • print(function(1000.0)) S = sum(Pi(N,0.0,1.0))
  • 您输入了错误消息。当我运行你的代码时,我得到TypeError: 'float' object is not iterable。不可迭代与“不能被解释为整数”有很大不同。将来,请将整个异常回溯复制到您的问题中,以避免此类问题。它还将准确显示导致异常的行。
  • Pi(N,x) 返回一个数字,sum() 需要一个数字列表。

标签: python python-3.x montecarlo pi


【解决方案1】:

您正在根据Pi 的结果调用sum。但是Pi 返回一个数字,而不是可迭代的。只需删除对sum 的调用即可。 sum 接受一个可迭代对象(列表、字典、元组等)并将所有值相加。所以当你传递一些它不能迭代的东西(比如浮点数)时,它不能对任何东西求和,因为没有值可以迭代。

import random

def Pi(N,x):
     S = (1/(N+1))*(1 / (1-x**2) ** 0.5)
     return S

def function(N,a,b):
     x = random.uniform(a,b)
     total = Pi(N,x)
     return total

print(function(1000,0.0,1.0))

【讨论】:

    【解决方案2】:

    我很确定您想运行 Pi 函数 N 次,而不仅仅是一次。为此,您需要某种循环。既然你想使用内置的sum,那么生成器表达式会很自然:

    def function(N, a, b):
        total = sum(Pi(N, random.uniform(a, b)) for _ in range(N))
        return total
    

    这不会返回任何太接近pi 的东西。也许是pi/2?我不知道您的公式应该如何运作良好以发现计算问题。

    【讨论】:

      【解决方案3】:

      您实际上是在对 pi/2 进行采样,而您实际上并不需要 Pi 函数中的 N。你应该在总结之后应用它

      import math
      import random
      
      def Pi(x):
          return 1.0/math.sqrt(1.0 - x*x)
      
      random.seed(12345)
      
      N = 100000
      total = sum(Pi(random.uniform(0.0, 1.0)) for _ in range(N))
      
      total /= float(N+1)
      
      print(2.0*total)
      

      会产生

      3.1429294210892524
      

      【讨论】:

        猜你喜欢
        • 2013-05-02
        • 2018-02-10
        • 1970-01-01
        • 1970-01-01
        • 2014-03-26
        • 1970-01-01
        • 2018-10-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多