二分法求解方程

版权声明:虽为原创,欢迎转载。 https://blog.csdn.net/m0_37655357/article/details/81834983

书中的问题是要求在误差范围内,求超越方程的解。

思路流程

程序源码:

//找出方程f(x) = 0在允许误差内的解
#include <stdio.h>
#include <math.h>

//允许的最大误差,float最多能表示小数点后6位,注意不要超过表示范围。
const float DEVIATION = 1e-5;

//解所在的可能区间
float x_left = -1.00;
float x_right = 0.00;

float my_function(float x_value);
int is_same_symbol(float x,float y);

int main(void)
{

	float x_middle = (x_left + x_right)/2;
	static int count_num = 0;

	while (fabs(my_function(x_middle)) > DEVIATION)
	{
		printf("\tx%d = %f...\n", count_num, x_middle);
		count_num++;

		if (is_same_symbol(my_function(x_middle), my_function(x_right)) == 1)
		{
			x_right = x_middle;	//迭代下一次判断的区间范围!!!
			x_middle = (x_middle + x_left) / 2;			
			continue;
		}
		else
		{
			x_left = x_middle;
			x_middle = (x_middle + x_right) / 2;			
			continue;
		}
	}
	printf("\tFind the answer!\n");
	printf("\tx%d = %f\n", count_num, x_middle);
	printf("\tf(x%d) = %f\n", count_num, my_function(x_middle));
	getchar();
	return 0;
}

/*
** 函数表达式,返回函数值
*/
float my_function(float x_value)
{
	return (float)pow(x_value, 3) - 8 * x_value - 4;
}
/*
** 判断两个数是否同号
** 同号返回1,异号返回0
*/
int is_same_symbol(float x, float y)
{
	return ((x>0&&y>0)||(x<0&&y<0)) ? 1 : 0;
}

运行结果:

猜你喜欢

转载自blog.csdn.net/m0_37655357/article/details/81834983
今日推荐