牛顿迭代法求多元方程近似根

问题. 牛顿迭代法求ax^3+bx^2+cx+d=0在1附近的根。(系数由用户自己输入)

因为此方法本身是数学问题这里不做讨论也无须讨论。进入我们编程的主题。

记住此法核心的公式:x = x0-f(x0)/f'(x0).   我们令x1=f(x0),x2=f'(x0),这样写起来简洁明了。

步骤:  (1 )   在1附近任意找一个实数作为x0的初始值,如此题,我们取x=1,让x0=x,即x0=1.

            (2)  用初始值x0带入方程计算出f(x0)和f'(x0).即求出x1和x2; 

            (3)  带入上述核心公式计算出x = x0-f(x0)/f'(x0)的值。

            (4)  用新产生的x替换原来的x0,为下一次迭代做准备。

            (5)  若|x-x0|>=1e-5;则继续上述迭代,否则转(6).

            (6)  所得x即为多远方程ax^3+bx^2+cx+d=0的根,输出。

代码如下:(经过VS2008测试无误 测试输入1,2,3,4 输出:-1.65)

#include

#include

double getRes(double a,double b,double c,double d){

    doublex=1,x0,x1,x2;

    do{

        x0=x;

        x1=a*x*x*x+b*x*x+c*x+d;

        x2=3*a*x*x+2*b*x+c;

        x=x0-x1/x2;

    }while(fabs(x-x0)>=1e-5);

    return x;

}

int main(){

    doublea,b,c,d;

    scanf("%lf,%lf,%lf,%lf",&a,&b,&c,&d);

    printf("x=%.2lf\n",getRes(a,b,c,d));

    return 0;

}

 


你可能感兴趣的:(牛顿迭代法求多元方程近似根)