2017-01-09 81 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社區的高度讚賞 - 但是我會想象它沒有完成的原因是它有點棘手!所以祝你好運;-) –