Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2539918
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2010-08-02 15:06:54

用二分法求下面方程在(-10,10)之间的根。

2X3 – 4X2 + 3X - 6 = 0

二分法,也就是我们常说的折半查找法,此算法主要用于对一组排列有序的数字进行查找,因为每查询一次,即可排除一半。因此算法运行的效率是很高的。其主要原理是,查找中间值的大小,如果大于指定的值,即可确定:需要找的值,或者求的值在前半部分,此时进行将中间值赋值给最大值,继续折半查找。如果中间值小于指定的值,即可确认:查找的值,或者求的值在后半部分,此时进行将中间值赋值给最小值。继续进行折半查找。根据此原理。程序代码如下:

#include <stdio.h>
#include <math.h>

double F1(double);
int main(int argc, int *argv[])
{
    double lit = pow(10,-5);
    double min = -10, max = 10;
    double mid = (max + min) / 2;
    double result;
    
    while (min < max && fabs(F1(mid)) > lit)
    {
          if (F1(mid) > 0)
          {
             max = mid;
          }
          if (F1(mid) < 0)
          {
             min = mid;
          }
          mid = (max + min) / 2;
    }
    
    if (fabs(F1(mid)) < lit)
    {
       result = mid;
       printf("the result is :%f\n",result);
    }
    else
    {
        printf("error:no result!\n");
    }
    
    system("pause");
    return 0;
}

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


经过程序运行,求出方程的根为:2。
阅读(7150) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~