新手求急救哪里错了 求救
//二分法求2x^3-4*a^2+3x-6=0的根
float a1,a2,a0,f;
a1=10.0;
a2=-10.0;
do
{
a0=(a1+a2)/2.0;
f=2*a0*a0*a0-4*a0*a0+3*a0-6;
if(f>0) //判断a0的值的正负
a1=a0;
else
a2=a0;
}
while (fabs(a0-a1)<=1e-5);
printf("%f",a0);
}
[解决办法]
编译错??算法错??
3次方程最多可有3个根吧,你这个怎么只求一个,即便多次使用这个函数求多个根也不行吧,对于3次方程是有3个单调区间的,你这个很可能会直接跳过两个根
[解决办法]
//二分法求2x^3-4*x^2+3x-6=0的根 !!! 这里应该是 4*x^2 吧 float a1,a2,a0,f; a1=10.0; a2=-10.0; do { a0=(a1+a2)/2.0; // !!!这里a0都已经赋值为 0 了 f=2*a0*a0*a0-4*a0*a0+3*a0-6; // !!!f=-6 if(f>0) //判断a0的值的正负 a1=a0; else a2=a0; } while (fabs(a0-a1)<=1e-5); printf("%f",a0); //!!! 肯定输出为 0 了
[解决办法]
//二分法求2x^3-4*a^2+3x-6=0的根
float a1,a2,a0,f;
a1=10.0;
a2=-10.0;
do
{
a0=(a1+a2)/2.0;
f=2*a0*a0*a0-4*a0*a0+3*a0-6;
if(f> 0) //判断a0的值的正负
a1=a0;
else
a2=a0;
}
while (fabs(a0-a1) <=1e-5); //[color=#FF0000]这里的判断反了,应该是大于等于[/color]
//[color=#FF0000]a0-a1也不合适,应该是a1-a2[/color]
printf( "%f ",a0);
}