如何使用tplquad?

时间:2016-11-04 20:55:23

标签: python scipy integrate

我尝试整合这个:

整合(集成(整合(2 * SIN(Z)* COS(ATAN((2个* COS(Y)-0.5 + X)/(2 * SIN(Y))))中,y,0,PI / 2)中,x,0,1)中,z,0,π/ 2);

Wolfram找到解决方案,但我想控制准确性。我尝试使用tplquad,但有一些错误。

def f(x,y,z):
return  2*sin(z)*cos(atan((2*cos(y)-0.5+x)/(2*sin(y))))

tplquad(f,0,1,0,pi/2,0,pi/2)

错误是:

  

块引用   文件"",第3行,in     文件" /usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py",第526行,在tplquad       返回dblquad(_infunc2,a,b,gfun,hfun,(func,qfun,rfun,args),epsabs = epsabs,epsrel = epsrel)     文件" /usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py",第461行,在dblquad中       返回quad(_infunc,a,b,(func,gfun,hfun,args),epsabs = epsabs,epsrel = epsrel)     文件" /usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py" ;,第281行,四       retval = _quad(func,a,b,args,full_output,epsabs,epsrel,limit,points)     文件" /usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py" ;,第345行,在_quad       return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)     文件" /usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py" ;,第406行,在_infunc中       a = gfun(x)

您知道错误可能来自哪里吗?

1 个答案:

答案 0 :(得分:1)

tplquad的文档指出内积分的积分限制应该作为外积分变量的函数提供(即使它们恰好是你的情况下的常量)。

您的案例中tplquad的正确用法如下所示。请注意,f定义中参数的顺序应与集成的顺序相对应。 f的第一个(最后一个)参数是要集成的最后一个(第一个)。在这种情况下,由于固定的集成限制,排序无关紧要。

import numpy as np
from scipy.integrate import tplquad

def f(y,x,z):
    return  2*np.sin(z)*np.cos(np.arctan((2*np.cos(y)-0.5+x)/(2*np.sin(y))))

tplquad(f,0,np.pi/2, lambda z: 0, lambda z:1, lambda z, x: 0, lambda z, x: np.pi/2)
  

(1.9999999999999998, 2.492629060475153e-14)