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

平方根函数Sqrt() 用来求一个数的平方根,如何实现这个函数?有多种方法,这里记录一种比较常用的牛顿迭代法


牛顿迭代法

牛顿迭代法(Newton·s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。

牛顿迭代法可以用来求方程近似的根。那么具体过程如何来求?假设
函数的f(x)f(x)的根为r,那么我们任选取点x0x_0作为r的初始近似值,进行以下的步骤:

  1. 过点(x0,f(x0))(x_0,f(x_0))做曲线的切线l,切线l的方程为:y=f(x0)+f′(x0)(x−x0)y=f(x_0)+f’(x_0)(x-x_0)
  2. 求得切线l与x轴的交点:x1=x0−f(x0)/f′(x0)x_1 = x_0-f(x_0)/f'(x_0),计算|x0−x1||x_0-x_1|的差值,若差值小于某个阈值,那么停止算法;若没有,以x1x_1为新的点继续重复上述第一步

计算过程中,xn+1x_{n+1}称为r的 n+1n+1 次近似值,而xn+1=xn−f(xn)/f′(xn)x_{n+1}= x_n-f(x_n)/f'(x_n)即称为牛顿迭代公式。

整个过程如下图( 图片摘自网络):

平方根函数

假设输入数是S,那么要求的平方根为x,满足S=x2S=x^{2} ,那么我们就可以定义函数f(x)=x2−Sf(x)=x^{2}-S,最终问题就转换为求方程 f(x)=0=x2−Sf(x)=0=x^{2}-S的根。

可知,f′(x)=2xf'(x)=2x,那么我们就可得到:xn+1=xn−(x2n−S)/2xnx_{n+1}=x_n-(x_n^2-S)/2x_n,于是得到了xn+1=(x2n+S)/2xnx_{n+1}=(x_n^2+S)/2x_n,当xn+1与xnx_{n+1}与x_n的差值小于某个阈值时,我们就得到方程的解,也就是S的平方根。

实现代码

int sqrt(int x)
{double ans = x;double del = 0.00001;double pre=0;while (fabs(ans - pre) >= del) {pre = ans;ans = (ans + x / ans) / 2;}return ans;
}

牛顿迭代法实现平方根函数相关推荐

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

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

  2. java 牛顿迭代算术平方根,牛顿迭代法求n方根

    一.简单推导 二.使用 借助上述公式,理论上可以求任意次方根,假设要求a(假设非负)的n次方根,则有xn=a,令f(x)=xn-a,则只需求f(x)=0时x的值即可.由上述简单推导知,当f(x)=0时 ...

  3. 用二分法定义平方根函数(Bisection method Square Root Python)

    Python里面有内置(Built-in)的平方根函数:sqrt(),可以方便计算正数的平方根.那么,如果要自己定义一个sqrt函数,该怎么解决呢? 解决思路:  1. 大于等于1的正数n的方根,范围 ...

  4. 【leetcode】第69题 x 的平方根 牛顿迭代法实现求平方根函数 C++

    这题属于简单题,但是因为学到了新的算法:牛顿迭代法(或牛顿法),这里做一下记录. 题目描述: 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类 ...

  5. 牛顿法求解1-100的平方根python_使用牛顿-拉弗森法定义平方根函数(Newton-Raphson method Square Root Python)...

    牛顿法(Newton's method)又称为牛顿-拉弗森法(Newton-Raphson method),是一种近似求解实数方程式的方法.(注:Joseph Raphson在1690年出版的< ...

  6. 二分查找算法应用-实现求平方根函数

    使用二分查找算法,尽可能的逼近求解平方根.算法的思路很简单:设置三个标识:left=0,right=x(x为输进去的被开方数) mid=(left+right)/2,然后用mid*mid-x的绝对值去 ...

  7. 牛顿迭代法python_python 牛顿迭代法

    使用牛顿迭代法求方程 在x附近的一个实根. 赋值X,即迭代初值:用初值x代入方程中计算此时的f(x)=(a * x * x * x + b * x * x + c * x + d)和f'(x)=(3 ...

  8. 如何用牛顿迭代法求平方根

    设函数y=f(x)在点x0的某个邻域内有定义,当自变量x在x0处有增量Δx,(x0+Δx)也在该邻域内时,相应地函数取得增量Δy=f(x0+Δx)-f(x0):如果Δy与Δx之比当Δx→0时极限存在, ...

  9. 二分法和牛顿迭代法求平方根(Python实现)

    求一个数的平方根函数sqrt(int num) ,在大多数语言中都提供实现.那么要求一个数的平方根,是怎么实现的呢? 实际上求平方根的算法方法主要有两种:二分法(binary search)和牛顿迭代 ...

  10. UPC Participate in E-sports(参加电子竞技)(Biginteger的平方根:二分或牛顿迭代法)

    Jessie and Justin want to participate in e-sports. E-sports contain many games, but they don't know ...

最新文章

  1. transport=websocket' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
  2. Python基础教程:super()方法详解
  3. Linux下必须知道的11个网络命令
  4. 1.cocos2dx内存管理和CCArray,CCMenuItem
  5. 关于迪杰斯特拉算法(最短路)的PHP实现
  6. 【LeetCode 629】K个逆序对数组
  7. 【Linux】安装x11vnc和xrdp,使用windows远程deepin
  8. 软件测试常见笔试面试题(二)
  9. 苹果iPad mini 6更多细节曝光:全面屏加持 搭载A14/A15芯片
  10. 排列组合算法之二: 01转换法_java改变后的c++改进版
  11. 超级*** 08鬼斧神工
  12. pyinstaller下载_《快速掌握PyQt5》第二十五章 Pyinstaller打包
  13. python机器学习库sklearn——数据预处理
  14. 软件调试第二版卷一硬件基础 pdf_2020全球C++及系统软件技术大会,C++之父领衔...
  15. js实现本地上传图片及预览
  16. 手写汉字识别数据集的预处理
  17. 上海科技大学计算机夏令营随笔
  18. 用matplotlib高仿同花顺的K线,成交量,MACD,KDJ(一)
  19. 小米电脑桌面没见计算机怎么办,手机屏幕太小?一分钟教会你小米手机投屏电脑方法,低调收藏!...
  20. VulnStack-ATTCK-3(红日靶场三)

热门文章

  1. rss opml_分享我的OPML,所有人都在做
  2. 计算机专业英文面试,计算机专业面试英文自我介绍
  3. 【微信开发相关】Java后端微信授权登录,获取微信openid以及用户信息
  4. 基于MATLAB的车牌识别系统
  5. poe摄像头与服务器连接系统图,PoE监控系统的4种连接方式!
  6. Deecamp冬令营小记
  7. jquery 图片裁剪 java,jQuery实现图片上传和裁剪插件Croppie
  8. overload java_Java方法重载Overload原理及使用解析
  9. Error:Some file crunching failed, see logs for details Error:Execution failed for task ':app:mergeDe
  10. http://blog.csdn.net/lwj103862095/article/details/7860648