私は関数H(t)が浮動小数点数を返しています。次に、この関数を含むいくつかの積分を数値的に計算したいと思います。しかし、積分のうちの1つは、基本的に、前の積分を呼び出す。将来の統合のために関数値を格納する
from scipy.integrate import quad
def H(t):
return t
def G1(t):
return quad(lambda x: H(x)*H(t-x),0,1)[0]
def G2(t):
return quad(lambda x: G1(x)*H(t-x),0,1)[0]
res = quad(G1,0,1) + quad(G2,0,1)
私は、多数の機能のためにこれを行う必要があります(つまりG3、G4 ... Gnをして、次のように続ける)と私の最終結果は、それらのすべてに依存します。とにかくクワッド(G1,0,1)を実行するためには、とにかく多くのtの値に対してG1を計算しなければならないので、計算された値を保存してクワッド(G2,0,1)を計算するときに使用できますか?多分私自身の単純な統合関数を書こうとすることもできますが、これらの値を保存して再利用するにはどうすればいいですか?
標準ライブラリの 'lru_cache'があります((https://docs.python.org/3.4/library/functools.html#functools.lru_cache)[ここを参照してください])それがこの問題の最良の方法であるかどうかはわかりません。あなたが計算しようとしている数式を変更することは可能ですか?すなわち、数式を紙に書いて、G1を一度評価する必要があるまで操作してみてください。 – syntonym
@syntonym残念ながら(まだ)。私は基本的にこのプログラムを書いています。なぜなら、解析的に書き直す方法はまだ分かりませんし、いくつかの数値結果を見たいからです。 – Shinja
それからlru_cacheは試してみる価値があると思います。私はscipyがいかに正確に統合されているのかは分かりませんが、関数呼び出しをキャッシュしています。たぶん、あなたは本当にあなたが望むすべてをキャッシュするために、少しキャッシュサイズを微調整する必要があります。 – syntonym