牛顿迭代公式计算平方根立方根

牛顿迭代公式计算平方根立方根

如何用计算机来求一个数的平方根与立方根呢。可以采用牛顿迭代公式。相类似的还有GCD最大公约数算法,也即欧几里德算法,利用余数辗转相除。


牛顿迭代公式思路

用一个曲线的切线的根去表示一个曲线的根(根指一元方程的解,多元方程的解叫一组解,不叫根)。然后再从曲线上前一根处做切线,再求新切线的根,直到误差达到自己预期的精度范围内。


牛顿迭代公式

曲线为 y=f(x) ,在 x0 处的切线方程为 y=f(x0)+f(x0)×(xx0) 。要求f(x)=0的根,我们用在 x0 处f(x)的切线与x轴的交点做为曲线根的拟合。即用 f(x0)+f(x0)×(xx0)=0 的根做为曲线的根。

x=x0f(x0)f(x0)

此即为牛顿迭代公式。


平方根迭代公式

假设输入为N。我们要求 N=x 。可得 x2N=0 。此即为f(x)。即 f(x)=x2N 。其中N为输入的要求其平方根的数。 f(x)=2x 。代入牛顿迭代公式。可得:
x=x0x20N2x0=x02+N2x0 。此方程即可视为一个状态转移方程了。

xn=0.5×xn1+0.5×Nxn1

代码如下:

double Leetcode::sqrt(double d, double loss)
{
    double x=1.0;
    do{
        x=0.5*x+0.5*d/x;
    }while(fabs(x*x-d)>loss);

    return x;
}

立方根迭代公式

要求 N3=x ,即 x3N=0 ,即 f(x)=x3N 。可知 f(x)=3x2
代入牛顿迭代公式。

xn=xn1f(xn1)f(xn1)=xn1x3n1N3x2n1=2xn13+N3x2n1

代码如下:

double Leetcode::cubeRoot(double d, double loss)
{
    double x=1.0;
    do{
        x=2*x/3+d/(3*x*x);
    }while(fabs(x*x*x-d)>loss);

    return x;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值