2014-01-18 19 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'的傅立叶变换是delta函数的和。可能是Sympy很难代表三角函数。还要注意,sympy.fourier_transform('heaviside(t)','t','omega')对我来说产生'-I /(2 * pi * omega)',而在Mathematica中,'FourierTransform [HeavisideTheta [t ],t,w]'产生'I /(Sqrt [2]] w)+ Sqrt [w]'(因此Sympy也在这里丢弃δ函数)。 – senshin

+0

这样做很奇怪,因为sympy确实有delta函数'DiracDelta'。 – Kattern

回答

2

SymPy通过字面计算积分来计算傅立叶变换。我会认为这是一个错误,所以随时为它打开an issue

+0

好的,已经完成了。 – Kattern

+0

@kattern您应该提供问题的链接,以便我们可以根据状态更新它。 – Hooked

+0

@Hooked好主意,这个问题的链接是。 – Kattern

2

您可以将noconds=False添加到转换例程中,以查找转换积分在哪些条件下收敛。正如asmeurer所说,我们从字面上计算了定义的积分,所以你永远不会看到delta函数出现。在cos的傅立叶变换的情况下,条件是一种说不出来的复杂方式,不幸的是sympy不承认。 (即算法说“像积分是零如果等等”,并且等等从来没有成立)

对于step函数的傅里叶变换,条件似乎是说,如果z有负参数角度),不是太大。请注意,这确实是当变换积分收敛时(b/c您需要在正实数上选择一个下降的指数项)。在这种情况下,我没有时间考虑计算是否正确。

+0

我也看到了这个选项,但是对于我来说'fourier_transform'返回'DiracDelta'函数而不是一个条件零。 – Kattern