我想使用scipy.integrate.quad集成兩個時間和頻率偏移的Hermite函數的乘積。Scipy:Hermite函數與正交權重的積分
但是,由於包含大量的階次多項式,所以會出現數值錯誤。這裏是我的代碼:
import numpy as np
import scipy.integrate
import scipy.special as sp
from math import pi
def makeFuncs():
# Create the 0th, 4th, 8th, 12th and 16th order hermite function
return [lambda t, n=n: np.exp(-0.5*t**2)*sp.hermite(n)(t) for n in np.arange(5)*4]
def ambgfun(funcs, i, k, tau, f):
# Integrate f1(t)*f2(t+tau)*exp(-j2pift) over t from -inf to inf
f1 = funcs[i]
f2 = funcs[k]
func = lambda t: np.real(f1(t) * f2(t+tau) * np.exp(-1j*(2*pi)*f*t))
return scipy.integrate.quad(func, -np.inf, np.inf)
def main():
f = makeFuncs()
print "A00(0,0):", ambgfun(f, 0, 0, 0, 0)
print "A01(0,0):", ambgfun(f, 0, 1, 0, 0)
print "A34(0,0):", ambgfun(f, 3, 4, 0, 0)
if __name__ == '__main__':
main()
埃爾米特函數是正交的,因此所有的積分應該等於零。但是,他們都沒有,作爲輸出顯示:
A00(0,0): (1.7724538509055159, 1.4202636805184462e-08)
A01(0,0): (8.465450562766819e-16, 8.862237123626351e-09)
A34(0,0): (-10.1875, 26.317246925873935)
我怎樣才能讓這個計算更準確? scipy的hermite函數包含一個權重變量,應該用於Gaussian Quadrature,如文檔(http://docs.scipy.org/doc/scipy/reference/special.html#orthogonal-polynomials)中給出的。但是,我沒有在文檔中找到如何使用這些權重的提示。
我希望你能幫助:)
謝謝,最大
我認爲這也是一個相對錯誤的問題。我正在使用歸一化的正交厄米多項式,據我所知,我的誤差在絕對值上要小得多,但我相信並不是。 – user333700