只有一个错误。f2 = f3;这句话,你赋值的是一个值,而不是一个表达式。需要改成f2 = (2*m*(m-2)+3)*m-6; 同理f1=f3也不对。
而且,感觉你这算法也不对。求不出来值,是不是2分法跨度太大查不到。可以用弦截法。
float f(float x)
{
float y;
y=(2*x*(x-2)+3)*x-6;
return y;
}
float xpoint(float x1,float x2)
{
float y;
y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
return y;
} 增加这样两个函数
m=xpoint(a,b);替换 二分法m=(a+b)/2。 就有结果了
对了 还有问题。
do
{
m = xpoint(a,b);
f3 = (2*m*(m-2)+3)*m-6;
if (f1*f2 < 0)
{
a =m;
f1 = (2*m*(m-2)+3)*m-6;
// cout<
else
{
b =m;
f2 = (2*m*(m-2)+3)*m-6;
//cout<
} while (fabs(f3)>=1e-5);
底下的循环,也就是赋值缩小区间的过程,你写反了。f1*f2 < 0,这时a=m。f1*f2 >0,这时b=m。
有可能是死循环了,在关键的地方弄个打印,看看相关值,如果一直在打印,就是死循环