2017-01-09 7 views
3

私たちは、フーリエ誘導体から変換することを知っているが、kはフーリエ変数であるなぜsympyは微分のフーリエ変換を単純化しないのですか?

Fourier transform of a derivative

です。 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 iのいくつかの要因まで)

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

それはだsympyを伝える方法はありますが、印刷することが期待しましたxが無限大になるので、f(x) - > 0を期待するので、この単純化を保存しますか?

もしそうでなければ、置換を行う最もクリーンな方法は何でしょうか?

答えて

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)などと一致するパターンが1つあります。 replace()の関数関数形式を使用することでそれを回避することができますが、扱うデリバティブの順序を知っていれば、例のように多くのbを明示的に入れておく方が簡単でしょう。

+0

あなたの答えをありがとう!これは動作しますが、置き換えがインプレースで動作しないというわずかな警告がありますので、追加の 'G = ...'が必要になります(私が思ったよりも時間がかかりました)。まだ実装する必要があることを指摘してくれてありがとう、私は私のプロジェクトでこれを使用して終了する場合は、これを実装するためにPRを提出するかもしれない。 – tBuLi

+0

もちろん、置き換えの結果を 'G'に代入したいのかどうかを仮定したくありませんでした。申し訳ありませんが、私はそれを明確にしませんでした。デリバティブのFTを適切に実装することができれば、それはSympyコミュニティーから高く評価されると確信しています - しかし、それはやっていない理由は何とかやっかいなことだと思います!とても幸運 ;-) –

関連する問題