【问题标题】:How to use tplquad?如何使用 tplquad?
【发布时间】:2017-03-18 19:28:48
【问题描述】:

我尝试整合这个:

积分(积分(积分(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 找到了解决方案,但我想控制准确性。我尝试使用 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 行,在 文件“/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) dblquad 中的文件“/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py”,第 461 行 返回四边形(_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) _quad 中的文件“/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py”,第 345 行 return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit) _infunc 中的文件“/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py”,第 406 行 a = gfun(x)

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

【问题讨论】:

    标签: python scipy integrate


    【解决方案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)

    【讨论】:

    • 我只是有一个关于参数的问题,我不明白 lambda z: 在 lambda z,x 之后你能解释一下吗?
    • @mpdesousa lambda 运算符允许方便地定义简单的匿名函数。它是 Python 语言的一个基本特性(参见,例如,here
    猜你喜欢
    • 2019-12-31
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    相关资源
    最近更新 更多