二分求函数零点

Posted by serrini on March 16, 2020

二分求函数零点

Question

有函数:

f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121

已知 f(1.5) > 0 , f(2.4) < 0 且方程 f(x) = 0 在区间 [1.5,2.4] 有且只有一个根,请用二分法求出该根

输出 该方程在区间[1.5,2.4]中的根。要求四舍五入到小数点后6位。

Answer

#include <cstdio>

//f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121
//已知 f(1.5) > 0 , f(2.4) < 0 且方程 f(x) = 0 在区间 [1.5,2.4] 有且只有一个根,请用二分法求出该根
//output:1.849016

double f(double x);

void ok(double a, double b);

int main()
{
	ok(1.5, 2.4);
	return 0;
}

double f(double x){
	return x*x*x*x*x - 15*x*x*x*x+ 85*x*x*x- 225*x*x+ 274*x - 121;
}

void ok(double a, double b){
	double mid,result;
	mid = a + (b-a)/2;
	result = f(mid);
	if (result > 0.000001)
	{
		ok(mid,b); //到右半边去找
	}
	else if (result < -0.000001)
	{
		ok(a,mid); //到左半边去找
	}else{
		printf("%.6lf\n", mid);
	}
}