【发布时间】:2015-12-22 11:38:34
【问题描述】:
我有点卡在我试图通过 scipy、python 进行数值积分的函数上。
为简单起见,我将函数定义为:
integral f(x,y)= SUM[double integral(ax+by)dxdy]
a 和 b 是常数,但对于每个积分方程它们都是不同的。我已经分别集成了每个函数,然后对所有积分的结果求和,但是这需要大量时间来计算,而且对于我想要实现的目标来说并不理想。
有没有办法通过扩展总和来一次集成整个函数:
integral f(x,y)=double integral [(a1x+b1y)+(a2x+b2y)...(anx+bny)]dxdy
然后将带有(a,b) 元组列表等的函数传递给 scipy 的 dblquad 函数?
目前,我正在努力在与此相关的文献中找到任何内容。
*编辑
我已经包含了一个示例代码,以更清楚地展示我想要实现的目标:
import sys
import re
import math
from scipy.integrate import dblquad
def f((x,y),variables):
V=0
for v in variables:
a,b=v
V=V+ax+by
return (V)
def integral(x_max,y_max,variables):
return dblquad(f, 0, y_max, lambda x: 0, lambda x: x_max,args=variables)
def main():
variables=[(1,2),(3,4),(5,6)] #example variables. The length of this list can change with the code I am running.
x_max=y_max=1
integral(x_max,y_max,variables)
if __name__ == '__main__':
main()
因此返回的错误是:
Traceback (most recent call last):
File "integration_example.py", line 23, in <module>
main()
File "integration_example.py", line 19, in main
integral(x_max,y_max,variables)
File "integration_example.py", line 14, in integral
return dblquad(f, 0, y_max, lambda x: 0, lambda x: x_max,args=variables)
File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadpack.py", line 435, 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 254, 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 319, 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 382, in _infunc
myargs = (x,) + more_args
TypeError: can only concatenate tuple (not "list") to tuple
显然,该函数不喜欢我以我编写的方式传递值列表以放入积分中。有没有办法做到这一点? (抱歉,这可能是表达问题的更好方式)。
【问题讨论】:
-
你不能交换 sum 和 integration 吗?将一个大被积函数定义为所有被积函数的总和。
-
这基本上是我想要做的,但是常量 a 和 b 是从程序中的前面步骤生成的,并且 (anx+bny) 的数量也在程序期间确定,所以我无法在运行程序之前使用适当的常量定义确切的函数。我将编辑帖子以包含反映我正在尝试做的代码...
标签: python numpy scipy numerical-integration