2017-11-09 7 views
0

この関数は0からinfまで正の値をとります。なぜなら、1000より大きい値は0になり、それは合理的ではありません。なぜintegrate.quad(λx:x * exp(-x ** 2/2)/ sqrt(2 * pi)、0.0、100000)は0を返すのですか?

import scipy.integrate as integrate 
from math import * 

integrate.quad(lambda x: x*exp(-x**2/2)/sqrt(2*pi), 0.0, 1000) 
Out[52]: 
(0.3989422804014328, 1.6471510195390376e-11) 
integrate.quad(lambda x: x*exp(-x**2/2)/sqrt(2*pi), 0.0, 100000) 
Out[54]: 
(0.0, 0.0) 

答えて

3

約xより大きい。 39,exp(-x**2/2)は0.0を与える。積分の上限が100000である場合、関数がゼロでない積分区間の割合は非常に小さく、アルゴリズムは決してそれを見ない。 quadまでは、機能は全く同じです。

+0

これを修正する方法はありますか? – Pythoner

+0

一般的に、任意の関数のためにそれを修正しますか?私は方法を知らない。 'quad'(あるいは任意の数値積分アルゴリズム)を効果的に使うための関数の動作について少し知っておく必要があります。この特定の関数に対して修正したいのであれば、単に 'quad'を使うのではなく、積分の解析式を使うことができます。 –

関連する問題