牛顿迭代法 解多次方程 example

来源:互联网 发布:js多选框选中触发事件 编辑:程序博客网 时间:2024/05/18 03:01

#include <stdio.h>

#include <math.h>

#define MN 10

int RN=1;

double X0[MN],Y0[MN],Z0[MN],X1[MN],ERR[MN];

double A0=0,B0=700,EPS=0.001;

double f(double x){return 100*(-5.775e-7)*x*x+100*(3.9083e-3)*x-213.71;} //y  = 100*(-5.775e-7)*x*x+100*(3.9083e-3)*x-213.71

double g(double x){return 200*(-5.775e-7)*x+100*(3.9083e-3);}            //y' = 200*(-5.775e-7)*x+100*(3.9083e-3)

 

int NEWTON()

{

    int k;

    if (f(A0)>0 ) 

        X0[0]=A0;

    else 

        X0[0]=B0;

    

    Y0[0]=f(X0[0]);

    Z0[0]=g(X0[0]);

    X1[0]=X0[0]-Y0[0]/Z0[0];

    ERR[0]=fabs(X1[0]-X0[0]);

    

    for(k=1;k<MN;k++)

    {

        X0[k]=X1[k-1];

        Y0[k]=f(X0[k]);

        Z0[k]=g(X0[k]);

        X1[k]=X0[k]-Y0[k]/Z0[k];

        ERR[k]=fabs(X1[k]-X0[k]);

        if(ERR[k]<EPS)break;

    }

    RN=k+1;

    return 0;

}

 

int ShowTable()

{

int K;

printf("===================================================/n");

printf(" K X0[K] Y0[K] Z0[K] ERR[K] /n");

printf("---------------------------------------------------/n");

for(K=0;K<RN;K++)

printf("/n %2d %10.6f %12.8f %12.8f %12.4e",K,X0[K],Y0[K],Z0[K],ERR[K]);

printf("/n--------------------------------------------------/n");

printf(" 解为=%12.8f",X0[RN-1]);

printf("/n==================================================/n");

return 0;

}

int  main()

{

NEWTON();

ShowTable();

return 1;

}

 

原创粉丝点击