加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 评估1 / tanh(x) – 1 / x表示非常小的x

发布时间:2020-12-20 11:59:23 所属栏目:Python 来源:网络整理
导读:我需要计算数量 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 numpyimport matplo
我需要计算数量

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()

enter image description here

解决方法

对于非常小的x,可以使用 the Taylor expansion of 1/tanh(x) - 1/x around 0,

y = x/3.0 - x**3 / 45.0 + 2.0/945.0 * x**5

误差为O(x ** 7),因此如果选择10 ^ -5作为断点,相对和绝对误差将远低于机器精度.

import numpy
import matplotlib.pyplot as plt


x = numpy.array([2**k for k in range(-50,30)])

y0 = 1.0 / numpy.tanh(x) - 1.0 / x
y1 = x/3.0 - x**3 / 45.0 + 2.0/945.0 * x**5
y = numpy.where(x > 1.0e-5,y0,y1)


plt.loglog(x,y)
plt.show()

enter image description here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读