【发布时间】:2015-08-31 01:55:42
【问题描述】:
我需要在低至 -150 的范围内计算以下函数的积分:
import numpy as np
from scipy.special import ndtr
def my_func(x):
return np.exp(x ** 2) * 2 * ndtr(x * np.sqrt(2))
问题在于这部分功能
np.exp(x ** 2)
趋向于无穷大 -- 对于 x 的值小于大约 -26,我得到 inf。
还有这部分功能
2 * ndtr(x * np.sqrt(2))
相当于
from scipy.special import erf
1 + erf(x)
趋向于 0。
所以,一个非常非常大的数字乘以一个非常非常小的数字应该给我一个合理大小的数字——但是,python 给我的是nan。
我可以做些什么来规避这个问题?
【问题讨论】:
-
你确定你的积分没有解析解吗?
-
@ReblochonMasque 不,我不是。你知道我在哪里可以找到吗?我当然没有自己的数学能力。
-
这样的事情有帮助吗?
np.exp(x**2 + np.log(2) + np.log(ndtr(x*np.sqrt(2)))) -
这是否会显着影响积分值?或者,您可以通过分析找出
log(ndtr(x))是什么,然后将其分解为exp术语......你明白了。 -
您可以使用
scipy.special.log_ndtr消除@askewchan 解决方案中的log调用
标签: python numpy floating-point numbers scipy