python中quad_关于python:如何使用tplquad?

我尝试将其集成:

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

错误是:

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)

您是否知道错误可能来自何处?

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语言的基本功能(例如,请参见此处)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值