转载时请声明出处:https://blog.csdn.net/NDHuaErFeiFei/article/details/88374814

转载处:

转自:https://blog.csdn.net/wumuzi520/article/details/7026808

给定一个正数a,不用库函数求其平方根。

设其平方根为x,则有x2=a,即x2-a=0。设函数f(x)= x2-a,则可得图示红色的函数曲线。在曲线上任取一点(x0,f(x0)),其中x0≠0那么曲线上该点的切线方程为

      (1-1)

求该切线与x轴的交点得

          (1-2)

因为1-2式中x0作为分母,所以在之前限定了一下初始值不要选0。那么得到的这个与x轴的交点其实是最终要求得的x的一次逼近,我们再以这个x基准继续迭代就可以求得更逼近的x,至于逼近到什么时候才算完,这个取决于你自己设定的精度。整个过程的迭代只需要几步就可以求得最终的结果。

代码如下:

double NewtonMethod(double fToBeSqrted)
{double x = 1.0;//while(fabs(x*x-fToBeSqrted) > 1e-5)//注意:转载的原文此处有错误,原文的abs在c中是取绝对值和取整数,应该用fabs{x = (x+fToBeSqrted/x)/2;}return x;
}

当然,从图中可以看出,当你所取的初始值的横坐标在红色曲线与x轴交点右边,即比最终的结果大时,比如选初始值x=a,我们可以将while语句里面的abs(x*x-fToBeSqrted)直接换成fToBeSqrted -x*x,这样可以省去abs的运算。当然这不能确保效率的提升,因为初始值的选取直接影响了迭代的次数。

原创处:

博主NDHuaErFeiFei自己的分析,转载时请声明:

为什么是x=1.0?

因为当x为小数(0-1)时,第一得到的x1会成倍增加,就不是逼近了,甚至会超过原来的数fToBeSqrted。

取x=1.0的局限:

求平方根时:fToBeSqrted必须大于等于1,不能求小数的平方根。

原理分析:

x0=1.0时,求出x1,(x1,0)相当于x0在f(x)处的切线和x轴的交点,  x2,x3、x4等类似。

(x2)^2、(x3)^2、(x4)^2等逼近于fToBeSqrted,但是永远小于等于fToBeSqrted。为什么?

如:m=x0,n=fToBeSqrted/x。明显(m+n)/2<=(fToBeSqrted+x0)。也就是(x0,0)和(fToBeSqrted,0)的

中点为((x0+fToBeSqrted)/2   ,  0);(x0,0)和(fToBeSqrted/x0,0)的

中点为((x0+fToBeSqrted/x0)/2   ,  0);由于fToBeSqrted/x0<=fToBeSqrted    (注x1、x2、x3时可取<);

明显(x0+fToBeSqrted)/2>=(x0+fToBeSqrted/x0)/2。当xn越来越来越大时:根号下(fToBeSqrted)-xn

就越来越正向趋近于;fToBeSqrted/xn-根号下(fToBeSqrted)也越来越趋向于0。这就是逼近的原理:xn越来越

                    逼近平方根,fToBeSqrted/xn也越来越逼近平方根。

平方根函数sqrt和牛顿迭代法相关推荐

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

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

  2. mysql 立方根函数_Java实现牛顿迭代法求解平方根、立方根

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 牛顿迭代法python_python 牛顿迭代法

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

  10. 三次函数求近似解(牛顿迭代法/二分法)

    三次函数求近似解 牛顿迭代法.二分法 本人大一学生,学习C语言刚刚三个月,分享一下自己学习的题目和方法,欢迎大佬们批评指正! 首先解释一下牛顿迭代法和二分法的原理: (参考同济大学高等数学第七版上册 ...

最新文章

  1. SpringBoot + Elasticsearch7.6实现简单查询及高亮分词查询
  2. 其实win10要比win7的安全性强很多
  3. boost::fibers::unbuffered_channel用法的测试程序
  4. java.awt.Graphics2D 生成图片--个人章的方法
  5. 【liferay】6、关于liferay中使用requestMapping映射地址提交表单
  6. MySQL事务及字符集介绍
  7. 【Servlet】Servlet体系结构
  8. python3携程多任务_python3之携程yield及greenlet
  9. Windows11上找BitLocker密钥
  10. 网易云到“网抑云”:分析用户运营的指标监控和召回机制
  11. 腾讯 TAPD DevOps 开放生态最佳实践
  12. 苹果6s照相快门声音设置_苹果手机内置录屏技巧,还能加入自己的声音,花3秒钟设置一下...
  13. 判断Linux环境是否装了NCCL,安装cuDNN和NCCL指南
  14. 删除 linux 回收站内容,Linux删除文件实现回收站功能
  15. 2021邵阳市地区高考成绩排名查询,2021邵阳最新高中排名前十
  16. CK11N改标准价格
  17. 微信网页授权校验文件
  18. 阿里云购买域名实名认证及网站备案
  19. 【求证】 网上配镜靠谱吗?
  20. 计算机网络基础知识--TCP/IP协议、IP分组、TCP传输

热门文章

  1. 如何通过NPS分析,全方位帮助企业实现客户体验升级?
  2. C++ fstream详解
  3. 文学类容易发表的期刊或者学报有哪些?
  4. 信息流短视频时长多目标优化
  5. sql语句的插入方式总结
  6. 为什么计算机和网络设备都需要接地,一个实例全面讲解机房如何做防雷接地?...
  7. XTU OJ 1395
  8. 单摄像机对于二维平面的测量
  9. [jbb0523整理]压缩感知中的数学知识:NP-hard问题
  10. matlab 脉冲压缩算法,雷达脉冲压缩matlab