Tengo una función definida numéricamente que se encuentra entre Gauss y Lorentzian. Se descompone mucho más lento que un gaussiano, pero aún más rápido que una potencia inversa simple.
Necesito calcular su transformada de Fourier para grande . Debido a que las llamadas de función a son computacionalmente caras, defino una interpolación de , llámela , en un rango enorme de , , y usar eso para mi integral.t g ( x ) g ( x ) g int ( x ) x - 40 < x < 40
Sin embargo, cuando calculo una aproximación a la transformada de Fourier, obtengo algunas oscilaciones extrañas que inicialmente no esperaría.
Como he indicado en la imagen de arriba, las oscilaciones tienen un "período" de aproximadamente 15.7. Mi primera suposición sería que esto podría ser un artefacto de la naturaleza alterna de la cancelación de la integral, pero eso no explicaría el "período" observado de 15.7.
que es exactamente un factor de 100 diferente de lo que observo (sí, he comprobado que definí mis integrales y ejes horizontales correctamente). ¿Cómo podría ser esto?
Editar # 1: Detalles de interpolación
Estoy interpolando con el incorporado de Mathematica Interpolation
, que se interpola entre puntos sucesivos con una curva cúbica (por lo que en cada punto se define la derivada 2 ). Estoy interpolando específicamente la función en el rango en pasos de . g(x)-40<x<40dx=40 / 100=0,4
De hecho, ahora que escribo eso, me doy cuenta de que bien podría ser un artefacto de mi muestreo finito, porque:
Agradecería cualquier ayuda adicional sobre esto, en particular una buena manera de superar este problema.
Edición # 2: La función
h[x_?NumericQ, En_?NumericQ, pz_?NumericQ] :=
1./(En^2 + pz^2 + 0.24^2)*
NIntegrate[((Sqrt[
0.316/(1. +
1.2*((k4 + 0.5*En)^2 + kp + (x*pz)^2))^1.*0.316/(1. +
1.2*((k4 - 0.5*En)^2 + kp + ((1. - x)*pz)^2))^1.])*((1. -
x)*0.316/(1. + 1.2*((k4 + 0.5*En)^2 + kp + (x*pz)^2))^1. +
x*0.316/(1. +
1.2*((k4 - 0.5*En)^2 + kp + ((1. - x)*pz)^2))^1.))/(((k4 +
0.5*En)^2 +
kp + (x*pz)^2 + (0.316/(1. +
1.2*((k4 + 0.5*En)^2 + kp + (x*pz)^2))^1.)^2)*((k4 -
0.5*En)^2 +
kp + ((1. - x)*
pz)^2 + (0.316/(1. +
1.2*((k4 - 0.5*En)^2 +
kp + ((1. - x)*
pz)^2))^1.)^2)), {k4, -\[Infinity], \[Infinity]}, {kp,
0, \[Infinity]}, Method -> "LocalAdaptive",
MaxRecursion ->
100]; (*LocalAdaptive seems to work slightly faster *)
g[x_]:=h[0.5,x,2.]; (*this is the function*)
Integrate
la construcción adaptativa de interpolantes (y todo el pensamiento que entró en su diseño) con el suyo, lo que probablemente sea una mala idea.
Module[{n=32,L=10},Exp[InterpolatingPolynomial[Table[{x,Log[g[x]]},{x,-L Cos[(π N@Range[1,2n-1,2])/(2n)]}],x]]]