题目来源与LeetCode算法题中的第69题,具体内容如下(点击查看原题):

    实现 int sqrt(int x) 函数。

    计算并返回 x 的平方根,其中 x 是非负整数。

    由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

  在本题的力扣官方题解中,第一次了解牛顿法,也被称为牛顿迭代法,说实话,一开始看到题解中直接给出的公式是懵逼的,公式如下:

$x_{k+1}=\frac{1}{2}\left [ x_{k}+\frac{x}{x_{k}} \right ]$

  主要来写一下这个公式的简要推倒过程:

  因为不是很会Matlab,在这里借另一个题解中老哥的图一用,个人认为这张图能说明地非常清楚的:

  假设输入的值为2,则需要求解的方程即为:

$x^{2}-2=0$

  先随便取函数上的一个点,则能表示出在这点处的切线方程,并根据此切线方程,求出此方程与 $y=0$  的交点,再根据这个交点的 $x$ 值求出原方程在这个点上的切线方程,并不断重复,可以发现,每次算得的与 $x$ 轴的交点值与实际方程的解越来越接近。当我们做更多次的循环,就能获得一个更接近实际值的解。

  那当我们输入的值为 $a$ 时,需要求解的公式即为:

$x^{2}-a=0$

  此时经过函数任意一点的斜率即为$2x$,设 $x$ 取值为 $x_{0}$ ,则经过 $x_{0}$ 点的切线方程可以表示为:

$y-f\left ( x_{0} \right )=2x_{0}\left ( x-x_{0} \right )$

  根据这个方程与 $y=0$ 的交点 $x$ 则为一个更接近实际值的取值,可以表示为:

$x=x_{0}-\frac{f\left ( x_{0} \right )}{2x_{0}}$

  当不考虑本题,一个更普适的牛顿迭代法的关系式可以表示为:

 $x_{n+1}=x_{n}-\frac{f\left ( x_{n} \right )}{f^{'}\left ( x_{n} \right )}$

  而针对本题,将题目中的方程带入公式,就可以得出文初题解中给出的公式,即:

$x_{k+1}=\frac{1}{2}\left ( x_{k}+\frac{a}{x_{k}} \right )$

  最后只需要根据本题的精度,设置一个满足这个精度的循环的跳出条件即可完成此题的算法实现,这里直接贴上了力扣给出的题解代码(注:原题解中少了一个return,在这里已经加上去了):

class Solution {
public int mySqrt(int x) {
if (x < 2) return x; double x0 = x;
double x1 = (x0 + x / x0) / 2.0;
while (Math.abs(x0 - x1) >= 1) {
x0 = x1;
x1 = (x0 + x / x0) / 2.0;
} return (int)x1;
}
}

牛顿迭代法的理解与应用( x 的平方根)的更多相关文章

  1. 牛顿迭代法解指数方程(aX + e^x解 = b )

    高中好友突然问我一道这样的问题,似乎是因为他们专业要做一个计算器,其中的一道习题是要求计算器实现这样的功能. 整理一下要求:解aX + e^X = b 方程.解方程精度要求0.01,给定方程只有一解, ...

  2. C语言之基本算法25—牛顿迭代法求方程近似根

    //牛顿迭代法! /* ============================================================ 题目:用牛顿迭代法求解3*x*x*x-2*x*x-16 ...

  3. NOIP2001 一元三次方程求解[导数+牛顿迭代法]

    题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...

  4. Atitit 迭代法  “二分法”和“牛顿迭代法 attilax总结

    Atitit 迭代法  "二分法"和"牛顿迭代法 attilax总结 1.1. ."二分法"和"牛顿迭代法"属于近似迭代法1 1. ...

  5. 牛顿迭代法实现平方根函数sqrt

    转自利用牛顿迭代法自己写平方根函数sqrt 给定一个正数a,不用库函数求其平方根. 设其平方根为x,则有x2=a,即x2-a=0.设函数f(x)= x2-a,则可得图示红色的函数曲线.在曲线上任取一点 ...

  6. sqrt (x) 牛顿迭代法

    参考: 0开方 是 0 1的开方式 1 2的开方式 1.4 3.的开方=(1.4+3/1.4)/2 牛顿迭代法:学习自 http://blog.csdn.net/youwuwei2012/articl ...

  7. 【清橙A1094】【牛顿迭代法】牛顿迭代法求方程的根

    问题描述 给定三次函数f(x)=ax3+bx2+cx+d的4个系数a,b,c,d,以及一个数z,请用牛顿迭代法求出函数f(x)=0在z附近的根,并给出迭代所需要次数. 牛顿迭代法的原理如下(参考下图) ...

  8. 基于visual Studio2013解决C语言竞赛题之0422牛顿迭代法

      题目

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

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

随机推荐

  1. ​知识图谱里的知识存储:neo4j的介绍和使用

      一般情况下,我们使用数据库查找事物间的联系的时候,只需要短程关系的查询(两层以内的关联).当需要进行更长程的,更广范围的关系查询时,就需要图数据库的功能. 而随着社交.电商.金融.零售.物联网等行 ...

  2. 知识图谱与机器学习|KG入门 -- Part2 建立知识图谱

    介绍 在本系列前面两篇文章中我一直在讨论Data Fabric,并给出了一些关于Data Fabric中的机器学习和深度学习的概念.并给出了我对Data Fabric的定义: Data Fabric是 ...

  3. Prism+MaterialDesign+EntityFramework Core+Postgresql WPF开发总结 之 基础篇

    本着每天记录一点成长一点的原则,打算将目前完成的一个WPF项目相关的技术分享出来,供团队学习与总结. 总共分三个部分: 基础篇主要争对C#初学者,巩固C#常用知识点: 中级篇主要争对WPF布局与美化, ...

  4. Python python 五种数据类型--字符串

    # python 字符串的初始化 var1 = 'hello,world' # python 字符串为不可变类型 var2= var1* 2 print(var1) #hello,world prin ...

  5. 【LeetCode】15.三数之和

    题目描述 1. 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意: ...

  6. python项目依赖的生成与使用

    1.cd到相关项目下并创建虚拟环境 ~$ pipenv install --dev 2.激活虚拟环境 ~$ pipenv shell 3.执行命令 ~$ pip freeze > require ...

  7. canvas 实现手机图案解锁

    参考☞: https://www.cnblogs.com/chenyingying0/ 先上效果图: 我是在 vue 里面实现js 文件 ,所以如果需要在vue 里面使用 可以将以下内容import  ...

  8. NodeMCU入坑指南-低成本打造零舍友闻风丧胆WiFi断网神器

    前言 最近对IoT方面比较感兴趣,所以在某宝上入手了一块NodeMCU的开发板,至于为什么我选择这块开发板呢?嘿嘿,当然是因为便宜啊

  9. P1198 [JSOI2008]最大数(线段树基础)

    P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...

  10. SpringMVC(二):使用注解开发

    本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!b站搜索狂神说或点击下面链接 https://space.bilibili.com/95256449?spm_id_from=33 ...