提高项目18-二分法解方程

来源:互联网 发布:手机淘宝开店流程 编辑:程序博客网 时间:2024/06/06 23:51
任务和代码:二分法是在计算机科学中很重要的一种方法,用于查找产生二分查找算法,还可以用在很多场合。
  可以用二分法解方程。
  对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。
    假设要求方程f(x)=0的解,给定精确度ξ。其算法是:
    1 确定区间[a,b],验证f(a)·f(b)<0
    2 求区间(a,b)的中点c
    3 判断
    (1) 若f(a)·f(c)<0,则令b=c;
    (2) 若f(c)·f(b)<0,则令a=c.

    4 判断f(c)是否达到精确度ξ:即若┃f(c)┃<ξ,则x=c就是使f(x)接近零点的近似值,否则重复2-4.

/*文件名:main.c作者:小风景完成日期:2016.7.2问题描述:二分法是在计算机科学中很重要的一种方法,用于查找产生二分查找算法,还可以用在很多场合。  可以用二分法解方程。  对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。    假设要求方程f(x)=0的解,给定精确度ξ。其算法是:    1 确定区间[a,b],验证f(a)·f(b)<0    2 求区间(a,b)的中点c    3 判断    (1) 若f(a)·f(c)<0,则令b=c;    (2) 若f(c)·f(b)<0,则令a=c.    4 判断f(c)是否达到精确度ξ:即若┃f(c)┃<ξ,则x=c就是使f(x)接近零点的近似值,否则重复2-4.程序输出:零点的x值*/#include <stdio.h>#include <math.h>double Myfunction(double x);int TestRegion(double a,double b);double AnalysePoint(double a,double b);int main(){    double a;    double b;    double c = 0;    printf("请输入确定区间[a,b]\n");    scanf("%lf %lf",&a,&b);    if(TestRegion(a,b))    {        printf("该区间不存在零点!");        return -1;    }    c = AnalysePoint(a,b);    printf("当c = %lf,f(%.5f)无限接近零点",c,c);    return 0;}/*函数功能:求f(x)的值返回值:返回函数值*/double Myfunction(double x){    return (2*x*x*x - 5*x*x + 3*x - 6);}/*函数功能:测试零点是否在区间[a,b]上返回值:返回0表示存在,返回1表示不存在*/int TestRegion(double a,double b){    int result = 0;    if(Myfunction(a) * Myfunction(b) > 0)    {        result = 1;    }    return result;}/*函数功能:求f(x)接近零点时X的值返回值:返回f(x)*/double AnalysePoint(double a,double b){    double c = 0;    do    {        c = (a + b) / 2;        if(Myfunction(a) * Myfunction(c) < 0)        {            b = c;        }        if(Myfunction(c) * Myfunction(b) < 0)        {            a = c;        }    }    while(fabs(Myfunction(c)) > 1e-5);    return c;}

程序运行结果:







总结:通过函数调用来完成整体的能够,需要注意函数参数的传递以及返回值的含义,利用参数传递来完成计算。

0 0
原创粉丝点击