2014-01-18 3 views
5

Ich denke, Sympy macht einen Fehler bei der Berechnung der Fourier transform einer trigonometrischen Funktion. Zum Beispiel:Fourier-Transformation eine Trigger-Funktion in Sympy gibt unerwartetes Ergebnis zurück

from sympy import fourier_transform, sin 
from sympy.abc import x, k 
print fourier_transform(sin(x), x, k) 

Die erwartete Antwort via Mathematica ist

enter image description here

aber Sympy 0 zurück Manchmal ist die Funktion seit fourier_transform(Heaviside(t)*cos(t),t,omega) sehr gut funktioniert und fourier_transform(Heaviside(t)*sin(t),t,omega) die richtige Antwort zurück. Ich denke, dass Sympy die Laplace-Transformation benutzt, um die Fourier-Transformation zu berechnen.

+0

Nun, die Fourier-Transformation von 'sin' ist eine Summe von Delta-Funktionen. Es könnte sein, dass Sympy Schwierigkeiten hat, Delta-Funktionen darzustellen. Man beachte auch, dass 'sympy.fourier_transform ('Heaviside (t)', 't', 'omega')' '-I/(2 * pi * omega)' für mich ergibt, während in Mathematica 'FourierTransform [HeavisideTheta [t ], t, w] 'ergibt' I/(Sqrt [2 \ [Pi]] w) + Sqrt [\ [Pi]/2] DiracDelta [w] '(also lässt sympy auch hier eine Delta-Funktion fallen). – senshin

+0

Es ist sehr seltsam, dies zu tun, da sympy die Delta-Funktion 'DiracDelta' hat. – Kattern

Antwort

2

SymPy berechnet die Fourier-Transformation, indem das Integral buchstäblich berechnet wird. Ich würde dies als einen Fehler betrachten, also öffnen Sie an issue dafür.

+0

OK, schon erledigt. – Kattern

+0

@kattern Sie sollten einen Link zu dem Problem bereitstellen, damit wir dies basierend auf dem Status aktualisieren können. – Hooked

+0

@Hooked Tolle Idee, der Link zum Thema ist . – Kattern

2

Sie können den Transformationsroutinen noconds=False hinzufügen, um herauszufinden, unter welchen Bedingungen das Transformationsintegral konvergiert. Asmeurer sagt, wir berechnen buchstäblich das definierende Integral, so dass Sie niemals Deltafunktionen sehen werden. Im Fall der Fourier-Transformation von cos sind die Bedingungen eine verschlungene Art, "niemals" zu sagen, was unglücklicherweise nicht erkannt wird. (Dh der Algorithmus sagt etwas wie "das Integral ist Null, wenn Blabla", und Blab nie hält.)

Für die Fourier-Transformation der Schrittfunktion scheinen die Bedingungen zu sagen, dass dies funktioniert, wenn z negatives Argument (Winkel), nicht zu groß. Beachten Sie, dass dies in der Tat ist, wenn das Transformationsintegral konvergiert (b/c müssen Sie einen fallenden Exponentialausdruck über den positiven Realen aufheben). Ich habe keine Zeit darüber nachzudenken, ob die Berechnung in diesem Fall korrekt ist.

+0

Ich sehe auch die Option, aber für mich möchte ich 'fourier_transform' Rückgabe' DiracDelta' Funktion anstelle einer konditionierten Null. – Kattern

Verwandte Themen