牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。牛顿迭代公式为:x[n+1] = x[n] - f(x[n])/f'(x[n]) 。那么求K的平方根的迭代公式为x[n+1] = 1/2*(x[n]+K/x[n])。
代码1:
double getroot(double y)
{
/**/
assert(y > 0);
double u,v;
u = y;
int i = 0;
while(i++ < 1000){
v = 0.5*(u + y/u);
if (fabs(u - v) < 0.1e-6)
break;
u = v;
}
return v;
}
代码2:
double getroot(double y,int N)
{
/**/
double u,v;
u = y;
int i = 0;
while(i++ < 1000){
v = double(N-1)/(N)*u + double(y)/(N*pow(u,N-1));
if (fabs(u - v) < 0.1e-6)
break;
u = v;
}
return v;
}
REF:
1,百度百科-牛顿迭代法