当前位置 博文首页 > dadalaohua的博客:【学习笔记】牛顿迭代法求立方根

    dadalaohua的博客:【学习笔记】牛顿迭代法求立方根

    作者:[db:作者] 时间:2021-07-27 11:51

    【学习笔记】牛顿迭代法求立方根

    简介

    介绍使用牛顿迭代法求立方根 x 3 {\sqrt[3]{x}} 3x ?的C语言实现和公式的推导。

    代码

    float CubeRoot(float num)
    {
        float x = num;
        float error = 1e-5;
        
        while (fabs(num - (x * x * x)) >= error)
        {
            x = (2 * x + num / (x * x)) / 3.0;
        }
        
        return x;
    }
    

    代码很简单,就是使用牛顿迭代法计算,然后判断是否达到想要的精度,达到精度后退出。

    这里精度设置是0.00001,可以根据自己实际情况调整。

    公式推导

    这里说明代码x = (2 * x + num / (x * x)) / 3.0;是如何得到的。

    牛顿迭代法公式如下。

    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?=xn??f(xn?)f(xn?)?

    我们计算立方根的公式:

    y = x 3 = x 1 3 y = {\sqrt[3]{x}} = x^{\frac 13} y=3x ?=x31?

    所以

    y 3 = x {{y}^3} = x y3=x

    构建以y为自变量的函数方程为

    f ( y ) = y 3 ? x = 0 f(y) = {{y}^3} - x = 0 f(y)=y3?x=0

    f ′ ( y ) = 3 y 2 = 0 f'(y) = {3}{y^2} = 0 f(y)=3y2=0

    f ( y ) f(y) f(y) f ′ ( y ) f'(y) f(y)带入

    y ? f ( y ) f ′ ( y ) = y ? y 3 ? x 3 y 2 y - \frac{f(y)}{f'(y)} = y - \frac{{{y}^{3}} - x}{{3}{y^2}} y?f(y)f(y)?=y?3y2y3?x?

    ? = 1 3 ( 2 y + x y 2 ) = \frac{1}{3}{(2y + \frac{x}{y^2})} =31?(2y+y2x?)