Ich habe eine numerisch definierte Funktion die zwischen einem Gaußschen und einem Lorentzschen liegt. Es zerfällt viel langsamer als ein Gaußscher, aber immer noch schneller als eine einfache inverse Kraft.
Ich muss seine Fourier-Transformation für großes berechnen . Da Funktionsaufrufe von rechenintensiv sind, definiere ich eine Interpolation von - nenne es - für einen großen Bereich von , , und benutze das für mein Integral.t g ( x ) g ( x ) g int ( x ) x - 40 < x < 40
Wenn ich jedoch eine Annäherung an die Fourier-Transformation berechne, erhalte ich einige merkwürdige Schwingungen, die ich zunächst nicht erwarten würde.
Wie ich im obigen Bild angegeben habe, haben die Schwingungen eine "Periode" von ungefähr 15,7. Meine erste Vermutung wäre, dass dies ein Artefakt der alternierenden Natur der Aufhebung des Integrals sein könnte, aber das würde die beobachtete "Periode" von 15,7 nicht erklären.
Das ist genau ein Faktor von 100, der sich von dem unterscheidet, was ich beobachte (ja, ich habe überprüft, ob ich meine Integrale und horizontalen Achsen richtig definiert habe). Wie konnte das sein?
Edit # 1: Interpolationsdetails
Ich interpoliere mit Mathematicas integriertem Interpolation
Element, das zwischen aufeinanderfolgenden Punkten mit einer kubischen Kurve interpoliert (also wird an jedem Punkt bis zur Ableitung 2 definiert). Ich interpoliere spezifisch die Funktion über den Bereich in Schritten von .
In der Tat, jetzt, wo ich das schreibe, ist mir klar, dass es sehr gut ein Artefakt meiner endlichen Stichprobe sein könnte, weil:
Ich würde mich über weitere Hilfe freuen, insbesondere über einen guten Weg, um dieses Problem zu lösen.
Edit # 2: Die Funktion
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*)
quelle
Integrate
tatsächlich die adaptive Konstruktion von Interpolanten (und all den Gedanken, der in ihre Funktion eingeflossen ist) Design) mit Ihrem eigenen, was wahrscheinlich eine schlechte Idee ist.Module[{n=32,L=10},Exp[InterpolatingPolynomial[Table[{x,Log[g[x]]},{x,-L Cos[(π N@Range[1,2n-1,2])/(2n)]}],x]]]
Antworten:
quelle