标题:二分法求根~~函数错呢??
只看楼主
豆饼洋
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-9-15
结帖率:0
已结贴  问题点数:20 回复次数:3 
二分法求根~~函数错呢??
老师布置的一个作业,用二分法求方程在1附近的实根,下面是程序:
#include<iostream>
#include<cmath>
using namespace std;
float function(float y);
float eqRoot(float x1,float x2);
void main()
{    float x,x1,x2;
     float y1,y2;
     do
     {  cout<<"输入x1,x2"<<endl;
        cin>>x1>>x2;
        y1=function(x1);
        y2=function(x2);
     }while(y1*y2>=0);
     x=eqRoot(x1,x2);
     cout<<"root:"<<x<<endl;
     cout<<function(x)<<endl;
}
float function(float x)
{     float y=sin(x)+log(x)-exp(x)+x*x*x+1.260483;
      return y;
}
float eqRoot(float x1,float x2)
{     float x,y,y1;
      y1=function(x1);
      x=(x1+x2)/2;
      y=function(x);
      while(fabs(y)>=0.000001)
      {   
          if(y*y1>0)
          {x1=x;
           y1=y; }
          else
          x2=x;
        x=(x1+x2)/2;
        y=function(x);
      }
      return x;
}
      我输入的是0.3,1.8,可计算结果x是0.774878,y是-8.97993Xe(-8),但用计算器算是-0.6861,请问是哪错呢?
         谢谢
搜索更多相关主题的帖子: 二分法 include function void 
2012-09-15 13:33
天剑山
Rank: 4
等 级:业余侠客
威 望:3
帖 子:119
专家分:266
注 册:2012-8-3
得分:10 
二分法的跳出条件有误,不是fabs(y)>=0.000001,应该是函数值的乘积小于0
2012-09-15 14:11
豆饼洋
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-9-15
得分:0 
回复 2楼 天剑山
啊?while的表达式为真,则执行循环体语句~而我精度要求是10-6,如果fabs大于这个值则需要处理,即进入循环体语句;如果小于则满足我的要求,那么就跳出去输出了~
2012-09-15 14:36
小糊涂神c30
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:198
专家分:809
注 册:2012-4-25
得分:10 
你写的程序的思路到没有什么问题,我觉得问题出现在求函数求值上.....在c语言中三角函数中的x用弧度表示.....我做了一下,结果比你的要精确多了.....
2012-09-15 17:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-381459-1-1.html




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

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