| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11172 人关注过本帖
标题:二分法求根问题
只看楼主 加入收藏
Jackie_9692
Rank: 2
等 级:论坛游民
帖 子:11
专家分:18
注 册:2012-7-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
二分法求根问题
#include<stdio.h>
#include<math.h>
/*int main()
{
    int a = -10,b = 10;
    flf = 2*a*a*a-4*a*a+3*a-6;
    frg = 2*b*b*b-4*b*b+3*a-6;
    mid = (a+b)/2;
    fmid = 2*mid*mid*mid-4*mid*mid+3*mid-6;
    if(flf*frg >= 0)
        printf("原方程在区间上无根或不止一根\n");
    else
    {
        while(flf*mid < 0)
        {
            
        }
    }
}*/
int main()
{
    float a = -10,b = 10,mid,fmid,flf,frg;
    float _x=20;
    int icount = 0;
    do
    {
        flf = 2*a*a*a-4*a*a+3*a-6;
        frg = 2*b*b*b-4*b*b+3*a-6;
        //if(flf*frg >= 0)
        //{
        //printf("原方程在区间上无根或不止一根\n");
        //break;
        //}
        mid = (a+b)/2;
        fmid = 2*mid*mid*mid-4*mid*mid+3*mid-6;
        if((flf*fmid) < 0)
        {
            b = mid;
        }
         if((fmid*frg)<0)
        {
            a = mid;
        }
         //if(fabs(fmid)< 1e-6)
            // break;
        _x= b-a;
        //printf("%f\n",_x);
        icount++;
        
    }while(_x > 1e-2);
        printf("The root is %f\n",(a+b)/2);
        printf("%d\n",icount);
}
//想用二分法求方程2x^3 - 4x^2 + 3x - 6 = 0 在[-10,10]上的根,达不到目的(改小1e-2也没用),跪求高手指点
搜索更多相关主题的帖子: include 二分法 
2012-07-29 10:15
小糊涂神c30
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:198
专家分:809
注 册:2012-4-25
收藏
得分:10 
#include<stdio.h>
#include<math.h>
#define f(x) (2*x*x*x-4*x*x+3*x-6)
#define MIN -10
#define MAX 10
#define exp 1e-7
int main(int argc,char *argv[])
{
    float mid=0;
    float start=MIN;
    float end=MAX;
    while(fabs(end-start)>exp)
    {
        if(f(start)*f(end)>0)
        {
            printf("函数在%d和%d之间没有根或者有多个根:",MIN,MAX);
            break;
        }
            else
                {
                    mid=(start+end)/2.0;   
                    if(f(start)*f(end)<0)
                        end=mid;
                        else
                            start=mid;
                }
    }
    if(fabs(end-start)<=exp)
        printf("方程的根是:%f",(end+start)/2);
    return 0;
}

想帮你试着写一下,但结果好像不对,还请大家指点一下,找出错!
2012-07-29 13:27
Jackie_9692
Rank: 2
等 级:论坛游民
帖 子:11
专家分:18
注 册:2012-7-21
收藏
得分:0 
回复 2楼 小糊涂神c30
本人觉得是精度问题,flf*frg<0这个条件无法判断两者是否异号,望大神指导
2012-07-29 16:01
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
你俩写的这是什么呀?

程序代码:
#include<stdio.h>

double f(double x)
{
    return 2 * x * x * x - 4 * x * x + 3 * x - 6;
}

double real_root(double (*fun)(double), double left, double right, double deviation)
{
    double x, y;
    if(deviation < 0) deviation = -deviation;
    while(right - left > deviation)
    {
        x = (left + right) / 2;
        y = fun(x);
        if(y >= 0) right = x;
        if(y <= 0) left = x;
    }
    return (left + right) / 2;
}

int main()
{
    printf("%lf\n", real_root(f, -10, 10, 1e-6));
    return 0;
}

 

重剑无锋,大巧不工
2012-07-29 17:24
Jackie_9692
Rank: 2
等 级:论坛游民
帖 子:11
专家分:18
注 册:2012-7-21
收藏
得分:0 
回复 4楼 beyondyf
谢谢版主了,一个用宏,一个用函数,函数指针有必要吗。难道double就把精度问题解决了?soga分数补上,谢啦!
2012-07-31 15:54
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
这不是必不必要的问题。以你现在的应用水平还体会不出各种方式的利弊及如何取舍。

你的代码问题不是出在精度上,而是二分法的构造就完全不对。别再问为什么不对,要么看书,要么看我的代码。

重剑无锋,大巧不工
2012-07-31 17:16
明月识字
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-1-22
收藏
得分:0 
回复 6楼 beyondyf
为什么不需要考虑根的个数?
2013-01-23 11:19
快速回复:二分法求根问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020539 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved