都2020年了,你还只会泰勒级数吗?------函数逼近
函数逼近主要用于初等函数的计算(初等函数是指幂函数、指数函数、对数函数、三角函数、反三角函数和常量函数的组合)。math_approx.h定点代码采用多项式逼近数学函数,《Speex降噪代码分析6——spx_acos( )原理》等文章详细计算、并与泰勒级数比较结果精度,但speex如何计算得到多项式系数的方法未知,因此本文将函数逼近方法罗列以供参考。
函数逼近常见的方法是泰勒级数和插值多项式。前者的缺点是降低误差就要提高多项式的次数,这就使得计算量变大。后者在n+1个点上无误差,但其他点的误差无法控制,也就是说如果要限制误差范围,则插值多项式可能无法实现而失败。对于连续函数还有最佳一致逼近和最佳平方逼近,对于离散数据有最小二乘逼近。下面列出其关键理论。
函数逼近问题的数学提法是:给定f(x),寻求一个函数P(x)使得误差f(x)-P(x)在某种度量意义下最小,P(x)是简单且便于计算的函数类,例如代数多项式或三角多项式或分式有理函数等。
连续函数空间的正交多项式理论是函数逼近的理论基础。先定义内积,再定义范数,用柯西-施瓦茨不等式证明三角不等式。
以下特殊多项式与根据上述公式计算得到的正交多项式只相差一个系数。
Legendre多项式对应w(x)=1,
Chebyshev多项式对应w(x)=1/sqrt(1-x^2),
Jacobi多项式对应w(x)= (1-x) ^alfa(1+x) ^beta,
Leguerre多项式对应w(x)=exp(-x),
Hermite多项式对应w(x)=exp(-x^2),
其他结论:正交多项式存在三项递推公式,n次多项式恰好有n个不同的实根。
最佳平方逼近不能直接使用定理3中的基Hn,因为这时要求解的方程是一个病态矩阵。因此要选择正交基,求解公式如下。
最小二乘法也可以用于连续函数的逼近,在分析speex的math_approx.h代码时就经常用到。只是要人为选择计算点,不方便控制误差,需要反复尝试。
最佳一致逼近求解困难,因此只能近似计算。三种方法分别是展开为Chebyshev级数、拉格朗日插值余项的极小化和泰勒级数的缩减。
下表是exp(x)使用各种逼近方法得到的3次多项式的最大误差,可见最佳一致逼近<最佳平方逼近<泰勒级数。
更多内容,请关注微信公众号“音频算法与工程实践”。