2016-11-15 13 views
4

私は、多くのシンボリック統合を含むプロジェクトを行っています。sympyでシンボリックな統合をすばやく行う方法

この関数は、エルラン確率分布関数のようなものです。

次に、タスクの簡単な例を示します。

https://s18.postimg.org/gd7t4bv95/gif_latex.gif

ここでは上記の課題のためのコードである:ここで

import sympy as sym 
t=sym.Symbol('t') 
t1=sym.Symbol('t1') 
t2=sym.Symbol('t2') 

###integration for t2 
expr=(1-sym.exp(-(t-t2)))*(1-sym.exp(-(t-t2)))*sym.exp(-t2) 
expr=sym.integrate(expr,(t2,0,t)) 

###substitution and integration for t1 
expr=expr.subs(t,t-t1) * (1-sym.exp(-(t-t1)))*sym.exp(-t1) 
expr=sym.integrate(expr,(t1,0,t)) 

少し複雑な結果である:私が使用し、sympyに実装するため、このよう

https://s11.postimg.org/x9tw8kw8j/untitle.png

は、ほとんどの時間、integrate()とsubs()。

しかし、速度は非常に遅いです。 5つの変数(たとえば、t_1からt_5まで)がある場合、少し待つ必要があります。しかし、私は10の変数を持っているとき、私は計算を完了することはできません。

コードはかなり複雑ですが、私はボトルネックが統合であると確信しています。結局のところ、サンプルの結果から、タスクがどのように要求されるかを想像することができます。

私はsympyで統合を強化する良い方法がありますか?特に、指数の家族のような機能のための

おかげ

+0

あなたのコードは現時点でどのように見えますか? [コード例](http://stackoverflow.com/help/mcve) – mpaskov

答えて

1

統合速度がSymPyのバグです。 expand(expr)を呼び出して統合することで回避できます。