squrex-牛顿法解

Implementint sqrt(int x).

Compute and return the square root of x.

class Solution {
public:
    int sqrt(int x) {
        if (x == 0) 
            return 0;  
        double lastY = 0;  
        double y = 1;  
        while (y != lastY)  
        {  
            lastY = y;  
            y = (y + x / y) / 2;  
        }  
        return (int)(y);
    }
};

求a^(1/2), 即求x^2-a=0的方程的根。

对于这个题目来说,显然求的不是精确解,而是近似解。因此我们可以通过牛顿法来解决这个问题,当然也可以用二分法搜索,这里我就不说明。现在我们来梳理一下如何用牛顿法来获得这个方程的近似解。

简单来说,牛顿迭代法的本质 就是利用函数的切线与x轴的焦点,来不停的逼近方程的解,即当f(x)=0的x的值。

这里f(x)=x^2-a, 可知f(x)'=2x,也就是其导函数。

取随机点x_0 , 则该点表示为(x_0 , (x_0)^2 -a),其斜率为2x_0

则切线与x轴的交点为(2x_0/(-(x_0)^2-a), 0), 

然后我们在此点 垂直于x轴,做垂线,并且求出 其与f(x)的交点x_1, 重复迭代 直至收敛

迭代方程:

                x_(n+1) = x_n + f(x_n)/f'(x_n)



猜你喜欢

转载自blog.csdn.net/u011926899/article/details/79450722