zoukankan      html  css  js  c++  java
  • 牛顿方法(Newton-Raphson Method)

    本博客已经迁往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), 然后再在该点处做切线...以此类推:

    newton1

    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)附近时, 牛顿方法可能会陷入局部极值或者死循环:

    newton2 newton3

    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.

      [3]. Wikipedia: Newton's Method

  • 相关阅读:
    IM,游戏服务端 tcp 框架整理
    IronPython初体验和实战集合等类型转换和类型匹配
    C# 控件包
    ORM框架系列
    C# Excel或表格插件
    vue之修饰符
    vue之单表输入绑定
    vue之计算属性和侦听器
    vue之指令系统
    vue之用法
  • 原文地址:https://www.cnblogs.com/kemaswill/p/3505133.html
Copyright © 2011-2022 走看看