牛顿迭代法 求 根

来源:互联网 发布:mac改语言 编辑:程序博客网 时间:2024/06/05 16:58

这里写图片描述
这里写图片描述
这是一个求根很牛皮的一个方法, 迭代几次后精度也变得非常的高了.

假设我们求√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));}
原创粉丝点击