簡體   English   中英

具有相關參數的蒙特卡羅積分

[英]Monte-Carlo Integration with dependent parameters

我想使用蒙特卡羅方法集成下面給出的函數:

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 <= y < 10。有人可以告訴我如何根據 x 設置 y 的限制嗎?

當 (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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM