scipy 참조 설명서에서 dblquad는 수학적으로 반복 쿼드와 2 회 동일합니다. 처음에는 dblquad가 성능 이점을 2 배 쿼드 이상으로 가져야한다고 생각했습니다 (메서드의 편리함 외). 놀라운 것은 dblquad 성능이 더 나빠진 것 같습니다. dblquad의 성능이 두 배 이상 향상 되었습니까?
import scipy
import math
import timeit
def integrand(t, n, x):
return math.exp(-x*t)/t**n
def expint(n, x):
return scipy.integrate.quad(integrand, 1, scipy.Inf, args=(n, x))[0]
def I11():
res = []
for n in range(1,5):
res.append(scipy.integrate.quad(lambda x: expint(n, x), 0, scipy.Inf)[0])
return res
def I2():
res = []
for n in range(1,5):
res.append(scipy.integrate.dblquad(lambda t, x: integrand(t, n, x), 0, scipy.Inf, lambda x: 1, lambda x: scipy.Inf)[0])
return res
print('twice of quad:')
print(I11())
print(timeit.timeit('I11()', setup='from __main__ import I11', number=100))
print('dblquad:')
print(I2())
print(timeit.timeit('I2()', setup='from __main__ import I2', number=100))
내 출력
는 다음과 같이 :twice of quad:
[1.0000000000048965, 0.4999999999985751, 0.33333333325010883, 0.2500000000043577]
5.42371296883
dblquad:
[1.0000000000048965, 0.4999999999985751, 0.33333333325010883, 0.2500000000043577]
6.31611323357
우리는 두 가지 방법이 동일한 생산보고 나는 약간의 수정을 "SciPy 참조 설명서, 릴리스 0.14.0"12-13 페이지에서 예를했습니다 결과 (정확한 결과는 1, 1/2, 1/3, 1/4이어야 함). 그러나 dblquad는 더 나쁜 수행합니다.
누군가가 dblquad에 대해 어떤 통찰력을 가지고 있습니까? 나는 또한 tplquad와 nquad에 대해 같은 질문을한다.
는 그냥 문제가 발생하지 않도록 Inf를 (부적절한 통합을)하려면, 내가, 5, 10과 같은 숫자로 Inf를 변경하고 50. 출력 결과는 더블 쿼드보다 약 15 % 더 많은 시간을 소비합니다. – sunheng