easy-algorithm-interview-an.../math/从泰勒展开到牛顿迭代.md

3.8 KiB
Raw Permalink Blame History

1.泰勒公式(Taylors Formula

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

给出泰勒公式的具体表达式:
如果函数f(x)在含有x_0的某个开区间(a,b)内具有(n+1)阶的导数,那么对任一x \in (a,b),有
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)

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

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

2.麦克劳林级数(Maclaurin)

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

3.泰勒展开的小结

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

4.牛顿法(Newtons method)

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

有前面的泰勒展开
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(x_0) + f'(x_0)(x-x_0)
如果我们将得到的新的坐标为x_{n+1},原来的坐标为x_n,通常x_{n+1}x_n更接近方程f(x)=0的解。因此利用新的坐标为x_{n+1}进行下一轮迭代。

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

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

5.牛顿迭代实例

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

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

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