2017-01-09 26 views
3

我们知道,傅立叶变换衍生物是sympy为什么不简化导数的傅里叶变换?

Fourier transform of a derivative

其中k是傅里叶变量。 Explanation here

我的问题是,为什么sympy不使用这种知识?例如:

from sympy import Function, symbols, fourier_transform, Derivative 

f = Function('f') 
x, k= symbols('x, k') 

G = fourier_transform(Derivative(f(x), x, x) + f(x), x, k) 
print(G) 

这将打印

FourierTransform(f(x), x, k) + FourierTransform(Derivative(f(x), x, x), x, k) 

但我希望它来打印(最多2个pi的一些因素我)

FourierTransform(f(x), x, k) + k**2 FourierTransform(f(x), x, k) 

有没有办法告诉sympy它除了做这个简化,因为我期望f(x) - > 0当x变为无穷大?

如果不是,那么最简洁的方法是什么?

回答

2

Sympy不这样做的简单原因是it's not implemented yet。至于现在要解决此问题,您可以手动用乘法代替导数的FourierTransform

from sympy import Wild, FourierTransform, Derivative 
a, b, c = symbols('a b c', cls=Wild) 
G.replace(
    FourierTransform(Derivative(a, b, b), b, c), 
    c**2 * FourierTransform(a, b, c) 
) 

据我所知,Sympy不提供匹配的参数任意数量的模式,这样你就可以没有匹配Derivative(f(x), x),Derivative(f(x), x, x),Derivative(f(x), x, x, x)等的单个模式。你可以通过使用函数函数形式replace()来解决这个问题,但是如果你知道你正在处理的衍生产品的顺序,那么就像我在示例中那样明确地放入那么多的b可能会更简单。

+0

感谢您的回答!这是有效的,但有一点需要注意的是替换不能在原地工作,所以我需要一个额外的'G = ...'(花了我很长的时间才弄清楚)。感谢指出它仍然需要实施,如果我最终在我的项目中使用这个,我可能会提交一个PR来实现这个。 – tBuLi

+0

当然,我不想假设您是否想要将替换结果分配给'G'。对不起,我没有澄清。如果你能够正确地实施金融衍生工具的金融衍生工具,我肯定会受到Sympy社区的高度赞赏 - 但是我会想象它没有完成的原因是它有点棘手!所以祝你好运;-) –