本博客已经迁往http://www.kemaswill.com/, 博客园这边也会继续更新, 欢迎关注~
牛顿方法是一种求解等式的非常有效的数值分析方法.
1. 牛顿方法
假设(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)时, 有
$$happrox -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)}$$
2. 牛顿方法的几何解释
牛顿方法的几何解释很直观: 在当前点(x_n=a)处, 做函数(f(x))的切线, 该切线的(x)轴截距就是(x_{n+1}=b), 然后再在该点处做切线...以此类推:
3. 牛顿方法的收敛性:
牛顿方法是二次收敛的: 令(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)附近时, 牛顿方法可能会陷入局部极值或者死循环:
4. 割线方法(Secant Method)
割线方法是牛顿方法的变种, 可以避免计算函数的导数.
初始时设置两个根的近似值(x_0,x_1), 对于(nleq1):
$$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.