轻松理解牛顿迭代法且用其求平方根

牛顿迭代法概述

牛顿迭代法(Newton’s method)又称为牛顿-拉弗森方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

牛顿迭代公式

rrrf(x)=0f(x)=0f(x)=0的根,选取x0x_0x0作为rrr的初始近似值。

过点(x0,f(x0))(x_0, f(x_0))(x0,f(x0))做曲线y=f(x)y=f(x)y=f(x)的切线L1L_1L1L1:y=f(x0)+f′(x0)(x−x0)L_1:y = f(x_0)+f'(x_0)(x-x_0)L1:y=f(x0)+f(x0)(xx0),则L1L_1L1xxx轴交点的横坐标x1=x0−f(x0)f′(x0)x_1 = x_0 - \frac{f(x_0)}{f'(x_0)}x1=x0f(x0)f(x0),称x1x_1x1rrr的一次近似值。

过点(x1,f(x1))(x_1, f(x_1))(x1,f(x1))做曲线y=f(x)y=f(x)y=f(x)的切线L2L_2L2L2:y=f(x1)+f′(x1)(x−x1)L_2:y = f(x_1)+f'(x_1)(x-x_1)L2:y=f(x1)+f(x1)(xx1),则L2L_2L2xxx轴交点的横坐标x2=x1−f(x1)f′(x1)x_2=x_1-\frac{f(x_1)}{f'(x_1)}x2=x1f(x1)f(x1),称x2x_2x2rrr的二次近似值。

重复以上过程,得rrr的近似值序列,其中,xn+1=xn−f(xn)f′(xn)x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}xn+1=xnf(xn)f(xn)称为rrrn+1n+1n+1次近似值,上式称为牛顿迭代公式

举个例子

题目

用牛顿迭代法求出2\sqrt{2}2的二次正近似值(初始近似值x0=2x_0=2x0=2)。

解答

x=2⇒x2−2=0x=\sqrt{2}\Rightarrow x^2-2=0x=2x22=0

f(x)=x2−2f(x)=x^2-2f(x)=x22

f′(x)=2xf'(x)=2xf(x)=2x

rrrf(x)=0f(x)=0f(x)=0的正根,x0=2x_0=2x0=2作为rrr的初始近似值。

f(x)f(x)f(x)过点A(2,f(2))⇒A(2,2)A(2,f(2))\Rightarrow A(2,2)A(2,f(2))A(2,2)

过点AAA作曲线y=f(x)y=f(x)y=f(x)的切线L1L_1L1

L1:y=f(x0)+f′(x0)(x−x0)L_1:y = f(x_0)+f'(x_0)(x-x_0)L1:y=f(x0)+f(x0)(xx0)

y=2+2⋅2⋅(x−2)y=2+2\cdot2\cdot(x-2)y=2+22(x2)

y=4x−6y=4x-6y=4x6

L1L_1L1xxx轴交点的横坐标x1x_1x1:

0=4x1−60=4x_1-60=4x16

x1=32x_1=\frac{3}{2}x1=23

或者直接用牛顿迭代公式:

x1=x0−f(x0)f′(x0)=2−22−22⋅2=2−12=32x_1=x_0-\frac{f(x_0)}{f'(x_0)}=2-\frac{2^2-2}{2\cdot2}=2-\frac{1}{2}=\frac{3}{2}x1=x0f(x0)f(x0)=222222=221=23

x1x_1x1rrr的一次近似值。

在这里插入图片描述


f(x)f(x)f(x)过点B(32,f(32))⇒B(32,14)B(\frac{3}{2}, f(\frac{3}{2}))\Rightarrow B(\frac{3}{2},\frac{1}{4})B(23,f(23))B(23,41)

过点BBB作曲线y=f(x)y=f(x)y=f(x)的切线L2L_2L2

L2:y=f(x1)+f′(x1)(x−x1)L_2:y = f(x_1)+f'(x_1)(x-x_1)L2:y=f(x1)+f(x1)(xx1)

y=14+2⋅32⋅(x−32)y=\frac{1}{4}+2\cdot\frac{3}{2}\cdot(x-\frac{3}{2})y=41+223(x23)

y=3x−174y=3x-\frac{17}{4}y=3x417

L2L_2L2xxx轴交点的横坐标x2x_2x2:

0=3x2−1740=3x_2-\frac{17}{4}0=3x2417

x2=1712=1.41666666˙x_2=\frac{17}{12}=1.4166666\dot{6}x2=1217=1.41666666˙

或者直接用牛顿迭代公式:

x2=x1−f(x1)f′(x1)=32−(32)2−22⋅32=32−112=1712x_2=x_1-\frac{f(x_1)}{f'(x_1)}=\frac{3}{2}-\frac{(\frac{3}{2})^2-2}{2\cdot \frac{3}{2}}=\frac{3}{2}-\frac{1}{12}=\frac{17}{12}x2=x1f(x1)f(x1)=23223(23)22=23121=1217

x2x_2x2rrr的二次近似值。

在这里插入图片描述

综上所述,2\sqrt{2}2的二次正近似值为1712=1.41666666˙\frac{17}{12}=1.4166666\dot{6}1217=1.41666666˙

用牛顿迭代法求平方根的Java程序实现

假设你想用程序实现求出aaa的正平方根。

已知三个公式:

  1. 牛顿迭代公式 xn+1=xn−f(xn)f′(xn)x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}xn+1=xnf(xn)f(xn)
  2. f(x)=x2−af(x)=x^2-af(x)=x2a
  3. f′(x)=2xf'(x)=2xf(x)=2x

由三个公式可得:

xn+1=xn−xn2−a2xnx_{n+1}=x_n-\frac{x_n^2-a}{2x_n}xn+1=xn2xnxn2a

xn+1=xn2+a2xnx_{n+1}=\frac{x_n^2+a}{2x_n}xn+1=2xnxn2+a

xn+1=xn+axn2x_{n+1}=\frac{x_n+\frac{a}{x_n}}{2}xn+1=2xn+xna

因此,容易编写出以下程序:

public class Sqrt {public static void main(String[] args) {System.out.println(sqrt(2));}private static double sqrt(double a) {if (num < 0)throw new IllegalArgumentException();double err = 1E-15;double cur = a;while (Math.abs(a - cur * cur) > err)//精度越来越高cur = (cur + a / cur) / 2;return cur;}
}

参考资料

  1. 牛顿迭代法_百度百科
  2. 如何通俗易懂地讲解牛顿迭代法求开方?数值分析? - 知乎
  3. 牛顿迭代法快速寻找平方根
  4. 牛顿求根法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用cookie信息,完成自动登录

在做爬虫任务的时候&#xff0c;我们常常会遇到很多网页必须登录后&#xff0c;才可以开放某些页面。所以登录是爬取网页的第一步。但是&#xff0c;通过post表单&#xff08;包含用户名和密码&#xff09;的方法&#xff0c;对于那些不需要输入比较复杂的验证码的网页&#xf…

Spring Cloud 学习笔记(1 / 3)

Spring Cloud 学习笔记&#xff08;2 / 3&#xff09; Spring Cloud 学习笔记&#xff08;3 / 3&#xff09; ---01_前言闲聊和课程说明02_零基础微服务架构理论入门03_第二季Boot和Cloud版本选型04_Cloud组件停更说明05_父工程Project空间新建06_父工程pom文件07_复习Depend…

后缀树/后缀数组

字典树&#xff1a;https://blog.csdn.net/hebtu666/article/details/83141560 后缀树&#xff1a;后缀树&#xff0c;就是把一串字符的所有后缀保存并且压缩的字典树。 相对于字典树来说&#xff0c;后缀树并不是针对大量字符串的&#xff0c;而是针对一个或几个字符串来解决…

kaggle(02)-房价预测案例(基础版)

房价预测案例 Step 1: 检视源数据集 import numpy as np import pandas as pd读入数据 一般来说源数据的index那一栏没什么用&#xff0c;我们可以用来作为我们pandas dataframe的index。这样之后要是检索起来也省事儿。 有人的地方就有鄙视链。跟知乎一样。Kaggle的也是个处…

如何使用github中的pull request功能?

* pull request是社会化编程的象征&#xff0c;通过这个功能&#xff0c;你可以参与到别人开发的项目中&#xff0c;并做出自己的贡献。pull request是自己修改源代码后&#xff0c;请求对方仓库采纳的一种行为*–《github入门与实践》 下面具体说一下github中使用pull reque…

「假装努力」

有多少人在「假装努力」&#xff1f; 又有多少人在「真正成长」&#xff1f; 再努力努力 回想起当年毕业后&#xff0c;在北京和室友合租的日子。 那时&#xff0c;我在工作&#xff0c;室友在培训。 一天&#xff0c;我下班回来&#xff0c;听见他在电话里和家人争吵&…

如何阅读论文?

本文主要讲述了如何才能高效的阅读一篇论文&#xff01;&#xff01;

数据结构课上笔记8

串的概念&#xff1a;串&#xff08;字符串&#xff09;&#xff1a;是由 0 个或多个字符组成的有限序列。 通常记为&#xff1a;s ‘ a1 a2 a3 … ai …an ’ ( n≥0 )。 串的逻辑结构和线性表极为相似。 一些串的类型&#xff1a; 空串&#xff1a;不含任何字符的串&#x…

Numpy 入门

Numpy 入门 Numpy简介 官网链接&#xff1a;http://www.numpy.org/NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算&#xff0c;此外也针对数组运算提供大量的数学函数库 Numpy的基本功能 快速高效的多维数组对象ndarray用于对数组执行元素级计算以…

数据结构课上笔记10

树 树的定义&#xff1a;树(Tree)是 n(n≥0)个结点的有限集。若 n0&#xff0c;称为空树&#xff1b;若 n > 0&#xff0c;则它满足如下两个条件&#xff1a; (1) 有且仅有一个特定的称为根 (Root) 的结点&#xff1b; (2) 其余结点可分为 m (m≥0) 个互不相交的有限…

pandasStudyNoteBook

pandas 入门培训 pandas简介 - 官网链接&#xff1a;http://pandas.pydata.org/ - pandas pannel data data analysis - Pandas是python的一个数据分析包 , Pandas最初被作为金融数据分析工具而开发出来&#xff0c;因此&#xff0c;pandas为时间序列分析提供了很好的支持 …

二叉树最长路径

分析&#xff1a; 暴力求每一段距离也可。 对于以本节点为根的二叉树&#xff0c;最远距离有三种可能&#xff1a; 1&#xff09;最远路径来自左子树 2 &#xff09;最远路径来自右子树&#xff08;图示与左子树同理&#xff09; 3&#xff09;最远路径为左右子树距离根最远…

判断完全二叉树

完全二叉树的定义: 一棵二叉树&#xff0c;除了最后一层之外都是完全填充的&#xff0c;并且最后一层的叶子结点都在左边。 https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91/7773232?fraladdin 百度定义 思路&#xff1a;层序遍历二叉树 如果…

判断二叉搜索树

二叉查找树&#xff08;Binary Search Tree&#xff09;&#xff0c;&#xff08;又&#xff1a;二叉搜索树&#xff0c;二叉排序树&#xff09;它或者是一棵空树&#xff0c;或者是具有下列性质的二叉树&#xff1a; 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于…

剑指offer_01

文章目录[toc]第一章 面试流程1.1 面试官谈面试1.2 面试3种形式1.3 面试的3个环节第一章 面试流程 1.1 面试官谈面试 初级的程序员谈算法和数据结构&#xff0c;高级的程序员谈项目经验要对公司近况和项目情况了解不要紧张&#xff0c;不要马上上手写代码 1.2 面试3种形式 …

求完全二叉树的结点个数

第一次见这个题&#xff0c;看时间小于O(N)。。。。。 只能是二分啊。 但是怎么二分&#xff0c;条件是什么&#xff0c;真的想不到。 后来知道了&#xff0c;我们要找最深一层最右边那个结点。借此确定结点个数。 我们知道&#xff0c;满二叉树的结点个数和深度是有公式的&a…

剑指offer_03

文章目录第三章 高质量代码1.1 面试官谈高质量代码1.2 代码的规范性1.3 代码的完整性1.4 代码的鲁棒性第三章 高质量代码 1.1 面试官谈高质量代码 代码应该考虑异常状况和垃圾回收问题&#xff0c;不能忽视边界情况变量&#xff0c;函数命名应该要统一&#xff0c;备注要恰到…

先序中序后序两两结合重建二叉树

遍历是对树的一种最基本的运算&#xff0c;所谓遍历二叉树&#xff0c;就是按一定的规则和顺序走遍二叉树的所有结点&#xff0c;使每一个结点都被访问一次&#xff0c;而且只被访问一次。由于二叉树是非线性结构&#xff0c;因此&#xff0c;树的遍历实质上是将二叉树的各个结…

先序中序数组推后序数组

二叉树遍历 所谓遍历(Traversal)是指沿着某条搜索路线&#xff0c;依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一&#xff0c;是二叉树上进行其它运算之基础。 从二叉树的递归定义可知&#xff0c;一…

剑指offer_06

文章目录第六章 面试中的各项能力1.1 面试官谈能力1.2 沟通能力和学习能力1.3 知识迁移能力1.4 抽象建模能力1.5 发散思维能力第六章 面试中的各项能力 1.1 面试官谈能力 1.礼貌平和&#xff0c;不卑不亢的和面试官沟通&#xff1b;逻辑清楚&#xff0c;详略得到的介绍项目经…