这是一个求根很牛皮的一个方法, 迭代几次后精度也变得非常的高了.
假设我们求√2的值, 用牛顿迭代法. 大致过程就是随便选取一个自认为离根比较近的, 离谱点也没事, 假如选x = 4, 然后不断进行如下操作: 不断令 x = x - f(x)/f’(x); (f(x) = x^2 - a(a = 2));
所以就是: x = 4 - 14 / 8 = 2.25 ;
再一次: x = 1.56944..
再一次 : x = 1.42189..
再一次 : x = 1.41423..
然后是可以发现是很精确的.
给出求一个平方根和立方根的代码:(原理以及公式都是上面所说的那些)
db square(db a,int y)
{
db x1 = y,x2 = 0;
while(fabs(x1 - x2) > eps){
x2 = x1;
x1 = x1 - (x1*x1-a)/(2*x1);
}
return x1;
}
db cube(db a,int y)
{
db x1 = y,x2 = 0;
while(fabs(x1 - x2) > eps){
x2 = x1;
x1 = x1 - (x1*x1*x1-a)/(3*x1*x1);
}
return x1;
}
void solve()
{
db x;
cin >> x ;
printf("%.2f\n",square(x,1.0));
printf("%.2f\n",cube(x,1.0));
}