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

牛顿迭代法概述

牛顿迭代法(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,一经查实,立即删除!

相关文章

map+DP leetcode446

如果数字序列由至少三个元素组成并且任何两个连续元素之间的差异相同&#xff0c;则称为算术序列。 例如&#xff0c;这些是算术序列&#xff1a; 1&#xff0c;3&#xff0c;5&#xff0c;7&#xff0c;9 7&#xff0c;7,7&#xff0c;7 3&#xff0c;-1&#xff0c;-5&am…

如何使用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的也是个处…

为什么Python中整型不会溢出

前言 本次分析基于 CPython 解释器&#xff0c;python3.x版本 在python2时代&#xff0c;整型有 int 类型和 long 长整型&#xff0c;长整型不存在溢出问题&#xff0c;即可以存放任意大小的整数。在python3后&#xff0c;统一使用了长整型。这也是吸引科研人员的一部分了&am…

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

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

「假装努力」

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

如何阅读论文?

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

贪吃蛇js

python都学不懂&#xff0c;c又不会&#xff0c;只能写写js来维持生活了。555555 js&#xff1a; window.onload function() {var wrap document.getElementsByClassName("wrap")[0];var uls document.getElementsByClassName("sbody")[0];var hand …

Android studio安装过程中入的坑的记录与记录

Android studio安装过程中入的坑的记录与记录 * 由于最近项目的需求&#xff0c;所以最近一直在配置安卓的开发环境&#xff0c;之前用的是Eclipse ADT的模式开发的&#xff0c;配置环境也花了一些时间&#xff0c;但是由于谷歌大力扶持它的亲儿子Android Studio&#xff0c;…

动态规划基础水题提纲

提纲 汉诺塔 汉诺塔&#xff1a;汉诺塔&#xff08;又称河内塔&#xff09;问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新…

数据结构课上笔记8

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

数据结构课上笔记9

数组&#xff1a;按一定格式排列起来的具有相同类型的数据元素的集合。 二维数组&#xff1a;若一维数组中的数据元素又是一维数组结构&#xff0c;则称为二维数组。 同理&#xff0c;推广到多维数组。若 n -1 维数组中的元素又是一个一维数组结构&#xff0c;则称作 n 维数组…

pySerial -- Python的串口通讯模块

pySerial Overview This module encapsulates the access for the serial port. It provides backends for Python running on Windows, Linux, BSD (possibly any POSIX compliant system), Jython and IronPython (.NET and Mono). The module named “serial” automatica…

串的堆分配实现

今天&#xff0c;线性结构基本就这样了&#xff0c;以后&#xff08;至少是最近&#xff09;就很少写线性基础结构的实现了。 串的类型定义 typedef struct {char *str;int length; }HeapString; 初始化串 InitString(HeapString *S) {S->length0;S->str\0; } 长度 …

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为时间序列分析提供了很好的支持 …

最大搜索子树

给定一个二叉树的头结点&#xff0c;返回最大搜索子树的大小。 我们先定义结点&#xff1a; public static class Node {public int value;public Node left;public Node right;public Node(int data) {this.value data;}} 分析&#xff1a; 直接判断每个节点左边小右边大是…