本博客已经迁往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\)时, 有

$$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)}$$

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\), 对于\(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.

[3]. Wikipedia: Newton's Method

牛顿方法(Newton-Raphson Method)的更多相关文章

  1. 牛顿迭代法(Newton's Method)

    牛顿迭代法(Newton's Method) 简介 牛顿迭代法(简称牛顿法)由英国著名的数学家牛顿爵士最早提出.但是,这一方法在牛顿生前并未公开发表. 牛顿法的作用是使用迭代的方法来求解函数方程的根. ...

  2. 牛顿迭代法(Newton's Method)

    牛顿迭代法(Newton's Method) 简介 牛顿迭代法(简称牛顿法)由英国著名的数学家牛顿爵士最早提出.牛顿法的作用是使用迭代的方法来求解函数方程的根.简单地说,牛顿法就是不断求取切线的过程. ...

  3. 牛顿方法(Newton's Method)

    在讲义<线性回归.梯度下降>和<逻辑回归>中我们提到可以用梯度下降或梯度上升的方式求解θ.在本文中将讲解另一种求解θ的方法:牛顿方法(Newton's method). 牛顿方 ...

  4. Newton's Method

    在求最优解时,前面很多地方都用梯度下降(Gradient Descent)的方法,但由于最优步长很难确定,可能会出现总是在最优解附近徘徊的情况,致使最优解的搜索过程很缓慢.牛顿法(Newton's M ...

  5. 牛顿法(Newton's Method)

    Newton's Method 在求最优解时,前面很多地方都用梯度下降(Gradient Descent)的方法,但由于最优步长很难确定,可能会出现总是在最优解附近徘徊的情况,致使最优解的搜索过程很缓 ...

  6. 【cs229-Lecture4】Newton’s method

    之前我们在求Logistic回归时,用的是梯度上升算法,也就是要使得似然函数最大化,利用梯度上升算法,不断的迭代.这节课引出牛顿方法,它的作用和梯度上升算法的一样的,不同的是牛顿方法所需的迭代次数更少 ...

  7. 机器学习-牛顿方法&指数分布族&GLM

    本节内容 牛顿方法 指数分布族 广义线性模型 之前学习了梯度下降方法,关于梯度下降(gradient descent),这里简单的回顾下[参考感知机学习部分提到的梯度下降(gradient desce ...

  8. 小菜学习设计模式(三)—工厂方法(Factory Method)模式

    前言 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Method) ...

  9. 浅谈C++设计模式之工厂方法(Factory Method)

    为什么要用设计模式?根本原因是为了代码复用,增加可维护性. 面向对象设计坚持的原则:开闭原则(Open Closed Principle,OCP).里氏代换原则(Liskov Substitution ...

随机推荐

  1. ubuntu下firefox无法看bilibili解决方案

    突然发现,在ubuntu中使用firefox打开bilibili网站无法加载视频与弹幕,在网上搜到的可能的问题为:linux下的firefox使用的flash player是老版本,bilibili不 ...

  2. Qt学习笔记:Qt中使用Lua

    今天想在Qt中使用Lua进行数据操作 结果发现在Qt中使用Lua的文章较少,虽然很简单,但是还是写出来提供入门,顺便记录一下 我使用的是Qt Creator 3.4.2,用的是mingw4.9.2的编 ...

  3. atitit.设计模式(2) -----查表模式/ command 总结

    atitit.设计模式(2) -----查表模式/ command 总结 1. 应用场景: 1 1. 取代一瓦if else 1 2. 建设api rpc风格的时候儿. 1 3. 菜单是Command ...

  4. paip.python NameError name 'xxx' is not defined\

    paip.python NameError name 'xxx' is not defined\ 导入一个另一个文件里面的函数的时候儿,出孪这个err #这个仅仅导入孪file...要使用里面的fun ...

  5. Singleton模式和Mono-State模式

    类和实例 对于大多数的类,都可以创建多个实例.在需要和不需要时,创建和删除这些实例.该过程会伴随着内存的分配和归还. 同时,有一些类,应该仅有一个实例.该实例在程序启动/结束时被创建和删除. root ...

  6. gulp学习笔记3

    gulp系列学习笔记: 1.gulp学习笔记1 2.gulp学习笔记2 3.gulp学习笔记3 4.gulp学习笔记4 1.编译sass Sass 是一种 CSS 的开发工具,提供了许多便利的写法,大 ...

  7. 27Where条件筛选数据-简单(必学)-天轰穿sqlserver视频教程

    大纲:简单条件查询 模糊查询 复合条件 使用IN子句 BETWEEN子句 空值与非空值 优酷地址 代码下载地址 http://www.cnthc.com/?/article/160

  8. 今天踩过的坑——structs和spring

    struts 如果实现了CookiesAware了,还需要引用org.apache.struts2.interceptor.CookieInterceptor过滤器,否则拿不到值同时还要能看到这样的错 ...

  9. Jenkins 插件 CIFS

    Jenkis编译后我们往往需要把文件发布的其他的服务器上,典型的插件如下:   Publish Over CIFS Plugin   Publish Over FTP Plugin   Publish ...

  10. 那些在学习iOS开发前就应该知道的事(part 2)

    英文原文:Things I wish I had known before starting iOS development—Part 2 http://www.cocoachina.com/ios/ ...