项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.泰勒公式(Taylor’s Formula)

对于一些复杂的函数,为了方便研究与分析,我们往往希望用一些简单的函数来近似表达。其实这也符合人们对事物的认知规律与认知曲线:有浅入深,由易到难,前面研究的比较容易的部分往往是后面推广结论的特例。在比较简单的函数中,多项式算是最简单的一种了。因为多项表达式只有比较简单的加减乘除四则运算,便能求出函数的值。所以,用多项式表达复杂函数往往是我们的首选。

给出泰勒公式的具体表达式:
如果函数f(x)f(x)f(x)在含有x0x_0x0​的某个开区间(a,b)(a,b)(a,b)内具有(n+1)(n+1)(n+1)阶的导数,那么对任一x∈(a,b)x \in (a,b)x∈(a,b),有
f(x)=f(x0)+f′(x0)(x−x0)+f′′(x0)2!(x−x0)2+⋯+f(n)(x0)n!(x−x0)n+Rn(x)f(x) = f(x_0) + f'(x_0)(x-x_0) + \frac{f''(x_0)}{2!}(x-x_0)^2 + \cdots + \frac{f^{(n)}(x_0)}{n!}(x-x_0)^n + R_n(x)f(x)=f(x0​)+f′(x0​)(x−x0​)+2!f′′(x0​)​(x−x0​)2+⋯+n!f(n)(x0​)​(x−x0​)n+Rn​(x)

其中 Rn(x)=f(n+1)(ϵ)(n+1)!(x−x0)(n+1)R_n(x) = \frac{f^{(n+1)}(\epsilon)}{(n+1)!}(x-x_0)^{(n+1)}Rn​(x)=(n+1)!f(n+1)(ϵ)​(x−x0​)(n+1)
这里的ϵ\epsilonϵ是介于xxx与x0x_0x0​之间的某个值,RnR_nRn​被称为拉格朗日余项。

泰勒公式的初衷是用多项式来近似表示函数在某点周围的情况。取最常见的exe^xex为例,在x=0x=0x=0的附近可以用如下多项式近似表示:
ex≈1+x+x22!+x33!+⋯+xnn!e^x \approx 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots + \frac{x^n}{n!}ex≈1+x+2!x2​+3!x3​+⋯+n!xn​

2.麦克劳林级数(Maclaurin)

通过函数在自变量零点的导数求得的泰勒级数又叫麦克劳林级数。以前面提到的exe^xex为例,麦克劳林级数即为
ex≈1+x+x22!+x33!+⋯+xnn!e^x \approx 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots + \frac{x^n}{n!}ex≈1+x+2!x2​+3!x3​+⋯+n!xn​

3.泰勒展开的小结

1.泰勒公式的核心思想就是:用多项式函数取逼近光滑的函数。注意这里光滑很重要,因为泰勒公式里面要求具有(n+1)(n+1)(n+1)阶的导数,如果函数“不光滑”,显然不会满足上面的条件。
2.泰勒公式最常见的应用之一就是用于近似计算。以sin(x)sin(x)sin(x)为例:
sin(x)=x−13!x3+17!x7−19!x9+⋯sin(x) = x - \frac{1}{3!}x^3 + \frac{1}{7!}x^7 - \frac{1}{9!}x^9 + \cdotssin(x)=x−3!1​x3+7!1​x7−9!1​x9+⋯
计算机中计算sin(x)sin(x)sin(x)的值,就可以用上面的公式计算。

4.牛顿法(Newton’s method)

牛顿法(Newton’s method)又称为牛顿-拉弗森方法(Newton-Raphson method)。本博主的master论文里主要的理论依据就是牛顿-拉弗森方法。它是一种在实数域和复数域上近似求解方程的方法。牛顿法使用函数f(x)f(x)f(x)的泰勒级数的前面几项来寻找方程f(x)=0f(x)=0f(x)=0的根。所以他跟泰勒展开有天然的关系。

有前面的泰勒展开
f(x)=f(x0)+f′(x0)(x−x0)+f′′(x0)2!(x−x0)2+⋯+f(n)(x0)n!(x−x0)n+Rn(x)f(x) = f(x_0) + f'(x_0)(x-x_0) + \frac{f''(x_0)}{2!}(x-x_0)^2 + \cdots + \frac{f^{(n)}(x_0)}{n!}(x-x_0)^n + R_n(x)f(x)=f(x0​)+f′(x0​)(x−x0​)+2!f′′(x0​)​(x−x0​)2+⋯+n!f(n)(x0​)​(x−x0​)n+Rn​(x)

取泰勒展开的一次项,忽略后面的高次项,有:
f(x)=f(x0)+f′(x0)(x−x0)f(x) = f(x_0) + f'(x_0)(x-x_0)f(x)=f(x0​)+f′(x0​)(x−x0​)
如果我们将得到的新的坐标为xn+1x_{n+1}xn+1​,原来的坐标为xnx_nxn​,通常xn+1x_{n+1}xn+1​比xnx_nxn​更接近方程f(x)=0f(x)=0f(x)=0的解。因此利用新的坐标为xn+1x_{n+1}xn+1​进行下一轮迭代。

由上面的式子,很容易得出迭代公式为:
xn+1=xn−f(xn)f′(xn)x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}xn+1​=xn​−f′(xn​)f(xn​)​
用此式迭代,即可得到方程f(x)=0f(x)=0f(x)=0的根。

牛顿迭代的几何意义如下图

5.牛顿迭代实例

http://blog.csdn.net/bitcarmanlee/article/details/52194255 一文中,我们提到用牛顿迭代求解一个数的方根。里面我们给出了迭代公式,但是没有给出具体的推导过程。这里我们就推导一下求解方根迭代公式的过程。
求nnn的方根,即求解x2−n=0x^2-n=0x2−n=0
令f(x)=x2−nf(x) = x^2 - nf(x)=x2−n,则f′(x)=2xf'(x) = 2xf′(x)=2x
根据前面求得的牛顿迭代公式:
x(n+1)=xn−f(x)f′(x)=xn−xn2−n2xn=12(xn+nxn)x_{(n+1)} = x_n - \frac{f(x)}{f'(x)} = x_n - \frac{x_n^2-n}{2x_n} = \frac{1}{2}(x_n + \frac{n}{x_n}) x(n+1)​=xn​−f′(x)f(x)​=xn​−2xn​xn2​−n​=21​(xn​+xn​n​)

result = 0.5 * (result + (n / result))

这行代码即由上述迭代公司所求得。

从泰勒展开到牛顿迭代相关推荐

  1. 多项式牛顿迭代(应用:求逆,开根,对数exp)

    多项式牛顿迭代 给定多项式g(x)g(x)g(x),求f(x)f(x)f(x),满足g(f(x))≡0(modxn)g(f(x)) \equiv 0 \pmod {x ^ n}g(f(x))≡0(mo ...

  2. 关于牛顿迭代求根的笔记

    关于牛顿迭代求根的笔记 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求 ...

  3. 最优化方法:牛顿迭代法和拟牛顿迭代法

    http://blog.csdn.net/pipisorry/article/details/24574293 基础 拐点 若曲线图形在一点由凸转凹,或由凹转凸,则称此点为拐点.直观地说,拐点是使切线 ...

  4. 梯度下降法,牛顿迭代,牛顿法,拟牛顿法总结对比

    1.梯度下降 梯度下降是优化方法中最基础也是最重要的一类.其思想也很简单: f(x)=f(x0)+f′(x0)(x−x0)+⋯f(x) = f(x_0) + f'(x_0)(x-x_0) + \cdo ...

  5. 【学习笔记】超简单的多项式牛顿迭代(含泰勒展开式、牛顿迭代全套证明)

    整理的算法模板合集: ACM模板 目录 泰勒展开式 牛顿迭代 牛顿迭代应用 点我看多项式全家桶(●^◡_◡◡​^●) 泰勒展开式 牛顿迭代 牛顿迭代应用 牛顿迭代yyds,只用三行就完成了我一页纸的证 ...

  6. 【学习笔记】超简单的多项式求指(含泰勒展开式、牛顿迭代完成证明)

    整理的算法模板合集: ACM模板 目录 多项式求指 泰勒展开式 牛顿迭代 牛顿迭代应用 P4726 [模板]多项式指数函数(多项式 exp) 数组版 (1.64s) vector版 (960 ms) ...

  7. 用numpy autograd 实现牛顿迭代

    文章目录 1. 导入包库 2.定义函数 3.使用`autograd`定义导数 4.实现牛顿迭代 5.用`scipy`对应方法检验结果 6.小结 考虑非线性方程: f(x)=sin⁡(x)−e−x=0f ...

  8. 说说牛顿迭代 -- 方法篇

    说说牛顿迭代 – 方法篇 写这个笔记主要是最近老在考虑最优化问题.今天刚好发现一个不错的手写公式的工具,加上前几天又发现Win10的Windows Ink比我想象得好用,于是来描几笔.主要是想试试这样 ...

  9. 求平方根的算法 牛顿迭代法和二分法

    牛顿法: public double sqr(double n){double x=n,y=0.0;while (Math.abs(x-y)>0.0001){y=x;x=(x+n/x)/2;}r ...

  10. python牛顿迭代公式_python计算牛顿迭代多项式实例分析

    本文实例讲述了python计算牛顿迭代多项式的方法.分享给大家供大家参考.具体实现方法如下: ''' p = evalPoly(a,xData,x). Evaluates Newton's polyn ...

最新文章

  1. js数组fill()方法
  2. VC,Windbg,gdb执行到指定代码行方法
  3. Python:如何仅用递归函数和栈操作逆序一个栈
  4. 百度推出新技术 MIP,网页加载更快,广告呢?
  5. 能使用html/css解决的问题就不要使用JS
  6. [转]sudoers设置
  7. 日常问题——pdsh localhost Connection refused
  8. SpringBoot集成Redis缓存
  9. 1223. Chernobyl’ Eagle on a Roof(dp)poj3783
  10. 连接主机Java网络编程(一)- 一个简单的服务端/客户端应用程序
  11. STL 关联容器的lower_bound()和upper_bound()
  12. 球面坐标系与三角函数 Spherical Coordinates and Trigonometric Functions
  13. 源码分析学习记录(9)——PBR材质
  14. 临时手机短信云接收(防骚扰)
  15. ReactNative出现诸如以上的错误; ** is not defined.都是没有导入相应的库.
  16. php excel扩展名,excel后缀名是什么
  17. 【工程理论】引线键合机介绍
  18. Cutting Sticks
  19. Java 生成支付二维码返回给前端和自定义二维码背景色
  20. Z-Blog模板安装和使用教程

热门文章

  1. 强化学习——从最简单的开始入手
  2. 假如在1996年,微软、IBM、苹果你会投资谁?
  3. C基础(41——45)
  4. JAVA IO之管道流总结大全(转)
  5. Linux (转)解析 xinetd.conf
  6. 面向对象-属性查找与绑定方法
  7. jenkins集成钉钉
  8. 疯狂工作流讲义(第2版)基于Activiti6.x电子书
  9. OpenStack之化云为雨
  10. 获得硬盘的ID序列号(XE10.1+WIN8.1)