1. 函数拟合
计算机应用常常需要使用简单函数的线性组合来拟合某个复杂函数。例如,在游戏开发中,为了实现某些渲染效果,通常会在shader中使用到正弦函数。但是,由于GPU计算正弦函数的指令数较多,性能开销比较高,开发者通常会考虑使用多项式函数的线性组合来拟合正弦函数,从而减少计算指令数,提高渲染性能。
假设我们需要计算正弦函数在区间上的值。为了减少性能开销, 我们考虑使用多项式函数的线性组合来逼近函数,如式 1 所示。
线性组合系数的取值应该使得函数与之间的误差最小。因此,我们先定义误差函数,然后求得误差函数的最小值点,即可以得到线性组合系数。
由于函数的最小值点必定在极小值点取得,因此求函数的最小值点的一种方法是,求的导数为0的点。另外,我们还可以使用其他方法来求解系数,该方法称为 最小二乘投影,这是后面重点介绍的方法。
对于函数,我们可以使用多项式函数的线性组合来拟合,其中的定义如公式所示。
所有在区间上有定义的一元连续函数能够构成函数空间,而函数是该函数空间中的 基函数。这意味着函数空间中的任意函数,都可以使用基函数的线性组合来表示,即
虽然函数需要使用无穷项基函数的线性组合来表示,但是实际上,我们取基函数的前项也能够很好地来拟合函数。为了方便起见,我们取前项基函数的线性组合来进行拟合,可以表示为:
另外,由于函数空间的基函数会满足 正交性质,则函数应该满足性质:
其中的定义如下:
基于多项式函数的正交性,我们可以通过以下公式求得线性组合系数:
式 8 的证明如下:
通过 式 8 ,我们可以得到函数中的系数如下:
带入到 式 5,可以得到函数的公式如下:
图 1 是函数与在区间的图像,其中黄色曲线为函数,绿色曲线为函数。 可以看到,函数能够较好地拟合函数。

事实上,通过增加多项式函数的数量,我们可以不断地提高函数对函数的拟合程度。当多项式的数量是个时,即函数时,函数图像如 图 2 所示。从图像可以看出,函数与的曲线几乎一致。我们取 图 2 中的局部区间,如 图 3 所示,可以看到函数与的曲线误差也很小。

当函数中多项式函数的项数趋于无穷时,其极限为,能够完美地拟合函数。
