泰勒公式(泰勒展开式)通俗+本质详解

 

比较通俗地讲解一下泰勒公式是什么。

泰勒公式,也称泰勒展开式。是用一个函数在某点的信息,描述其附近取值的公式。如果函数足够平滑,在已知函数在某一点的各阶导数值的情况下,泰勒公式可以利用这些导数值来做系数,构建一个多项式近似函数,求得在这一点的邻域中的值

所以泰勒公式是做什么用的?

简单来讲就是用一个多项式函数去逼近一个给定的函数(即尽量使多项式函数图像拟合给定的函数图像),注意,逼近的时候一定是从函数图像上的某个点展开。如果一个非常复杂函数,想求其某点的值,直接求无法实现,这时候可以使用泰勒公式去近似的求该值,这是泰勒公式的应用之一。泰勒公式在机器学习中主要应用于梯度迭代。

***********************************************************************************************************************************

***********************************************************************************************************************************

1. 问题的提出 

多项式   是最简单的一类初等函数。关于多项式,由于它本身的运算仅是有限项加减法和乘法,所以在数值计算方面,多项式是人们乐于使用的工具。因此我们经常用多项式来近似表达函数。这也是为什么泰勒公式选择多项式函数去近似表达给定的函数。

***********************************************************************************************************************************

***********************************************************************************************************************************

2. 近似计算举例

初等数学已经了解到一些函数如: 的一些重要性质,但是初等数学不曾回答怎样来计算它们,以 f(x) = \small \cos x 的近似计算为例:

①. 一次(线性)逼近                                                                             

利用微分近似计算公式 f(x) \small \approx f(\small x_{0}) + {f}'(\small x_{0})(x - \small x_{0}) (该式由导数/微分的极限表达公式转换得到),对 \small x_{0} = 0 附近的 f(x) 的线性逼近为: f(x) \small \approx f(0) + {f}'(0) x , 所以 f(x) = \small \cos x \small \approx 1,所以 f(x) 在 \small x_{0} = 0 附近的线性逼近函数 P_{1}(x) = 1,如下图:

线性逼近优点:形式简单,计算方便;缺点:离原点O越远,近似度越差。  

②. 二次逼近     

二次多项式 逼近 f(x) = \small \cos x ,我们期望:    

\small P_{2}\left ( 0 \right ) = \small f\left ( 0 \right ) = \small \cos 0 = 1 = \small a_{0}  ( 即期望在 x = 0 处逼近函数和给定函数的函数值相等 );

\small {P_{2}}'\left ( 0 \right ) = \small f{}'\left ( 0 \right ) = \small \sin 0 = 0 = \small a_{1}  ( 即期望在 x = 0 处逼近函数和给定函数的斜率相等 );  

\small {P_{2}}''\left ( 0 \right ) = \small {f}''\left ( 0 \right ) = \small -\cos 0 = -1,所以 \small a_{2} = \small -\frac{1}{2}  ( 即期望在 x = 0 处逼近函数和给定函数的曲率相等 ); 

 所以 \small \cos x \small \approx \small P_{2}\left ( x \right ) = 1 - \small \frac{x^{2}}{2},如下图:

二次逼近要比线性逼近好得多,但局限于 [ \small -\frac{\pi }{2}\small \frac{\pi }{2} ] 内,该范围外,图像明显差异很大。为什么我们期望两个函数在某一点的函数值 、一阶导数值、二阶导数值相等?因为这些值表达了函数(图像)最基本和最主要的性质,这些性质逼近即可以使得两个函数逼近(由上面函数图像可以直观地看出来)

③. 八次逼近 

 八次多项式   逼近 f(x) = \small \cos x ,我们期望:     

 \small P_{8}\left (0 \right ) = f\left ( 0 \right ) ,求出  \small a_{0} = 1   ( 即期望在 x = 0 处逼近函数和给定函数的函数值相等 );       

 \small {P_{8}}'\left ( 0 \right ) = {f\left ( 0 \right )}',求出 \small a_{1} = 0   ( 即期望在 x = 0 处逼近函数和给定函数的斜率相等 );

 .... .... ....          

 \small {P_{8}}^{(8)}\left ( 0 \right ) = f^{(8)}(0),求出 \small a_{8} = \frac{1}{8!}  ( 即期望在 x = 0 处逼近函数和给定函数的曲率相等 );                                               

所以    ,如下图:

\small P_{8}\left ( x \right ) (绿色图像) 比 \small P_{2}\left ( x \right ) (蓝色图像) 更大范围内更接近余弦函数 (红色图像)   

由上述3次不同程度的函数逼近可以看出:对于精确度要求较高且需要估计误差的时候,必须用高次多项式来近似表达函数,同时给出误差公式 。

以上就是利用多项式函数去逼近给定函数的一个过程。

*****************************************************************************************************************************************

*****************************************************************************************************************************************

3. 泰勒公式的推导

由此引出一个问题:给定一个函数 \small f\left ( x \right ) ,要找一个在指定点 \small x_{0} 附近与 \small f\left ( x \right ) 很近似的多项式函数 \small P\left ( x \right ),记为:         

  使得  \small f\left ( x \right ) \small \approx  \small P_{n}\left ( x \right ) 并且使得两者误差 \small R_{n}\left ( x \right ) = f\left ( x \right ) - P_{n}\left ( x \right ) 可估计。所以要找的多项式应该满足什么条件,误差是什么?

从几何上看,\small y = f\left ( x \right )\small y = P_{n}\left ( x \right ) 代表两条曲线,如下图:

       

使它们在 \small x_{0} 附近很靠近,很明显:

1. 首先要求两曲线在 \small \left ( x_{0},f\left ( x_{0} \right ) \right ) 点相交,即  \small P_{n}\left ( x_{0} \right ) = f\left ( x_{0} \right )             

2. 如果要靠得更近,还要求两曲线在  \small \left ( x_{0},f\left ( x_{0} \right ) \right ) 点相切,(由图像可以直观看出,相交 [ 棕色和红色图像 ] 和 相切 [ 绿色和红色图像 ],两曲线在 \small x_{0} 附近的靠近情况明显差异很大,相切更接近),即 \small {P_{n}}'\left ( x_{0} \right ) = {f}'\left ( x_{0} \right )                                                

3. 如果还要靠得更近,还要求曲线在  \small \left ( x_{0},f\left ( x_{0} \right ) \right ) 点弯曲方向相同,(如上图,弯曲方向相反 [ 绿色和红色图像 ];弯曲方向相同[ 蓝色和红色图像 ],明显在离 \small x_{0} 很远的地方,弯曲方向相同两函数的差异更小一点),即 \small {P_{n}}''\left ( x_{0} \right ) = {f}''\left ( x_{0} \right ) ,进而可推想:若在 \small \left ( x_{0},f\left ( x_{0} \right ) \right ) 附近有 \small {P_{n}}'\left ( x_{0} \right ) = {f}'\left ( x_{0} \right )\small {P_{n}}''\left ( x_{0} \right ) = {f}''\left ( x_{0} \right ) \small \cdots \cdots \cdots  \small P_{n}^{\left ( n \right )}\left ( x_{0} \right ) = f^{n}\left ( x_{0} \right ),近似程度越来越好。

综上所述,所要找的多项式应满足下列条件:

              

解释一下上面的转换时如何做的,以上面第三行的二阶导数为例: 

第一个箭头的转换:将 \small P_{n}\left ( x \right ) 求二阶导函数后将 \small x_{0} 带入,求得 \small {P_{n}}''\left ( x_{0} \right ) = 2!a_{2} 

第二个箭头的转换:所以 \small {f}''\left ( x_{0} \right ) = 2!a_{2},所以 \small a_{2} = \frac{1}{2!}{f}''\left ( x_{0} \right ) 

多项式函数   中的系数 \small a 可以全部由 \small f\left ( x \right ) 表示,则得到: 

其中误差为  \small R_{n} \left ( x \right ) = f\left (x \right ) - P_{n}\left ( x \right )。 因为是用多项式函数去无限逼近给定的函数,所以两者之间肯定存在一丢丢的误差。

****************************************************************************************************************************************

****************************************************************************************************************************************

4. 泰勒公式的定义

所以我们就得到了泰勒公式的定义:

如果函数 \small f\left ( x \right ) 在含 \small x_{0} 的某个开区间  \small \left ( a,b \right )  内具有直到  \small \left ( n+1 \right ) 阶导数,则对  \small \forall x \in \left ( a,b \right ) ,有  

   

其中余项 (即误差)  \small R_{n}\left ( x \right ) = \frac{f^{\left ( n+1 \right )}(\xi )}{\left ( n+1 \right )!}(x-x_{0})^{n+1} , \xi 在 \small x_{0} 与 x 之间。 泰勒公式的余项表达方式有好几种,前面这种表是方法称为n阶泰勒展开式的拉格朗日余项。拉格朗日余项即是n阶泰勒公式又多展开了一阶,n变为n+1。注意,这里的余项即为误差,因为使用多项式函数在某点展开,逼近给定函数,最后肯定会有一丢丢的误差,我们称之为余项。

****************************************************************************************************************************************

****************************************************************************************************************************************

5. 扩展 —— 麦克劳林公式

是泰勒公式的一种特殊情况:即当 \small x_{0} = 0 时的泰勒公式。所以将 \small x_{0} = 0 带入公式,即得:

几个常见的初等函数的带有佩亚诺余项的麦克劳林公式:

 佩亚诺余项为    \small \left ( x-x_{0} \right )^{n} 的高阶无穷小 :                                  

                                                             

 

 

POJ 2182是一道使用树状数组解决的题目,题目要求对给定的n个数进行排序,并且输出每个数在排序后的相对位置。树状数组是一种用来高效处理前缀和问题的数据结构。 根据引用中的描述,我们可以通过遍历数组a,对于每个元素a[i],可以使用二分查找找到a到a[i-1]中小于a[i]的数的个数。这个个数就是它在排序后的相对位置。 代码中的query函数用来求前缀和,add函数用来更新树状数组。在主函数中,我们从后往前遍历数组a,通过二分查找找到每个元素在排序后的相对位置,并将结果存入ans数组中。 最后,我们按顺序输出ans数组的元素即可得到排序后的相对位置。 参考代码如下: ```C++ #include <iostream> #include <cstdio> using namespace std; int n, a += y; } } int main() { scanf("%d", &n); f = 1; for (int i = 2; i <= n; i++) { scanf("%d", &a[i]); f[i = i & -i; } for (int i = n; i >= 1; i--) { int l = 1, r = n; while (l <= r) { int mid = (l + r) / 2; int k = query(mid - 1); if (a[i > k) { l = mid + 1; } else if (a[i < k) { r = mid - 1; } else { while (b[mid]) { mid++; } ans[i = mid; b[mid = true; add(mid, -1); break; } } } for (int i = 1; i <= n; i++) { printf("%d\n", ans[i]); } return 0; } ``` 这段代码使用了树状数组来完成题目要求的排序功能,其中query函数用来求前缀和,add函数用来更新树状数组。在主函数中,我们从后往前遍历数组a,通过二分查找找到每个元素在排序后的相对位置,并将结果存入ans数组中。最后,我们按顺序输出ans数组的元素即可得到排序后的相对位置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [poj2182Lost Cows——树状数组快速查找](https://blog.csdn.net/aodan5477/article/details/102045839)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [poj_2182 线段树/树状数组](https://blog.csdn.net/weixin_34138139/article/details/86389799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值