【数值分析】—— 对数函数、指数函数(数值稳定性)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lanchunhui/article/details/81605063

0. 数值分析

数值分析(计算数学)观点,如下两种最常见的浮点数运算过程中损失有效数字的情况。

  • 两个相近的数相减
  • 两个数量级相差很大的数字相加减

1. lim x 0 log ( 1 + x ) (两个数量级相差很大的数字相加减)

  • 计算 log ( 1 + x ) ,Python math 库中有专门的函数,math.log1p(plus 1)。
  • 从计算机数值计算的角度,当 x 逼近 0 时,math.log1p(x) 比直接计算 math.log(x)+1不会丢失过多的精度。

math.log1p 的实现原理基于 log ( 1 + x ) 的泰勒展开:

log ( 1 + x ) = x x 2 2 + x 3 3 x 4 4 + x 5 5 +

def log1p(x):
    if fabs(x) > 1e-4:
        return log(1.0+x)
    return (1.0-x*0.5)*x

2. lim x 0 exp ( x ) 1 (两个相近的数相减)

  • 计算 exp ( x ) 1 ,Python math 库中有专门的函数,math.expm1(minus 1)。
  • 从计算机数值计算的角度,当 x 逼近于0时,math.expm1(x)相比直接计算 math.exp(x)-1不会丢失过多的精度。

同样地对 exp ( x ) 1 进行泰勒展开:

e x 1 = x + x 2 2 + x 3 6 + x 4 24 + x 5 120 +

def expm1(x):
    if fabs(x) > 1e-4:
        return exp(x) - 1.0
    return (1.0+0.5*x)*x

可以看到这个级数收敛的很快,因此我们只要取很少的几项就能得到很高的计算精度。


猜你喜欢

转载自blog.csdn.net/lanchunhui/article/details/81605063
今日推荐