首页 文章

如何使用tplquad?

提问于
浏览
0

我尝试整合这个:

积分(积分(积分(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)

错误是:

Blockquote文件“”,第3行,在文件“/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行,在quad retval = _quad(func,a,b,args,full_output,epsabs,epsrel,limit,points)文件“/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py” ,第345行,在_quad中返回_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 回答

  • 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)

相关问题