评估考特( x ) − 1 / xcoth⁡(x)−1/x真正的Xx,在 2 个“件”上

计算科学 数字
2021-11-30 16:34:07

功能coth(x)1/x在 0 处有一个可移动的奇点。它的泰勒级数是:

coth(x)1/x=x3x345+2x5945+
我想评估泰勒级数的前 3 项|x|δ, 直接计算coth(x)x1为了|x|>δ.

什么是数字正确的选择方法δ,所以在某个固定的有限区间(比如 [-10,10])上的误差被最小化了?

认为x是 64 位 IEEE 浮点数,并且coth(x)取自高质量的 64 位精度库。

如果δ太小,则有取消错误xδ. 而如果δ太大,则存在近似误差x 略低于δ.

当然,有一种聪明的方法可以在不使用反复试验的情况下进行分析。

稍后添加:感谢@njuffa,我了解到这是朗之万函数,并且在 0 附近使用不同的多项式,或者可能是连分数展开式可能更准确。所以一个更普遍的问题是:在选择了一个接近 0 的近似公式之后,找到最佳切换点的好程序是什么?δ?

1个回答

在@njuffa 之后,我使用任意精度的RRmpfr来计算黄金测试参考,精度为 1024 位。这是一个相对误差图,用于直接定义和泰勒级数(五次多项式)近似(均使用双精度): 在此处输入图像描述

最优的δ是两条曲线相交的地方,大约是δ0.03. 相对误差δ是关于6.6×1013,这大约是机器 epsilon = 2.220446e-16 的 3000 倍。机器 epsilon 在图中显示为水平虚线。该图显示,减法抵消发生在所有x少于2,这证实了@njuffa 在他之前的问题中所写的内容。团结太小了。

这两条“曲线”比我预期的要简单,因此可以从第一原理为它们推导出简单的上限函数。如果是这样,那么一个人可以解决δ从第一原理出发,没有实验。这就是我问这个问题时的想法。但是,使用任意精度库要容易得多,而且实际上很有趣。

我还在此处给出的 Wikipedia 上尝试了 Langevin 函数的连分数展开分母是从 3 开始的连续奇数。对于与 @njuffa 的示例性 C 函数相当的结果,必须在连分数中一直到分母 21(不是25我犯了编程错误),并使用开关过点δ1.8.