一个简单的C二分法求函数,帮我看看哪里错啦`~给分

来源:百度知道 编辑:UC知道 时间:2024/05/25 19:12:05
#include<stdio.h>
#include<math.h>
main()
{
double fun( double );
double key( double , double );
double x1 , x2 , x ;
printf("\t请输入区间的(x1,x2):\n\t");
scanf("%lf",&x1);
printf("\t");
scanf("%lf",&x2);
x=key( x1 , x2 );
printf("\t采用二分法在所用的区间中的解为:%8.4f\n\t", x);
}

double fun( double x )
{
double y ;
y=x*x*x-x-1;
return y ;

}

double key( double x1 , double x2 )
{
int y0 , y1 , z ;
do
{
z=(x1+x2)/2 ;
y1=fun( x1 );
y0=fun( z );
if(y0*y1<0 )
{
x1=x1;
x2=z ;
}
else
{
x1=z ;
x2=x2;
}
}while(fabs(x1-x2)>10E-4);
return z ;

}
请看问题补充~~~~~~~~~~~~~在(1,1.5)区间上~~~~~~~~~~~~~~~~~是单调的~~而且在两侧`~~~~~~~~同志们`~~~求不出结果`~~~能生成目标文件~~

首先,二分法求方程的解是有前提的:方程所对应的曲线是单调的
你的方程x^3-x-1 并不单调
其次,假设你的方程是单调的,你是否应该判断输入的两个值位于可能解大致位置的两边,如果都位于X轴的一侧 我想应该是进入了死循环了吧
还有,就是尽量用while循环,少用do-while,看起来清晰

完毕 希望能对楼主有所帮助

http://zhidao.baidu.com/question/39397721.html

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

typedef double (*Fun)(double);

int sign(double x)
{
return x > 0.0 ? 1 : x < 0.0 ? -1 : 0;
}

double bisection(double a, double b, Fun f) //二分法
{
double m, fa, fb, fm;
fa = f(a); fb = f(b);
if(sign(fa) == sign(fb))
{
printf("error\n");
return 0.0;
}
while(fabs(b - a) > 1e-12)
{
m = a + (b - a) * 0.5;
fm = f(m);
if(sign(fa) == sign(fm))
{
a = m;
fa = fm;
}
else
{
b = m;
fb = fm;
} <