不少同学一提到泰勒公式,脑海里立马浮现高大上的定义和长长的公式,令人望而生畏。

实际上,泰勒公式没有那么可怕,它是用简单的多项式来逼近一个光滑的函数,从而近似替代不熟悉的函数。由于泰勒公式具有将复杂函数近似成多个幂函数叠加形式的性质,可以用它进行比较、求极限、求导、解微分方程等。

我们先来看一下泰勒公式的发明者,布鲁克·泰勒——

布鲁克·泰勒(Brook Taylor,1685-1732),英国数学家,牛顿学派最优秀的代表人物之一,他于1712年的一封信里首次叙述了泰勒公式。

再来看一下高数书上对泰勒公式的定义:

公式3-5就称为f(x)在x0处的带有拉格朗日余项的n阶泰勒公式。

初看这个泰勒公式的定义,就觉得恢宏大气,气势磅礴。不过光从泰勒公式的定义,很难直观看出它是怎么用多项式逼近原函数的。接下来我们用图像和图表来感受一下——

这里我们先列举出f(x) = cosx在原点的泰勒2阶、4阶、6阶、8阶、10阶的多项式,并用图像表示该函数及其泰勒n阶多项式。

2阶多项式:
g ( x ) = 1 − 1 2 ! x 2 g(x) = 1-\frac{1}{2!}x^{2} g(x)=1−2!1​x2
4阶多项式:
g ( x ) = 1 − 1 2 ! x 2 + 1 4 ! x 4 g(x) = 1 - \frac{1}{2!}x^{2} + \frac{1}{4!}x^{4} g(x)=1−2!1​x2+4!1​x4
6阶多项式:
g ( x ) = 1 − 1 2 ! x 2 + 1 4 ! x 4 − 1 6 ! x 6 g(x) = 1 - \frac{1}{2!}x^{2} + \frac{1}{4!}x^{4} - \frac{1}{6!}x^{6} g(x)=1−2!1​x2+4!1​x4−6!1​x6
8阶多项式:
g ( x ) = 1 − 1 2 ! x 2 + 1 4 ! x 4 − 1 6 ! x 6 + 1 8 ! x 8 g(x) = 1 - \frac{1}{2!}x^{2} + \frac{1}{4!}x^{4} - \frac{1}{6!}x^{6} + \frac{1}{8!}x^{8} g(x)=1−2!1​x2+4!1​x4−6!1​x6+8!1​x8
10阶多项式:
g ( x ) = 1 − 1 2 ! x 2 + 1 4 ! x 4 − 1 6 ! x 6 + 1 8 ! x 8 − 1 10 ! x 10 g(x) = 1 - \frac{1}{2!}x^{2} + \frac{1}{4!}x^{4} - \frac{1}{6!}x^{6} + \frac{1}{8!}x^{8} - \frac{1}{10!}x^{10} g(x)=1−2!1​x2+4!1​x4−6!1​x6+8!1​x8−10!1​x10

对应图像如下,其中黑色线条为原函数f(x),彩色线条为多项式g(x)。可以看到随着阶数的增大,多项式在更大范围内越来越逼近原函数。

我们再用python实现函数y=cosx的泰勒n阶多项式,并与y=cosx的实际值进行比较,其中令n=40。

def f_cos(x):m = 20+1sum = 1.0for i in range(1,m): #range函数取值是左闭右开n = 2 * i tmp1,tmp2,tmp3 = 1,1,1for j in range(1,i+1):tmp1 = -tmp1             for j in range(1,n+1):                    tmp2 = tmp2*xtmp3 = tmp3*jsum = sum + tmp1*tmp2/tmp3return sum
from numpy import *
for x in range(-20,21):print("x = " + str(x))print("f_cos(x) = " + str(f_cos(x)))print("cos(x) = " + str(cos(x)))

比较自定义的f_cos(x)和numpy库的cosx的误差:

x取值 自定义的f_cos(x) numpy库的cosx 误差(f_cos(x) - cos(x)) 分析
20 2577.3069 0.4081 2576.8988 误差非常大
19 305.1701 0.9887 304.1814 误差较大
18 32.5969 0.6603 31.9366 存在误差
17 2.6676 -0.2752 2.9428 存在误差
16 -0.7234 -0.9577 0.2343 存在0.1级误差
15 -0.7439 -0.7597 0.0158 存在0.01级误差
14 0.1376 0.1367 0.0009 存在0.0001级误差
13 0.9075 0.9074 0.0000 精度范围内一致
12 0.8439 0.8439 0.0000 精度范围内一致
11 0.0044 0.0044 0.0000 精度范围内一致
10 -0.8391 -0.8391 0.0000 精度范围内一致
9 -0.9111 -0.9111 0.0000 精度范围内一致
8 -0.1455 -0.1455 0.0000 精度范围内一致
7 0.7539 0.7539 0.0000 精度范围内一致
6 0.9602 0.9602 0.0000 精度范围内一致
5 0.2837 0.2837 0.0000 精度范围内一致
4 -0.6536 -0.6536 0.0000 精度范围内一致
3 -0.9900 -0.9900 0.0000 精度范围内一致
2 -0.4161 -0.4161 0.0000 精度范围内一致
1 0.5403 0.5403 0.0000 精度范围内一致
0 1.0000 1.0000 0.0000 精度范围内一致

由于f(x) = cosx函数关于y轴对称,这里只列举出了x轴右半部分[0,20]的范围,x轴左半部分的结果与右半部分结果相同。

在[0,20]范围内,当x=20时,二者的误差非常大。随着x的减小,二者的误差也在逐渐减小。在[0,13]范围内,二者在精度范围内完全一致,几乎零误差。

大家可以尝试一下,把n的值调大,这个精度一致的范围会变大。例如此例若n=30,即y=cosx的泰勒30阶多项式,则在[-20,20]范围内,二者精度都完全一致。感兴趣的同学可以运用同样的方法,分析一下其他函数。

再试着写出函数y=sinx的泰勒n阶多项式的python程序,其中n=19。

def f_sin(x):m = 10+1sum = 0.0for i in range(1,m):n = 2 * i - 1     tmp1,tmp2,tmp3 = 1,1,1for j in range(1,i):tmp1 = -tmp1  for j in range(1,n+1):          tmp2 = tmp2*xtmp3 = tmp3*jsum = sum + tmp1*tmp2/tmp3 return sum
from numpy import *
for x in range(-20,21):print("x = " + str(x))print("f_sin(x) = " + str(f_sin(x)))print("sin(x) = " + str(sin(x)))

后续会继续增加一些函数的泰勒n阶多项式python程序(可能会偷懒)。

最后推荐一个比较好用的在线画函数的工具Desmos:

https://www.desmos.com/calculator?lang=zh-CN

简易教程:

https://www.ravenxrz.ink/archives/27d14722.html

还可以用著名的心形线画个爱心哦:

工欲善其事必先利其器,大家有什么好用的工具,可以评论区推荐一下。

机器学习数学基础之高数篇——简单的泰勒公式(python版)相关推荐

  1. python速成版_【Spark机器学习速成宝典】基础篇04数据类型(Python版)

    目录 Vector 一个数学向量.MLlib 既支持稠密向量也支持稀疏向量,前者表示向量的每一位都存储下来,后者则只存储非零位以节约空间.后面会简单讨论不同种类的向量.向量可以通过mllib.lina ...

  2. 高数篇:01函数的中值定理

    高数篇:01函数的中值定理 高数篇:01函数的中值定理 十大中值定理 有关函数的中值定理 定理3:平均值(离散)定理 定理10:积分中值(连续)定理 定理3和10的区别 转载需注明出处 高数篇:01函 ...

  3. 高数篇:04拉格朗日中值定理

    高数篇:04拉格朗日中值定理 高数篇:04拉格朗日中值定理 定理7:拉格朗日中值定理 拉格朗日与罗尔定理的区别 拉格朗日的应用1.0 多次使用拉氏2.0 转载需注明出处 高数篇:04拉格朗日中值定理 ...

  4. 用matlab求累次极限,Matlab笔记——数值计算—高数篇015

    15. 数值计算-高数篇 一.求极限 limit(f,x,a)--求极限lim ()x a f x → limit(f,x,a,'right')--求右极限lim ()x a f x +→ limit ...

  5. 数学基础(高数、线代、概率论、统计学等等)

    此文章只作为个人学习笔记,不会面面俱到,完整学习还请多看看书和视频吧,个人理解如果有错误希望指出,共同学习进步. 机器学习 高数.线代和概率论是黄海广博士的知乎帖子,只是做总结,具体知识点参考课本和视 ...

  6. 高数篇:深度解析充分必要条件

    高数篇:深度解析充分必要条件 高数篇:深度解析充分必要条件 充分必要条件的定义 栗子测试 深度解析 转载需注明出处 高数篇:深度解析充分必要条件 如果你对充分必要条件已经有了充分的理解,可以忽略本篇: ...

  7. 大学生数学竞赛(高数篇)

    大学生数学竞赛,不是数学建模,分为数学组和非数学组,我是非数学组. 全国初赛只考高数,全国总决赛考高数和线性代数.当年我是我们学校唯一 一个进入全国总决赛的,非数学组就我一个,数学组全军覆没. 下面贴 ...

  8. 高数篇(四)-- 互信息概述与matlab实现

    在概率论和信息论中,两个随机变量的互信息(Mutual Information,简称MI)或转移信息(transinformation)是变量间相互依赖性的量度.不同于相关系数,互信息并不局限于实值随 ...

  9. 机器学习数学基础之线代篇——线性代数python手册(建议收藏)

    提到线性代数,又不得不吐槽国内教材了,学起来真的是实力劝退.有多少跟着国内教材学完线性代数课程后,知道线性代数是什么,它到底是干什么的? 事实上如果你后面想做科研.想研究机器学习.深度学习,你会发现处 ...

最新文章

  1. java虚拟机线程调优与底层原理分析_Java并发编程——多线程的底层原理
  2. 面向人工智能的计算机体系结构
  3. java反序列化漏洞的一些gadget
  4. 身份证号码有效性检测算法 ( js版 转 C#版 )
  5. java冒泡遍历对象_Java经典排序算法(冒泡、选择、插入)
  6. 空间皮肤代码_不废话,看我20行代码搞定色块提取与定位…….
  7. Python浅谈gevent实现协程
  8. 查询表达式和LINQ to Objects
  9. eduline php5.3,index.php
  10. 吹塑模具和注塑模具的区别
  11. 微信小程序中实现轮播图效果
  12. Spring学习传送门
  13. SpringBoot专栏:集成定时ScheduledTasks任务,刷新概念了_14讲
  14. 提莫攻击 findPoisonedDuration
  15. ImageButton点击替换背景再次点击显示默认图片
  16. android 退出登录
  17. 学业水平考试b能上985吗_会考c能上985吗 985211对会考的要求
  18. 2018 新一代人工智能院士高峰论坛 总结文章
  19. WPF实现微信客户端界面布局
  20. 【Industry digitization】数字化技术正在全球范围内迅猛发展,世界各国和企业纷纷开启数字化转型之路

热门文章

  1. 常用的GitHub的搜索筛选条件
  2. vscode +phpstudy 搭建php调试环境
  3. 导出excel HSSFWorkbook 只能最多导出65535条数据
  4. 微信公众平台--提升篇
  5. Insert 28, 23, 54, 61, 98, 37 into an initially empty AVL tree first. Then immediately insert one of
  6. MatlabR2016b安装及弹出“弹出dVd1 并插入dVd2”解决方法
  7. Flutter动画(全)
  8. 读《大数据日知录架构与算法》
  9. Java Lambda简化Comparator接口匿名内部类写法
  10. Unity学习(C#)——this和base、抽象类