切比雪夫点和浮点精度

Chebychev points and floating point precision

我在讲义中看到,切比雪夫点定义(在 MatLab 符号中)为

n = 20;
i = (1:n+1)';
% Chebychev
xi = 5*cos((2*i-1)*pi/(2*(n+1)))

在 [-1,1] 中的浮点精度不对称。 但是,如果将三角恒等式cos(x) = sin( pi/2 - x)应用于上述点,他会发现切比雪夫点

xxi = 5*sin(pi*(n+2-2*i)/(2*(n+1)))

现在在区间内是对称的。

现在,最大的问题是:为什么这种替换会产生对称性?我很确定这与 pi 有关,但它出现在两个公式中,那么到底发生了什么?我希望看到这种情况的正式论证或数学计算

sincos的周期都是2*pi,如你所知,这两个函数可以很容易地相互转化。还有更多的关系,比如sin(-x)=-sin(x),cos(-x)=cos(x),sin(x+2pi)=sin(x)等

您的原始点集在区间 0,2*pi 上采样 cos(x)。那是一个完整的时期。这对于计算目的来说绰绰有余;实际上间隔 0,pi/2 已经足够了。 cos(x)的其他取值可由上述关系式求得。

现在替换只是将 x ∈ 0,2*pi 变换为 x' ∈ -pi, +pi。那仍然是一个完整的周期,但现在围绕 0 对称。

正弦公式使用以零为中心对称分布的点,而余弦格式则没有。浮点格式的特征,尤其是它表示数字的粒度,是围绕零对称的,因此围绕零对称的计算产生围绕零对称的结果。

余弦公式在点(2i−1)/(2n+2)处使用cos π 为 1 ≤ i ≤ n+1。对于 n=20,这些点是 1/42 π, 3/42 π, 5/42 π, ... 41/42 π.

1/42 π 约为 0.075。不大于 .075 的最大二乘方是 2−4。当 1/42 π 以 IEEE-754 二进制 64 格式计算时,其有效位有 53 位,浮点缩放使得有效位中的最大位位置表示 2−4,最低位表示2−56。所以结果必须四舍五入到最接近的 2−56 的倍数。相比之下,41/42 π 约为 3.067,其尾数的前导位表示 22,而最低位表示 2−50.因此,结果必须四舍五入到最接近的 2−50 的倍数,比 1/42 π 大 64​​ 倍。所以浮点数计算的舍入误差一般是1/42 π和41/42 π,3/42 π和39/42 π,等等。

正弦公式在点(n+2-2i)/(2n+2) π 对于 1 ≤ i ≤ n+1。对于 n=20,这些点是 20/42 π, 18/42 π, 16/42 π, … −16/42 π, −18/42 π, −20/42 π。在此,当 20/42 π 和 −20/42 π 以 binary64 计算时,它们都对尾数使用相同的缩放比例。所以它们的舍入误差是完全相同的,只是符号不同,而且,计算的结果除了符号位是相同的。类似地,18/42 π 和 −18/42 π 使用相同的缩放比例,并且所有项都与对称伙伴配对,但 0/42 π 除外,但它为零并且具有对称的计算误差(零)与自身。

此外,sin 例程的典型实现是围绕零对称的,因此 sin(-x)-sin(x) 产生相同的结果。通常,它们通过减少参数模 2π(至少在效果上)和评估近似正弦的多项式来运行,并且该多项式通常围绕零对称(具有其变量 x[=46= 的所有奇次幂]).因此评估 sin(x)sin(-x) 保留了对称性,最终乘以 5 也是如此。(cos 实现可能具有类似的对称性,但是,由于这种情况下的参数已经不对称, cos 无法恢复对称。)