C语言 用二分法求下面方程在(-10,10)之间的根:2x^3-4x^2+3x-6=0

算法步骤: 如果要求已知函数 f(x) = 0 的根 (x 的解)

① 找出一个区间 [a, b],使得f(a)与f(b)异号。根据介值定理,这个区间内一定包含着方程式的根。

② 求该区间的中点m=(a+b)/2,并找出 f(m) 的值。

③ 若 f(m) 与 f(a) 正负号相同,则取 [m, b] 为新的区间, 否则取 [a, m]。

④ 重复第②步和第③步,直到得到理想的精确度为止。

介值定理:设函数f(x)在闭区间[a,b]上连续,且在这个区间的端点取不同值,f(a)=A,f(b)=B,则对于A与B之间的任意一个数C,在开区间(a,b)内至少存在一点c,使得f(c) = C。

#include <stdio.h>
#include <math.h>
int main()
{
	float x0 = -10;
	float x1 = 10;
	float m = 0;
	float f0 = 0,fm = 0;
	while (fabs(x0-x1)>0.01)
	{
		m = (x0+x1)/2;
		f0 = 2*x0*x0*x0 - 4*x0*x0 + 3*x0 -6;
		fm = 2*m*m*m - 4*m*m + 3*m -6;
		if (fm<0&&f0<0 || fm>0&&f0>0)
		{
			x0 = m;
		}
		else
		{
			x1 = m;
		}
	}
	printf("2x^3 - 4x^2 + 3x - 6的根为%f\n",m);
}

运行结果如下:

  • 12
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值