在没有溢出问题的情况下计算指数函数的比率

计算科学 浮点
2021-12-16 00:53:14

我对计算函数的逐点值感兴趣u(x)=sinh(kkx)/sinh(k)为了x(0,1), 在哪里k=104. 直接计算当然会导致溢出问题,因为exp(k)因素。然而,u(x)只取 0 到 1 之间的值,所以我想知道是否有一种聪明的方法可以计算这个数量。我们也可以写u作为

u(x)=ekkxekekekxkekek.

我想先尝试取对数,看看是否有任何简化,但我无法取得进展。有没有人对我如何获得这个函数的逐点数值有建议?我知道函数本质上是 1 在x=0和 0 其他地方,但我很好奇原来的问题。

2个回答

我的想法是近似值exp(k)exp(k)exp(k)对于大的正值k. 但相反,我们可以将分子和分母除以exp(k)并得到一个准确的表达

exp(kkx)exp(kxk)exp(k)exp(k)=exp(kx)exp(k(x2))1exp(2k)
应该可以在没有溢出的情况下进行评估。(请注意,这与用于评估log-sum-exp 函数而不会溢出的技术完全相同。)

在你给出的假设下x我假设k也是正数,您可以计算此函数的渐近展开式k

u(x)ekxek(2x)+ek(2+x)ek(4x)+ek(4+x)+
从中你可以看到,如果k足够大(并且104当然是),只有第一项是重要的。