平方根函数sqrt和牛顿迭代法
转载时请声明出处: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和牛顿迭代法相关推荐
- 牛顿迭代法实现平方根函数sqrt
转自利用牛顿迭代法自己写平方根函数sqrt 给定一个正数a,不用库函数求其平方根. 设其平方根为x,则有x2=a,即x2-a=0.设函数f(x)= x2-a,则可得图示红色的函数曲线.在曲线上任取一点 ...
- mysql 立方根函数_Java实现牛顿迭代法求解平方根、立方根
一.简介 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法. ...
- 牛顿法求解1-100的平方根python_使用牛顿-拉弗森法定义平方根函数(Newton-Raphson method Square Root Python)...
牛顿法(Newton's method)又称为牛顿-拉弗森法(Newton-Raphson method),是一种近似求解实数方程式的方法.(注:Joseph Raphson在1690年出版的< ...
- 用二分法定义平方根函数(Bisection method Square Root Python)
Python里面有内置(Built-in)的平方根函数:sqrt(),可以方便计算正数的平方根.那么,如果要自己定义一个sqrt函数,该怎么解决呢? 解决思路: 1. 大于等于1的正数n的方根,范围 ...
- 【leetcode】第69题 x 的平方根 牛顿迭代法实现求平方根函数 C++
这题属于简单题,但是因为学到了新的算法:牛顿迭代法(或牛顿法),这里做一下记录. 题目描述: 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类 ...
- 二分查找算法应用-实现求平方根函数
使用二分查找算法,尽可能的逼近求解平方根.算法的思路很简单:设置三个标识:left=0,right=x(x为输进去的被开方数) mid=(left+right)/2,然后用mid*mid-x的绝对值去 ...
- java 牛顿迭代算术平方根,牛顿迭代法求n方根
一.简单推导 二.使用 借助上述公式,理论上可以求任意次方根,假设要求a(假设非负)的n次方根,则有xn=a,令f(x)=xn-a,则只需求f(x)=0时x的值即可.由上述简单推导知,当f(x)=0时 ...
- 二分法和牛顿迭代法求平方根(Python实现)
求一个数的平方根函数sqrt(int num) ,在大多数语言中都提供实现.那么要求一个数的平方根,是怎么实现的呢? 实际上求平方根的算法方法主要有两种:二分法(binary search)和牛顿迭代 ...
- 牛顿迭代法python_python 牛顿迭代法
使用牛顿迭代法求方程 在x附近的一个实根. 赋值X,即迭代初值:用初值x代入方程中计算此时的f(x)=(a * x * x * x + b * x * x + c * x + d)和f'(x)=(3 ...
- 三次函数求近似解(牛顿迭代法/二分法)
三次函数求近似解 牛顿迭代法.二分法 本人大一学生,学习C语言刚刚三个月,分享一下自己学习的题目和方法,欢迎大佬们批评指正! 首先解释一下牛顿迭代法和二分法的原理: (参考同济大学高等数学第七版上册 ...
最新文章
- SpringBoot + Elasticsearch7.6实现简单查询及高亮分词查询
- 其实win10要比win7的安全性强很多
- boost::fibers::unbuffered_channel用法的测试程序
- java.awt.Graphics2D 生成图片--个人章的方法
- 【liferay】6、关于liferay中使用requestMapping映射地址提交表单
- MySQL事务及字符集介绍
- 【Servlet】Servlet体系结构
- python3携程多任务_python3之携程yield及greenlet
- Windows11上找BitLocker密钥
- 网易云到“网抑云”:分析用户运营的指标监控和召回机制
- 腾讯 TAPD DevOps 开放生态最佳实践
- 苹果6s照相快门声音设置_苹果手机内置录屏技巧,还能加入自己的声音,花3秒钟设置一下...
- 判断Linux环境是否装了NCCL,安装cuDNN和NCCL指南
- 删除 linux 回收站内容,Linux删除文件实现回收站功能
- 2021邵阳市地区高考成绩排名查询,2021邵阳最新高中排名前十
- CK11N改标准价格
- 微信网页授权校验文件
- 阿里云购买域名实名认证及网站备案
- 【求证】 网上配镜靠谱吗?
- 计算机网络基础知识--TCP/IP协议、IP分组、TCP传输