为什么不同意简化衍生物的傅立叶变换?

时间:2017-01-09 19:45:57

标签: python sympy continuous-fourier

我们知道衍生物的傅里叶变换是

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个因素)

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

有没有办法告诉sympy它的保存是为了简化,因为我希望f(x) - > 0为x变为无穷大?

如果没有,那么最干净的替代方法是什么?

1 个答案:

答案 0 :(得分:3)

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就可能更简单了。明确地说,就像我在例子中所做的那样。