栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言之二分法解非线性方程

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言之二分法解非线性方程

设计要求:二分法解非线性方程:给定非线性方程(x*x*x-2.0*x-2=0),输入区间起点实数A和终点实数B ,输出满足最大误差(EPS=0.4E-14)时,最后的区间起点,区间终点,非线性方程根的近似值(使用双精度double类型精确到小数点后15位有效数)。

输入格式

m(整数,实验数据总数)

A1 B1(实数,区间起点与终点)

A2 B2(实数,区间起点与终点)

Am Bm(实数,区间起点与终点)

输出格式

A B X(输出满足最大误差(EPS=0.4E-14)时,最后的区间起点,区间终点,非线性方程根的近似值)

A B X(输出满足最大误差(EPS=0.4E-14)时,最后的区间起点,区间终点,非线性方程根的近似值)

A B X(输出满足最大误差(EPS=0.4E-14)时,最后的区间起点,区间终点,非线性方程根的近似值)

设计思路:该实验主要是两个函数,一个是funx用于计算出函数值,一个main函数用于二分法计算零点区间以及输入输出,对于funx函数的设计就是简单的传递参数x然后返回值是函数值,既x*x*x+2*x-2。对于主函数则是主要关于二分法的设计也就是在while循环里面,

while(1)

        {

            ay = funx(am[i]);

            by = funx(bm[i]);

            axb[i] = (am[i]+bm[i])/2;

            axby = funx(axb[i]);

            if(ay*axby<0) bm[i] = axb[i];  //f(a)·f(x)<0,此时我们有x*∈[a,x];

            if(ay*axby>0) am[i] = axb[i];  //f(a)·f(x)>0,此时我们有x*∈[x,b];

            if(ay*axby==0) bm[i] = axb[i]; //f(a)·f(x)=0,此时我们有x*∈[a,x];

            if((fabs(am[i]-bm[i]))/2<=0.4E-14) break;

        }

通过不断调用funx函数计算y值来判断零点与x中值位置关系,f(a)·f(x)<0,此时我们有x*∈[a,x];f(a)·f(x)>0,此时我们有x*∈[x,b];f(a)·f(x)=0,此时我们有x*∈[a,x];然后更新零点区间,再然后判断误差是否满足题目要求,如果无满足要求则继续进行二分法计算新的x区间。函数内采用三个double类型数组 am[m],bm[m],axb[m]来存储x值,其中am存的是起点值。bm是终点值,而axb则是中值;其对应的y值则是double ay = 0.00,by = 0.0,axby = 0.0。至此程序大致设计完成。

完整代码:

#include 
#include 
#include 


double funx(double x)
{
    double y = x*x*x-2.0*x-2;
    return y;
}//计算函数y值

int main()
{
    double ay = 0.00,by = 0.0,axby = 0.0;
    int m;
    scanf("%d",&m);
    double am[m],bm[m],axb[m];
    for(int i=0; i0) am[i] = axb[i];  //f(a)·f(x)>0,此时我们有x*∈[x,b];
            if(ay*axby==0) bm[i] = axb[i]; //f(a)·f(x)=0,此时我们有x*∈[a,x];
            if((fabs(am[i]-bm[i]))/2<=0.4E-14) break;//判断是否满足精度
        }
    }
    for(int i=0; i 

运行截图:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853453.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号