牛顿迭代法求平方根

问题

算法一书中,提到求平方根的方法sqrt用到了牛顿迭代法

牛顿迭代法

很多方程在求解根时比较困难(或者说求解精确根比较款那),并且我们经常会遇到求平方根无法直接得出结果的时候,牛顿迭代法就发挥了作用,牛顿迭代法的思想主要是利用切线方程无限逼近的特点求得结果,用于获取近似根。假设有f(x)=(x-2)^2,用牛顿迭代法求根((x-2)^2=0)过程如下:
在这里插入图片描述
在这里插入图片描述
选取一点做切线,然后作垂线交曲线于另一点,继续以另一点作为切点做切线,这样无限逼近即可求得函数的根。

用牛顿迭代法求平方根

可以利用牛顿迭代法求得数的开方,假设有数c,需要求得根号c。假设结果为result,则有
result^2 = c,即求函数f(x) = result^2-c的根

代码实现牛顿迭代法

    public static double sqrt(double c){
        if(c<0) return  Double.NaN;
        // 从该值开始迭代
        double result = c;
        // 定义一个极小值误差,当结果小于该误差时可以返回结果
        double err = 1e-15;
        // 函数为fx = x^2 - c 当小于一个极小值时可以认为是近似根,否则继续做切线
        while (Math.abs(Math.pow(result,2)-c)>err){
            result = (c/result+result)/2.0;
        }
        return  result;
    }

分析

函数为fx = x^2 - c,导数方程为f = 2xn,则过点(xn,xn^2-c)的切线方程为:y=2xn(x-xn)+xn^2-c,固切线与x轴交点为(xn+c/xn)/2,即对应代码中的result = (c/result+result)/2.0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值