本博客已经迁往http://www.kemaswill.com/, 博客园这边也会继续更新, 欢迎关注~
牛顿方法是一种求解等式的非常有效的数值分析方法.
假设\(x_0\)是等式的根\(r\)的一个比较好的近似, 且\(r=x_0+h\), 所以\(h\)衡量了近似值\(x_0\)和真实的根\(r\)之间的误差. 假定\(h\)很小, 根据泰勒展开式:
$$0=f(r)=f(x_0+h)\approx f(x_0)+hf'(x_0)$$
所以, 当\(f'(x_0)\)不接近\(0\)时, 有
$$h\approx -\frac{f(x_0)}{f'(x_0)}$$
所以新的近似值\(x_1\)应该取值:
$$x_1=x_0-\frac{f(x_0)}{f'(x_0)}$$
推广得
$$x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}$$
牛顿方法的几何解释很直观: 在当前点\(x_n=a\)处, 做函数\(f(x)\)的切线, 该切线的\(x\)轴截距就是\(x_{n+1}=b\), 然后再在该点处做切线...以此类推:
牛顿方法是二次收敛的: 令\(\epsilon_{n}=r-x_n\), 则\(\epsilon_{n+1}=\frac{-f"(\xi_n)}{2f'(x_n)}\epsilon_n^2\), 亦即在根\(r\)附近时, 牛顿方法的每次迭代基本上都可以使得近似解的有效数字增倍. 证明如下:
令等式的根为\(r\), \(f(x)\)二阶可导, 则根据泰勒展开式:
$$f(r)=f(x_n)+f'(x_n)(r-x_n)+R_1$$
其中\(R_1=\frac{1}{2!}f''(\xi_n)(r-x_n)^2\), 其中\(\xi_n\)位于\(x_n\)和\(r\)之间.
因为\(r\)是跟, 则:
$$0=f(r)=f(x_n)+f'(x_n)(r-x_n)+\frac{1}{2}f''(\xi_n)(r-x_n)^2$$
上式除以\(f'(x_n)\)可得
$$\frac{f(x_n)}{f'(x_n)}+(r-x_n)=\frac{-f''(\xi_n)}{2f'(x_n)}(r-x_n)^2$$
因为\(x_{n+1}\)的可以定义为:
$$x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}$$
所以
$$r-x_{n+1}=\frac{-f"(\xi_n)}{2f'(x_n)}(r-x_n)^2$$
$$\epsilon_{n+1}=\frac{-f"(\xi_n)}{2f'(x_n)}\epsilon_n^2$$
但是, 当初始值\(x_0\)不在\(r\)附近时, 牛顿方法可能会陷入局部极值或者死循环:
割线方法是牛顿方法的变种, 可以避免计算函数的导数.
初始时设置两个根的近似值\(x_0,x_1\), 对于\(n\leq1\):
$$x_{n+1}=x_n-\frac{f(x_n)}{Q(x_{n-1},x_n)}$$
其中
$$Q(x_{n-1},x_n)=\frac{f(x_{n-1})-f(x_n)}{x_{n-1}-x_n}$$
割线方法通过使用割线来替代牛顿方法中的切线, 来避免可能非常复杂的函数求导. 但是为了达到相同的精度, 割线方法可能多需要45%的迭代次数.
参考文献:
[1]. The Newton-Raphson Method
[2]. William H.Press, Saul A. Teukolsky, William T. Vetterling, Brain P.Flannery. Numerical Recipes: The Art of Scientific Computing. Section 9.4, Newton-Raphson Method Using Derivative.