在极限矩阵上执行双积分

时间:2014-02-14 17:10:42

标签: python numpy integral

我最近一直在学习如何在python中执行双积分。这就是我正在使用的:

myint = dblquad(lambda xa,xb: np.exp(-(xa-xb)**2),-np.inf,x1,lambda x: -np.inf, lambda x: x2)

出于测试目的,我选择了x1和x2来表示5和10.这似乎有效。

但实际上,我的x1 = [1,2,3,4,5]和x2 = [5,6,7,8,9]并且我希望在x1和x1的每个组合上执行双积分x2即矩阵。我猜这可以用2 for循环来做,但我认为可能有更好的方法。

所以我的问题只是 - 如何在限制矩阵上执行双重积分。

谢谢。


编辑:

我收到了以下警告:

UserWarning: The maximum number of subdivisions (50) has been achieved.
If increasing the limit yields no improvement it is advised to analyze 
the integrand in order to determine the difficulties.  If the position of a 
local difficulty can be determined (singularity, discontinuity) one will 
probably gain from splitting up the interval and calling the integrator 
on the subranges.  Perhaps a special-purpose integrator should be used.

这是否意味着它不会收敛?我真的不明白这个消息。

当我画情节时:

y = exp(-(x-5)^2)
例如,它看起来像一条高斯曲线,所以整合就没有问题吗?问题是因为双积分?

谢谢。


编辑:

啊,我明白了。谢谢Raman Shah,我现在明白了这个问题。

2 个答案:

答案 0 :(得分:1)

使用itertools可以创建一个限制迭代器来遍历。这实际上是一个双循环,但更具可扩展性,因为您可以使用itertools.product输入任意数量的输入,并且不会立即存储所有限制:

import numpy as np
from scipy.integrate import dblquad
import itertools

f = lambda xa,xb: np.exp(-(xa-xb)**2)
intg = lambda (x1,x2): dblquad(f,-np.inf,x1,
                               lambda x:-np.inf, 
                               lambda x:x2)


X1 = np.arange(1,6)
X2 = np.arange(5,10)
for limit in itertools.product(X1,X2):
    print limit, intg(limit)

如果您需要更高的速度,可以查看multiprocessing模块进行并行计算,因为每个进程都是独立的。

答案 1 :(得分:0)

为什么不使用pythons zip函数来精确地提供每个元组中要作为double积分输入的值,然后使用map / apply对这些离散对进行操作