C语言:用弦截法求方程 f(x)=x3-5x2+16x-80=0 的根

用弦截法求方程 f(x)=x3-5x2+16x-80=0 的根。

1、方法分析

(1) 取两个不同点x1,x2,如果f(x1)和f(x2)符号相反,则(x1,x2)区间内必有一个根。如果f(x1)与f(x2)同符号,则应改变x1,x2,直到f(x1)、f(x2)异号为止。注意x1、x2的值不应差太大,以保证(x1,x2)区间内只有一个根。

(2) 连接(x1,f(x1))和(x2,f(x2))两点,此线(即弦)交x轴于x。

(3) 若f(x)与f(x1)同符号,则根必在(x,x2)区间内,此时将x作为新的x1。如果f(x)与f(x2)同符号,则表示根在(x1,x)区间内,将x作为新的x2。

(4) 重复步骤 (2) 和 (3) , 直到 |f(x)|<ε 为止, ε为一个很小的数, 例如 10-6\. 此时认为 f(x)≈0 。

2、N-S流程图

3、程序实现

#include
#include
double x,x1,x2;
double fx(double x)
{
    double c;
    c=x*x*x-5*x*x+16*x-80;
    return(c);
}
 
double root(double x1,double x2)
{
    do
    {
        double k,b;
        k=(fx(x1)-fx(x2))/(x1-x2);
        b=fx(x1)-k*x1;
        x=-b/k;
        if(fx(x)*fx(x1)>=0)
            x1=x;
        if(fx(x)*fx(x2)>=0)
            x2=x;
    }while(fx(x)<-0.00001||fx(x)>0.00001);
    return fx(x);
}
 
int main()
{
    while(fx(x1)*fx(x2)>=0)
    {
        printf("Input x1,x2:\n");
        scanf("%lf,%lf",&x1,&x2);
    }
    root(x1,x2);
    printf("%f\n",x);
    return 0;
}

4、运行结果

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部