之前做过一道这种题目,但忘记把它写入博客,这里记录一下,代码和题目要求来自于此处
思想:在范围内进行查找,但受限于时间眼球,所以采用二分查找(nlogn),如果f1*f2小于0则表示该区间有值,然后取缩小范围进行查找……
#include <stdio.h>
#include <math.h>
int main()
{
double a = -10;
double b = 10;
double c;
double f1, f2, f3;
do
{
f1 = 2*pow(a, 3) - 4*pow(a, 2) + 3*a - 6; // 得出左端项的值f1
f2 = 2*pow(b, 3) - 4*pow(b, 2) + 3*b - 6; // 得出右端项的值f2
if (f1*f2 < 0) // 该条件成立说明该区间内有解
{
c = (a + b)/2; // 二分法取中间值
f3 = 2*pow(c, 3) - 4*pow(c, 2) + 3*c - 6;
if (f1*f3 < 0) // 说明左端项和中间项有解
{
b = c;
}
else // 说明右端项和中间项有解
{
a = c;
}
}
else
{
printf("该方程在此区间内无解!");
}
}
while (fabs(f3) > 1e-6);
printf("该方程在该区间内解为:%lf\n", c);
return 0;
}