已知利用牛顿迭代法求方程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;
}