2014-01-18 8 views
5

私はSympyがtrig関数のFourier transformを計算するのを間違えていると思う。たとえば:フーリエ変換Sympyのtrig関数が予期しない結果を返す

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

予想答えvia Mathematica

enter image description here

ですがSympyは0ですが、時には機能はfourier_transform(Heaviside(t)*cos(t),t,omega)ので、非常にうまく機能し、正しい答えを返すfourier_transform(Heaviside(t)*sin(t),t,omega)返します。私はSympyがフーリエ変換を計算するためにラプラス変換を使用しているかもしれないと思います。

+0

まあ、「sin」のフーリエ変換は、デルタ関数の合計です。 Sympyがデルタ関数を表現するのが難しい場合があります。 Mathematicaでは、 'FourierTransform [HeavisideTheta [t]、' t '、 'omega'}'は '-I /(2 * pi * omega)'を生成するのに対し、 'sympy.fourier_transform DiracDelta [w] '(したがって、sympyはここでもデルタ関数を削除しています)。 – senshin

+0

sympyにはデルタ関数 'DiracDelta'があるので、そうするのは非常に奇妙です。 – Kattern

答えて

2

SymPyは文字通り積分を計算してフーリエ変換を計算します。私はこれをバグと見なしますので、an issueを自由に開いてください。

+0

OK、すでに完了しました。 – Kattern

+0

@katternステータスに基づいてこれを更新できるように、問題へのリンクを提供する必要があります。 – Hooked

+0

@Hooked素晴らしいアイデアは、問題へのリンクはです。 – Kattern

2

noconds=Falseを変換ルーチンに追加して、変換積分が収束する条件を見つけることができます。 asmeurerが言うように、文字通り定義的な積分を計算するので、デルタ関数が決して現れることはありません。 cosのフーリエ変換の場合、条件は「残念」と言って畳み込まれた形であり、残念ながらsympyは認識しません。 (すなわち、アルゴリズムは「整数がゼロの場合はゼロ」と言いますが、それは決して保持しません)

ステップ関数のフーリエ変換では、zが負の引数を持つ場合角度)、それほど大きくない。これは実際に変換積分が収束するときであることに注意してください(b/c、正の実数よりも指数関数的な項を取り上げる必要があります)。この場合、計算が正しいかどうかを考える時間がありません。

+0

私はこのオプションも見ていますが、私にとっては 'fourier_transform'は条件付きゼロの代わりに' DiracDelta'関数を返したいと思います。 – Kattern

関連する問題