1
目前,如果傅里叶变换返回一个PieceWise
表达式,它会抛出异常并返回一个未求值的表达式。因此,SymPy可以进行积分,只是形式不太好看。这是手动积分后的结果。
![enter image description here](https://istack.dev59.com/BIzrv.webp)
如果您想得到这种答案,您可以自己使用此函数来实现。
def my_fourier_transform(f, t, s):
return integrate(f*exp(-2*S.Pi*I*t*s), (t, -oo, oo)).simplify()
可以看到,长条件中有
arg(a)
和
arg(s)
,它们应该分别是
sign(a)
和
sign(s)
(假设它们是实值的)。在Wolfram Alpha中进行类似的操作后,我认为这是一个正确的结果。只是不太好看。
但我发现了一个小技巧。如果SymPy难以简化某些内容,通常给它更强的假设是解决问题的方法,如果你的主要目标仅仅是获得答案。很多时候,即使假设不成立,答案仍然是正确的。所以我们让变量为正数。
请注意,如下面的注释所述,SymPy对变换的处理方式与Wolfram Alpha不同。这就是为什么我的第三个参数不同的原因。
from sympy import *
a, s, t = symbols('a s t', positive=True)
f = t / (a**2 + t**2)
print(fourier_transform(f, t, -s))
2
如果我错了,请纠正我,但根据维基百科:
![enter image description here](https://istack.dev59.com/L76ym.webp)
因此,Dirac Delta的傅里叶变换为1。
3
使用上述定义的
my_fourier_transfrom
函数,我们得到:
![enter image description here](https://istack.dev59.com/fpqCC.webp)
第一个条件始终为假。这可能是SymPy失败的原因,因为这个积分发散。我认为这是因为它无法确定它是
oo
,
-oo
还是
zoo
。