[英]Using scipy integrate tplquad to evaluate triple integral of multivariate gaussian
[英]Taking triple integral for a function with more than 3 parameters using tplquad
我想在func(eps,e,p,M)
上接受這個三重積分:
積分在eps
, e
和p
,代碼在這里:
def Probability(eps,e,p,M):
prob=eps*e*(e**2-p**2)*function(M)
return prob
a=0
b=np.inf
def gfun():
return 0.25
def hfun():
return 0.5
def qfun(e):
return -e
def rfun(e):
return 3*e-1
def n(M):
n=integrate.tplquad(Probability, 0, np.inf,gfun,hfun,qfun,rfun,args=(M))
return n
但是我得到這個錯誤:
integrate() argument after * must be an iterable, not float
我不知道這是什么問題,另一個問題是:函數概率中參數的順序是否正確?
如前所述,其他參數必須位於元組中。 請注意, (1)
實際上是整數1
,用逗號(1,)
寫入一個元組。 該元組也傳遞給邊界函數。 這就是錯誤"gfun() takes 0 positional arguments but 1 was given"
。 下面的代碼正在工作:
import numpy as np
from scipy.integrate import tplquad
def probability(eps, e, p, M):
prob = eps * e * (e**2 - p**2) * M
return prob
def gfun(M):
return 0.25
def hfun(M):
return 0.5
def qfun(e, M):
return -e
def rfun(e, M):
return 3*e - 1
M = .1
n = tplquad(probability, 0, 12, gfun, hfun, qfun, rfun, args=(M,))
一個元組幾乎就像一個列表(有關更多詳細信息,請參見python:list vs tuple,何時使用每個? )。 您還可以編寫:
n = tplquad(probability, 0, 12, gfun, hfun, qfun, rfun, args=[M])
此處不需要逗號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.