【发布时间】:2017-04-07 13:11:29
【问题描述】:
我需要计算数量
1/tanh(x) - 1/x
对于x > 0,其中x 可以非常小也可以非常大。
对于小的x,我们有
1/tanh(x) - 1/x -> x / 3
对于大型x
1/tanh(x) - 1/x -> 1
无论如何,在计算表达式时,已经从 10^-7 和较小的舍入错误导致表达式被精确地评估为 0:
import numpy
import matplotlib.pyplot as plt
x = numpy.array([2**k for k in range(-30, 30)])
y = 1.0 / numpy.tanh(x) - 1.0 / x
plt.loglog(x, y)
plt.show()
【问题讨论】:
-
你可以定义你自己版本的函数
1/tanh(x) - 1/x,如果参数太小/太大,它将评估渐近表达式 -
写你自己的
tanh? (直到小于 10^-8,我才看到它变为 0。)
标签: python numpy math rounding