利用牛顿迭代法实现对一个整数开平方根(javascript实现)

  • 牛顿迭代法的简介

牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

  • 牛顿迭代公式的推导

r r r f ( x ) = 0 f(x)=0 f(x)=0 的根,选取 x 0 x_0 x0作为 x x x的初始近似值,过点 ( x 0 , f ( x 0 ) ) (x_0,f(x_0)) (x0,f(x0)) 做曲线 f ( x ) f(x) f(x)的切线 L L L L : y = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) L:y = f(x_0)+f^{'}(x_0)(x-x_0) L:y=f(x0)+f(x0)(xx0) ,则 L L L x x x 轴交点的横坐标 x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1 = x_0-\frac{f(x_0)}{f^{'}(x_0)} x1=x0f(x0)f(x0) x 1 x1 x1称 为 f ( x ) = 0 f(x)=0 f(x)=0 的一次近似值。过点 ( x 1 , f ( x 1 ) ) (x_1,f(x_1)) (x1,f(x1)) 做曲线 y = f ( x ) y=f(x) y=f(x) 的切线,并求该切线与x轴交点的横坐标 x 2 = x 1 − f ( x 1 ) f ′ ( x 1 ) x_2 = x_1-\frac{f(x_1)}{f^{'}(x_1)} x2=x1f(x1)f(x1) ,称 为 r r r的二次近似值。重复以上过程,得 r r r 的近似值序列,其中, x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1} = x_n-\frac{f(x_n)}{f^{'}(x_n)} xn+1=xnf(xn)f(xn) 称为 r r r n + 1 {n+1} n+1 次近似值,上式称为牛顿迭代公式。

  • 应用牛顿迭代法求解 x \sqrt{x} x

    f ( x ) = x 2 − c f(x)=x^2-c f(x)=x2c,取一个接近的值 x 0 x_0 x0作为初始值,则第一次近似值为 x 1 = x 0 − x 0 2 − c 2 x 0 x_1=x_0-\frac{x_0^2-c}{2x_0} x1=x02x0x02c,第二次近似值为 x 2 = x 1 − x 1 2 − c 2 x 1 x_2=x_1-\frac{x_1^2-c}{2x_1} x2=x12x1x12c,…,第 n + 1 {n+1} n+1次近似值为 x n + 1 = x n − x n 2 − c 2 x n x_{n+1}=x_n-\frac{x_n^2-c}{2x_n} xn+1=xn2xnxn2c,化简得出迭代公式: x n + 1 = 1 2 ( x n + c x n ) x_{n+1}=\frac{1}{2}(x_n+\frac{c}{x_n}) xn+1=21(xn+xnc).

  • javascript代码实现

 //求绝对值
        function abs(x) {
            return x > 0 ? x : -x;
        }
        //牛顿迭代法求解算术平方根算法
        function sqrt(x) {
        	if(x == 1)
        		return 1;
            var x0 = 1;       
            var x1;
            var x2 = x0;
            var y = x;
            //如果误差大于10^-6,就继续进行迭代
            while (abs(x2 - y) >= 1e-6) {
            //迭代核心公式
                x1 = (x0 + x/x0)/2;
                x2 = x0;
                y = x1;
                x0 = x1;
            }
            return x1;   
        }
        //输出100以内的所有整数的算术平方根
        for(var i = 1 ; i < 100 ; i++) {
            console.log(i + '的算术平方根的值为'+sqrt(i));
        }
  • 测试结果

测试结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值