c语言牛顿迭代法求算术平方根

数学解释

        牛顿迭代法的思路为,取一点x,在该点处画曲线的切线,交于x轴为x0,然后再在x=x0处画曲线的切线,一直下去,直到精度达到最初设定的要求为止。

        牛顿法的公式为x_{next}=x_0-\frac{f(x_0)}{f'(x_0)} ,下面给出这个公式的推导过程与理解思路

        对于解方程\sqrt{n}=x,即x^2=n,变为函数 f(x)=x^2-n

        结合函数图像,先找到一点x0,然后在曲线的该点画切线,切线斜率为f'(x0),该切线可这么表示:

        f(x)-f(x_0)=f'(x_0)(x-x_0)

        该切线交于x轴的点即为f(x)=0时x的值,将f(x)=0带入,得

        -f(x_0)=f'(x_0)(x-x_0),将f'(x0)除到左边就有x=x_0-\frac{f(x_0)}{f'(x_0)}

代码解释

int mySqrt(int x) {
    if(x<1) return 0;
    if(x==1) return 1;
    double r=0.001; //此处为设定的精度值,最好不要改变这个数
    double x0=x;
    double x1=x0/2+x/(2*x0);
    while (fabs(x1-x0)>r){
        x0=x1;
        x1=x0/2+x/(2*x0);
    }
    return (int)x1;
}

        由上式x=x_0-\frac{f(x_0)}{f'(x_0)},我们对f(x)求导时可得f'(x)=2x_0,并且还有

        f(x_0)=x_0^2-n

        带入后就有x_{next}=x_0-\frac{x^2-n}{2x_0}=\frac{x_0}{2}+\frac{n}{2x_0}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值