一个求实数立方根的C语言函数(牛顿迭代法)

一个求实数立方根的C语言函数(牛顿迭代法)

已知利用牛顿迭代法求方程F(x)=0的解的公式为X[n+1] = X[n] - F(X[n])/F'(X[n]),其中x[n]为第n次利用此公式求得值。

假如函数F(X) = X*X*X + a, 则根据牛顿迭代法第n+1次求方程F(x) = 0的解为X[n+1], 且X[n+1] = X[n] -  (X[n]*X[n]*X[n]+a)/3*X[n]*X[n]。

利用C语言实现求一个实数立方根的代码如下:

// -- cuberoot.c -- 求一个实数的立方根
typedef enum Boolean{FALSE, TRUE}Boolean;
 
/*
     函数: double CubeRoot(double)
     功能: 求解一个数的立方根
     算法: 牛顿法
     使用: 输入一个实数,输出输入实数的立方根
*/
double CubeRoot( const  double stuff)
{
     const  double  precision = 0.00001; /* 精度 */
     double nextX, currentX;
     double squareX;     /* 当前值 的平方 */
     double cubeX;       /* 下个解 的立方 */
     Boolean flag;
     
     currentX = stuff;  /* 初始化当前的值为X */
     
     if  (stuff == 0)
     {
         return  stuff;
     }
     else
     {
         do
         {
             squareX = currentX * currentX;
             nextX = (2*currentX + stuff/squareX) / 3;       /* 牛顿迭代公式 */
             cubeX = nextX*nextX*nextX;
             if  ( (cubeX - stuff < precision) && (cubeX - stuff > -precision))
             {
                 flag = TRUE;
             }  
             else
             {
                 flag = FALSE;
                 currentX = nextX;
             }
         } while (flag == FALSE);
     }
     
     return  nextX;
}

你可能感兴趣的:(【OJ编程】)