【发布时间】:2020-04-08 15:49:53
【问题描述】:
我想评估以下公式:
c = exp{x}*erfc{y}
(参见下面代码中x 和y 的定义。)
问题是 x 和 y 变得非常大,我得到 exp{x} 的非常大的值和非常小的 erfc(y) 的值。
import numpy as np
import scipy as sci
k = 5.7e-3
D = 1.53e-8
R = 1.5e-5
r = 1e-6
t = np.linspace(0.0,12,10)
x = (r/R) + (D/(R*R) - k)*t
y = (r/(2*np.sqrt(D*t))) + np.sqrt(D*t)/R
exp_x = np.exp(x)
erfc_y = sci.special.erfc(y)
print("x = \n{} ".format(x))
print("y = \n{}".format(y))
print("exp(x) = \n{}".format(exp_x))
print("erfc(y) = \n{}".format(erfc_y))
print("exp(x) * erfc(y)= \n{}".format(exp_x*erfc_y))
我的想法是将评价改为
log{exp(x)*erfc(y)} = log{exp(x)} + log{erfc(y)} = x + log{erfc(y)}
之后,我可以计算
exp(x + log{erfc(y)})
但这里有问题: 当我要计算时
log{erfc(y)} = log{1 - erfc(y)}
我遇到类似的问题,erfc 会接近 1,我会遇到精度问题。
有什么想法可以解决我的问题吗?
【问题讨论】:
-
作为一个快速的想法,您可以将
log近似应用于您的样本数据的一部分(假设您拥有erfc(y)==0的唯一点是第一个) -
是的,我也有同样的想法。我会测试这个,当我有时间的时候。但是,我能够用 Mathematica 解决我的问题。这不是我喜欢解决问题的方式,但它现在有效。
-
将
log1p(x)用于log(1+x)