【问题标题】:Monte-Carlo Integration with dependent parameters具有相关参数的蒙特卡洛积分
【发布时间】:2018-02-13 22:45:23
【问题描述】:

我想用蒙特卡罗方法整合下面给出的函数:

f(x,y,z) = (x**2 * y * z) + (y**2 * z**2 * x) + (x**3 * y**3 *z)

有限制:

0 <= x < 4,

0 <= y < 2*(x**2),

0 <= z < 1.

这是我迄今为止尝试过的。

from skmonaco import mcquad

def g(t):
   """
   The integrand.
   """
   x = t[0]
   y = t[1]
   z = t[2]

   f = (x**2 * y * z) + (y**2 * z**2 * x) + (x**3 * y**3 *z)

   return f

mcquad(g,npoints=100000,xl=[0., 0., 0.],xu=[4., 10., 1.],nprocs=4)

如果我将 y 的限制设置在两个常数之间,我会得到正确的答案。例如:0

【问题讨论】:

    标签: python python-3.x montecarlo numerical-integration


    【解决方案1】:

    当 (x,y,z) 在域内时,让 h(x,y,z) 等于 f(x,y,z),否则为 0。

    在更大的区域上整合 h

    0 <= x < 4,
    0 <= y < 32,
    0 <= z < 1
    

    给我们同样的结果。

    也就是说我们可以运行以下代码:

    from skmonaco import mcquad
    
    def g(t):
       """
       The integrand.
       """
       x, y, z = t
       if y < 2 * (x**2):
           return (x**2 * y * z) + (y**2 * z**2 * x) + (x**3 * y**3 *z)
       return 0
    
    print(mcquad(g,npoints=100000,xl=[0., 0., 0.],xu=[4., 32, 1.],nprocs=4))
    

    【讨论】:

      猜你喜欢
      • 2014-03-26
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 2020-07-05
      • 2016-01-09
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      相关资源
      最近更新 更多