牛顿方法(Newton-Raphson Method)

时间:2023-01-28 19:09:15

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

牛顿方法(Newton-Raphson Method)

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

牛顿方法(Newton-Raphson Method) 牛顿方法(Newton-Raphson Method)

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&&num;39&semi;s Method

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

  5. 牛顿法&lpar;Newton&&num;39&semi;s Method&rpar;

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

  6. 【cs229-Lecture4】Newton’s method

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

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

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

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

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

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

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

随机推荐

  1. 控制器View的生命周期及相关函数是什么?你在开发中是如何用的?

    * 1.首先判断控制器是否有视图,如果没有就调用loadView方法创建:通过storyboard或者代码: * 2.随后调用viewDidLoad,可以进行下一步的初始化操作:只会被调用一次: * ...

  2. 输入三个整数,xyz,最终以从小到大的方式输出。利用中间变量

    <script>function bijiao(){ var x= parseFloat(document.getElementById("X").value); va ...

  3. AX在query中添加自己的函数

    在自己新建的Query中,想添加自己提供的函数,我们可以在系统的标准类SysQueryRangeUtil中添加自己写的函数 然后在Query的Range中按照格式(method())进行调用

  4. 有关hadoop分布式配置详解

    linux配置ssh无密码登录 配置ssh无密码登录,先要安装openssh,如下: yum install openssh-clients 准备两台linux服务器或虚拟机,设置两台linux的ho ...

  5. CI 模板解析器类

    模板解析器类可以解析你的视图文件中的伪变量.它可以解析简单的变量或者以变量作为标签的结构.如果你以前没有用过模板引擎,那么伪变量如下所示: <html><head><ti ...

  6. Windows远程桌面连接 出现身份错误 要求的函数不受支持

    原因 CVE-2018-0886 的 CredSSP 更新 将默认设置从"易受攻击"更改为"缓解"的更新. ## 官方更新 摘要 凭据安全支持提供程序协议 (C ...

  7. vue学习&colon;vue&plus;webpack的快速使用指南(新手向)

    一.vue有两种使用方式: 1.下载vue.js <script src="vue.js"></script> 2.使用npm npm install vu ...

  8. 小学生都看得懂的C语言入门&lpar;1&rpar;&colon; 基础&sol;判别&sol;循环

    c基础入门, 小学生也可以都看得懂!!!! 安装一个编译器, 这方面我不太懂, 安装了DEV-C++  ,体积不大,30M左右吧, 感觉挺好用,初学者够了. 介绍下DEV 的快键键: 恢复 Ctrl+ ...

  9. Codeforces Round &num;416 &lpar;Div&period; 2&rpar; B&period; Vladik and Complicated Book

    B. Vladik and Complicated Book time limit per test 2 seconds memory limit per test 256 megabytes inp ...

  10. java&period;util&period;concurrent&period;Future Basics

    Hereby I am starting a series of articles about future concept in programming languages (also known ...