解:x1<=x0=(x1+x2)/2<=x2
程序:
#include<stdio.h>
#include<math.h>
int main()
{
float x0,x1,x2,fx0,fx1,fx2
do
{
printf("输入x1,x2的值:")
scanf("%f,%f", &x1, &x2)
fx1 = 2*x1*x1*x1 - 4 * x1*x1 + 3 * x1 - 6
fx2 = 2 *x2*x2*x2 - 4 *x2*x2 + 3 * x2 - 6
} while (fx1*fx2>0)
do
{
x0 = (x1 + x2)/2
fx0 = 2 * x0*x0*x0 - 4 * x0*x0 + 3 * x0 - 6
if (fx0*fx1 <0)
{
x2 = x0
fx2 = fx0
}
else
{
x1 = x0
fx1 = fx0
}
} while (fabs(fx0)>= 1e-5)
printf("x=%5.2f\n",x0)
return 0
}
这段代码是求解方程f(x)=0在区间[-10,10]上的根的数值解。方法的思想就是:一直选取区间中间的数值,如果发现中间的函数值与一侧函数值,异号,那么说明解在这个更小的区间中,采用eps=1e-5作为区间的极限大小,通过迭代的方法求解这个方程的数值解。
所以了解了上述思想,那么else if(f(a)*f(c)<0) b=c说明的是 f(a)和f(c)异号,那么使用b=(a+b)/2缩小迭代区间,继续迭代;同理else a=c说明f(a)和f(c)同号,那么使用a(a+b)/2缩小迭代区间,继续迭代!