二分法、牛顿迭代法求sqrt()

原创 2013年12月04日 16:10:28

给定一个正数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 nt_sqrt(double n)
{
	double x = 1.0;
	while(abs(x*x-n) > 1e-5)
	    x = (x+n/x)/2;
	return x;
}

http://blog.csdn.net/wumuzi520/article/details/7026808

惊人的代码(求1/sqrt())http://www.cnblogs.com/pkuoliver/archive/2010/10/06/1844725.html



二分法:

int sqrt(int x)
{
    int left = 1, right = x / 2;
    int mid;
    int last_mid; //记录最近一次mid
    if (x < 2) return x;
    while(left <= right)
    {
        mid = left + (right - left) / 2;
        if(x / mid > mid)   // 不要用x > mid * mid,会溢出
        {
            left = mid + 1;
            last_mid = mid;
        }
        else if(x / mid < mid)
        {
            right = mid - 1;
        }
        else
        {
            return mid;
        }
    }
    return last_mid;
}


double sqrt(double n) //用二分法
{
    if(abs(n-(1e-5))<0) //小于0的按照你需要的处理
        return n;
    double mid,last;
    double low,up;
    low=0,up=n;
    mid=(low+up)/2;
    do
    {
        if(mid*mid>n)
            up=mid;
        else
            low=mid;
        last=mid;
        mid=(up+low)/2;
    }
    while(abs(mid-last) > eps); //精度控制
    return mid;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【算法王道】二分法和牛顿迭代法求平方根

若求x的平方根,就是在0到x所有正值之间肯定有个guess^2约等于x,然后这个误差值epsilon可以自定义。 二分法很简单,我就直接贴代码了 void sqrtBI(float x,float...

计科答疑_牛顿迭代法求函数解_二分法求函数解_输出以下图形

计科答疑_牛顿迭代法求函数解_二分法求函数解_输出以下图形 用牛顿迭代法求下面方程在 1.5 附近的根:2*x*x*x-4*x*x+3*x-6=0   看名字,高大上,也不知道是谁起的。反正自己做...

java 利用牛顿迭代法求平方根和立方根,不使用Math类

最近遇到一个题目,就是不使用Math方法去求解一个数的立方根和平方根,搜索了好多,现在记录下自己掌握的方法。 首先,在编码之前,我们得熟悉 什么是牛顿迭代法。下面我为大家找了两处链接。大家可以去看一下...

牛顿迭代法求平方根

/* 试建立一个类 TRI,给出三角形的三边长,求三角形的面积.规定只能调用类自身的函数求平方根(不能使用库函数 sqrt()).具体要求如下: (1) 私有数据成员 double a,b,c...

刷清橙OJ--A1094.牛顿迭代法求方程的根

问题: A1094. 牛顿迭代法求方程的根 时间限制:1.0s   内存限制:256.0MB   总提交次数:1330   AC次数:514   平均分:52.12 【问题描述】   给定三...

【机器人学】机器人开源项目KDL源码学习:(2)牛顿拉普森迭代法求机器人的数值解

KDL的牛顿拉普森迭代法求机器人逆解

牛顿迭代法求平方根

求平方根可以用二分的思路。二分其实也挺快的,不过还有更快的算法求平方根——牛顿迭代法。 如果我们要求a的平方根,首先令f(x)=x^2-a;那么我们的目的就是求得x使得f(x)=0; 在网上找了一张图...
  • w20810
  • w20810
  • 2015-10-11 10:13
  • 1451

java 实现 牛顿迭代法求开方

牛顿迭代法开方
  • lonyw
  • lonyw
  • 2017-02-13 21:09
  • 276

每天一道编程题(八)----------牛顿迭代法求根式

今天面试土豆的时候问了一道题目是说求一个数的根式,本来回答的是利用二分法求解,可是人家问了说你这个怎么取上界下界,且数值        ,又由于我们不需要保存前一次的值,那么迭代就很容易的写出如下的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)