二分法求根

用二分法求下面的一元三次方程


在区间[-10, 10]上误差不大于的根。

用二分法求方程的根的基本原理是:若函数有实根,则函数曲线应当在根x*这一点上与x轴有一个交点,并且由于函数是单调的,在根附近的左右区间内,函数值的符号应当相反。利用这一特点,可以通过不断将求根区间二分的方法,每次将求根区间缩小为原来的一半,在新的折半后的区间内继续搜索方程的根,对根所在区间继续二分,直到求出方程的根为止。


该方法的关键在于要解决如下两个问题:


1)如何对区间进行二分,并在二分后的左右两个区间中确定下一次求根搜索的区间?

假设区间端点为x1和x2,则通过计算区间的中点x0,即可将区间[x1, x2]二分为[x1, x0]和[x0, x2]。这时,为了确定下一次求根搜索的区间,必须判断方程的根在哪一个区间内,由上图可知方程的根所在区间的两个端点处的函数值的符号一定是相反的。也就是说,如果f(x0)与f(x1)是异号的,则根一定在左区间[x1, x0]内,否则根一定在右区间[x0, x2]内。

2)如何终止这个搜索过程?即如何确定找到了方程的根?

对根所在区间继续二分,直到,即|f(x0)|≈0时,则认为x0是逼近函数f(x)的根。

输入格式:

"%f,%f"


输出格式:

"x=%6.2f\n"


输入样例:

0,4

#include <stdio.h>
#include <math.h>

float Delta = 0.000001f;
float Function(float x)
{
	float f = x*x*x - x - 1;
	return f;
}

int main()
{
	float x_Left, x_Right, f_Left, f_Right;
	scanf_s("%f,%f", &x_Left, &x_Right);
	f_Left = Function(x_Left);
	f_Right = Function(x_Right);
	if (fabs(f_Left) < Delta)
		printf("x=%6.2f\n", x_Left);
	if (fabs(f_Right) < Delta)
		printf("x=%6.2f\n", x_Right);
	if (fabs(f_Left)>Delta && fabs(f_Right)>Delta)
	{
		float x_New;
		float f_New;
		do
		{
			x_New = (x_Left + x_Right)*0.5f;
			f_New = Function(x_New);
			if (f_Left*f_New < 0)
				x_Right = x_New;
			if (f_Right*f_New < 0)
				x_Left = x_New;
		} while (fabs(f_New) >= Delta);
		printf("x = %6.2f\n", x_New);
	}
	return 0;
}


  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值