我很难理解为什么将泰勒级数用于函数以获得函数的近似值而不是仅在编程时使用函数本身会很有用。如果我可以告诉我的计算机计算 e^(.1) 并且它会给我一个精确的值,我为什么要取一个近似值呢?
2 回答
泰勒级数一般不用于逼近函数。通常,使用某种形式的极小极大多项式。
泰勒级数收敛缓慢(需要许多项才能获得所需的精度)并且效率低下(它们在它们的中心点附近更准确,而远离它的点更不准确)。泰勒级数的最大用途可能是在数学课和论文中,它们对于检查函数的性质和学习微积分很有用。
为了逼近函数,经常使用极小极大多项式。极小极大多项式在特定情况下具有最小可能的最大误差(函数要逼近的区间,多项式可用的度数)。通常没有解析解来寻找极小极大多项式。使用Remez 算法以数字方式找到它们。可以定制极小极大多项式以满足特定需求,例如最小化相对误差或绝对误差、在特定区间内逼近函数等。Minimax 多项式需要比泰勒级数更少的项来获得可接受的结果,并且它们在区间内“传播”误差,而不是在中心更好而在末端更差。
当您调用该exp
函数来计算 e x时,您可能正在使用一个极小极大多项式,因为有人已经为您完成了这项工作并构建了一个计算多项式的库例程。在大多数情况下,算术计算机处理器能做的只有加法、减法、乘法和除法。因此,必须从这些操作中构造其他功能。前三个为您提供多项式,多项式足以逼近许多函数,例如正弦、余弦、对数和取幂(还有一些将事物移入和移出浮点值的指数字段的额外操作)。除法添加有理函数,这对于反正切等函数很有用。
For two reasons. First and foremost - most processors do not have hardware implementations of complex operations like exponentials, logarithms, etc... In such cases the programming language may provide a library function for computing those - in other words, someone used a taylor series or other approximation for you.
Second, you may have a function that not even the language supports.
I recently wanted to use lookup tables with interpolation to get an angle and then compute the sin() and cos() of that angle. Trouble is that it's a DSP with no floating point and no trigonometric functions so those two functions are really slow (software implementation). Instead I put sin(x) in the table instead of x and then used the taylor series for y=sqrt(1-x*x) to compute the cos(x) from that. This taylor series is accurate over the range I needed with only 5 terms (denominators are all powers of two!) and can be implemented in fixed point using plain C and generates code that is faster than any other approach I could think of.