C++中的二分法程序

编写C++风格的程序,用二分法求解F(X)=0根什么是二分法?... 编写C++风格的程序,用二分法求解F(X)=0根
什么是二分法?
展开
 我来答
匿名用户
推荐于2018-04-15
展开全部
一般地,对于函数f(x),如果存在实数c,当x=c时f(c)=0,那么把x=c叫做函数f(x)的零点。
  解方程即要求f(x)的所有零点。
  先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],
  现在假设f(a)<0,f(b)>0,a<b
  ①如果f[(a+b)/2]=0,该点就是零点,
  如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,(a+b)/2=>a,从①开始继续使用
  中点函数值判断。
  如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2=>b,从①开始继续使用
  中点函数值判断。
  这样就可以不断接近零点。

像求:|f(x)|<10^-5 f(x)=2x^3-4x^2+3x-6
  #include"iostream"
  #include"stdio.h"
  #include"math.h"
  #define null 0
  double fx(double); //f(x)函数
  void main()
  {
  double xa(null),xb(null),xc(null);
  do
  {
  printf("请输入一个范围x0 x1:");
  std::cin>>xa>>xb; //输入xa xb的值
  printf("%f %f",xa,xb);
  }
  while(fx(xa)*fx(xb)>=0); //判断输入范围内是否包含函数值0
  do
  {
  if(fx((xc=(xa+xb)/2))*fx(xb)<0) //二分法判断函数值包含0的X取值区间
  {
  xa=xc;
  }
  else
  {
  xb=xc;
  }
  }
  while(fx(xc)>pow(10.0,-5)||fx(xc)<-1*pow(10.0,-5));//判断x根是否在接近函数值0的精确范围内
  printf("\n 得数为:%f",xc);
  }
  double fx(double x)
  {
  return(2.0*pow(x,3)-4.0*pow(x,2)+3*x-6.0);
  }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式