记一笔牛顿迭代求平方根与立方根

假设现在所求为平方根,即函数 x^2 = input 的解,即 x^2 - input = 0 的解.

令 f(x) = x^2 - input

牛顿迭代公式:

 

即假设 X_n 为函数 f(x) 的第 n 次解,那么第 n + 1 次解就是 X_n - f(X_n) / f'(X_n)

其中 f'(x) 是 f(x) 的导函数.

当 abs(X_(n + 1) - X_n) < eps 时,X_(n + 1) 符合要求精度,即 X_(n + 1) 的平方在要求精度内满足 X_(n + 1) 的平方等于 input

 

 

求立方根是同理的,即 f(x) = x^3 - input.

 

//迭代法求立方根
    public double getCube(double input){
        double x = 1;
        double x1 = x - (x*x*x - input) / (3*x*x);
        while(x - x1 >0.000000001 || x - x1 < -0.000000001){        //判断精度
            x = x1;
            x1 = x - (x*x*x - input) / (3*x*x);
        }
        return x1;
    }
    
    //迭代法求平方根
    public double getSqrt(double input){
        double x = 1;
        double x1 = x - (x*x - input)/(2*x);
        while(x - x1 > 0.00000001 || x - x1 < -0.00000001){
            x = x1;
            x1 = x - (x*x - input)/(2*x);
        }
        return x1;
    }

 

牛顿迭代公式是怎么来的:

牛顿迭代法的原理是:https://blog.csdn.net/ccnt_2012/article/details/81837154

任意一点 x0,可得到点 (x0, f(x0)) 处的切线方程斜率为 f'(x0),设切线方程为 y = f'(x0)x + b,带入点坐标,解得 b = f(x0) - f'(x0)x0

故 切线方程为:y = f'(x0)x + f(x0) - f'(x0)x0,令 y = 0,解得 x = (f'(x0)x0 - f(x0)) / f'(x0) = x0 - f(x0) / f'(x0).

即 

posted @ 2021-09-21 19:18  rookie_Acmer  阅读(315)  评论(0编辑  收藏  举报