¿Qué son estas oscilaciones?

8

Tengo una función sol(X) 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.

ingrese la descripción de la imagen aquí

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 < 40F(t)F[sol(X)](t)tg(X)sol(X)solEn t(X)X-40<X<40

F(t)=-cos(tX)sol(X)reX-LLcos(tX)solEn t(X)reX

Sin embargo, cuando calculo una aproximación a la transformada de Fourier, obtengo algunas oscilaciones extrañas que inicialmente no esperaría.

ingrese la descripción de la imagen aquí

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.

Tadivinar=2πL0,157...

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,4Dakota del Nortesol(X)-40<X<40reX=40/ /100=0.4 0.4

De hecho, ahora que escribo eso, me doy cuenta de que bien podría ser un artefacto de mi muestreo finito, porque:

Tadivinar # 2=2πreX=2π0.4 0.4=15,7...

Agradecería cualquier ayuda adicional sobre esto, en particular una buena manera de superar este problema.


Edición # 2: La funciónsol(X)

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*)
Arturo don Juan
fuente
¿Qué tipo de interpolación estás usando? En realidad, no es la función más fácil interpolar con precisión en un dominio tan grande.
Anton Menshov
@AntonMenshov Vea mi edición más reciente.
Arturo don Juan
44
Quiero señalar que cada método de integración numérica esencialmente construye un interpolante de su función y lo integra exactamente, por lo que al interpolar la función usted mismo primero, en realidad está reemplazando Integratela 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.
Kirill
2
solIniciar sesiónsol(X)[-L,L]Module[{n=32,L=10},Exp[InterpolatingPolynomial[Table[{x,Log[g[x]]},{x,-L Cos[(π N@Range[1,2n-1,2])/(2n)]}],x]]]
1
También creo que ayudaría a compilar el integrando ( gist.github.com/ikirill/931dbf6fb3581f7d66353b74c4743cd3 ), independientemente de todos los problemas más difíciles aquí, lo acelera en un factor de ~ 8 para mí.
Kirill

Respuestas:

5

--LL

Lcos(tX)sol(X)reX=1tpecado(tX)sol(X)El |L-LpecadotXtsol(X)reX=-1Lsol(L)pecado(tL)+términos asintóticamente más pequeños.
solsol

sol(L)sol(L)

Kirill
fuente