How to use tplquad?

淺唱寂寞╮ 提交于 2019-12-08 10:53:58

问题


I try to integrate this :

integrate(integrate(integrate(2*sin(z)*cos(atan((2*cos(y)-0.5+x)/(2*sin(y)))),y,0,pi/2),x,0,1),z,0,pi/2);

Wolfram find the solution but I would like to control the accuracy. I try with tplquad but there is some error.

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)

The errors are:

Blockquote File "", line 3, in File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py", line 526, in tplquad return dblquad(_infunc2,a,b,gfun,hfun,(func,qfun,rfun,args),epsabs=epsabs,epsrel=epsrel) File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py", line 461, in dblquad return quad(_infunc,a,b,(func,gfun,hfun,args),epsabs=epsabs,epsrel=epsrel) File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py", line 281, in quad retval = _quad(func,a,b,args,full_output,epsabs,epsrel,limit,points) File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py", line 345, in _quad return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit) File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py", line 406, in _infunc a = gfun(x)

Have you an idea where the error could come from ?


回答1:


The documentation of tplquad states that the integration limits of the inner integrals should be provided as functions of the outer integration variables (even if they happen to be constants as in your case).

The correct usage of tplquad in your case is shown below. Note that the ordering of the arguments in the definition of f should correspond to the ordering of integrations. The first (last) argument of f is the last (first) to be integrated. In this case the ordering is irrelevant due to fixed integration limits.

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)



来源:https://stackoverflow.com/questions/40431553/how-to-use-tplquad

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!