擅长:python、mysql、java
<p>有几种方法可以提高计算速度。在</p>
<ol>
<li><p>您可以使用<code>epsabs</code>和<code>epsrel</code>参数来<code>dblquad</code>来增加集成的可靠性。当然,您的结果会不太准确,但对于调试来说,这是可以的。</p></li>
<li><p>您可以通过重新排序代码(警告,未测试代码)来显著减少<code>integrand</code>中函数求值的数量</p>
<pre><code>def integrand(x, y):
marg = 0.0
cdf = dict((id(distC), distC.cdf(x) - distC.cdf(y)) for distC in p)
for distA in p:
weight = numpy.prod(cdf[id(distC)]
for distC in p if distC is not distA)
marg += weight * distA.pdf(x) * sum(
distB.pdf(y) for distB in p if distB is not distA)
return (x-y) * marg
</code></pre>
<p>但是请注意,Python在函数调用方面有相当大的开销,因此用纯Python编写这篇文章不会让您走得太远(在这个问题上使用<a href="http://cython.org/" rel="nofollow">Cython</a>之类的方法可能会有所帮助)。</p></li>
</ol>
<p>我不知道为什么积分变为负。也许我可以告诉你,如果你能给出一个<code>p</code>的例子,这将使我们能够真正地尝试你的代码。在</p>