求平方根的算法 牛顿迭代法和二分法

牛顿法:

public double sqr(double n){
        double x=n,y=0.0;
        while (Math.abs(x-y)>0.0001){
            y=x;
            x=(x+n/x)/2;
        }
        return x;
    }

设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。

过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。

 

二分法:

#define eps 0.00001
float SqrtByDichotomy(float n)
{
    if (n < 0)
    {
        return -1.0;
    }
    else
    {
        float low, up, mid, last;
        low = 0, up = (n>=1?n:1);
        mid = (low + up) / 2;
        do {
            if (mid*mid>n)
                up = mid;
            else
                low = mid;
            mid = (up+low)/2;
        } while (fabsf(mid - last) > eps);
        return mid;
    
    }

 

posted @ 2019-03-19 11:48  TheAnswerer  阅读(272)  评论(0编辑  收藏  举报