나는 그것이 아무런 차이가 없다고 생각합니다. Bessel 함수 J 0 과 같도록 에 대한 적분에 대해 충분히 높은 직교를 선택해야합니다 . 아래 예에서 차수 20을 선택했지만 통합 한 정확한 기능 및 간격과 관련하여 항상 수렴해야합니다. 그런 다음 x 에 대한 적분의 가우스 구적 차인 n 과 수렴했습니다 . 나는 f ( x ) = e − x x 2를 선택 하고 domain [ 0 , x max ] 를 사용하면 x max를 변경할 수 있습니다θ제이0엔엑스에프( x ) = 전자− x엑스2[ 0 , x최대]엑스최대이하. 나는 얻었다 :
n direct rewritten
1 0.770878284949 0.770878284949
2 0.304480978430 0.304480978430
3 0.356922151260 0.356922151260
4 0.362576361509 0.362576361509
5 0.362316789057 0.362316789057
6 0.362314010897 0.362314010897
7 0.362314071949 0.362314071949
8 0.362314072182 0.362314072182
9 0.362314072179 0.362314072179
10 0.362314072179 0.362314072179
n = 9
코드는 다음과 같습니다.
from scipy.integrate import fixed_quad
from scipy.special import jn
from numpy import exp, pi, sin, cos, array
def gauss(f, a, b, n):
"""Gauss quadrature"""
return fixed_quad(f, a, b, n=n)[0]
def f(x):
"""Function f(x) to integrate"""
return exp(-x) * x**2
xmax = 3.
print " n direct rewritten"
for n in range(1, 20):
def inner(theta_array):
return array([gauss(lambda x: f(x) * cos(x*sin(theta)), 0, xmax, n)
for theta in theta_array])
direct = gauss(lambda x: f(x) * jn(0, x), 0, xmax, n)
rewritten = gauss(inner, 0, pi, 20) / pi
print "%2d %.12f %.12f" % (n, direct, rewritten)
xmax
[ 0 , ∞ ]f(x)
rewritten = gauss(inner, 0, pi, 20) / pi