从泰勒展开到牛顿迭代

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

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

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

给出泰勒公式的具体表达式:
如果函数 f ( x ) f(x) f(x)在含有 x 0 x_0 x0的某个开区间 ( 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 ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + ⋯ + f ( n ) ( x 0 ) n ! ( x − x 0 ) n + R n ( 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)(xx0)+2!f(x0)(xx0)2++n!f(n)(x0)(xx0)n+Rn(x)

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

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

2.麦克劳林级数(Maclaurin)

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

3.泰勒展开的小结

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

4.牛顿法(Newton’s method)

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

有前面的泰勒展开
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + ⋯ + f ( n ) ( x 0 ) n ! ( x − x 0 ) n + R n ( 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)(xx0)+2!f(x0)(xx0)2++n!f(n)(x0)(xx0)n+Rn(x)

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

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

牛顿迭代的几何意义如下图
这里写图片描述

5.牛顿迭代实例

http://blog.youkuaiyun.com/bitcarmanlee/article/details/52194255 一文中,我们提到用牛顿迭代求解一个数的方根。里面我们给出了迭代公式,但是没有给出具体的推导过程。这里我们就推导一下求解方根迭代公式的过程。
n n n的方根,即求解 x 2 − n = 0 x^2-n=0 x2n=0
f ( x ) = x 2 − n f(x) = x^2 - n f(x)=x2n,则 f ′ ( x ) = 2 x f'(x) = 2x f(x)=2x
根据前面求得的牛顿迭代公式:
x ( n + 1 ) = x n − f ( x ) f ′ ( x ) = x n − x n 2 − n 2 x n = 1 2 ( x n + n x n ) 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)=xnf(x)f(x)=xn2xnxn2n=21(xn+xnn)

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

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值