提高篇第20-21课第二题

本文通过一个具体的三次多项式方程,演示了使用二分法查找函数根的过程。文章详细介绍了如何确定搜索区间,并逐步逼近零点,直至达到预设精度。
#include <stdio.h>
#include <stdlib.h>
//第二题,二分法
/*1 确定区间[a, b], 验证f(a)·f(b)<0   
	2 求区间(a, b)的中点c
	3 判断
	(1) 若f(a)·f(c)<0, 则令b = c;
(2) 若f(c)·f(b)<0, 则令a = c.
	4 判断f(c)是否达到精确度ξ:即若┃f(c)┃<ξ,则x = c就是使f(x)接近零点的近似值,否则重复2 - 4.*/
//思路分析
//1.如何确定函数的a b区间是难点,此函数为三次函数,可知只有一个点使f(x)=0,故可以先找一个负数点,逐渐增加x令f(x)>0,从而确定一个基础的范围,但是如果是其他形式的函数可能有多个x轴交点
//上面的方法会漏解,大家有什么好的思路,还要先列方程求出范围么T T
double fbs(double);
double f(double);
int main()
{
	double temp = 0;//显然f(0)<0
	double a, b, c;
	while (f(temp) <= 0)
		temp=temp+1;//确定了基础的[a,b]范围为[0,temp]
	a = 0;
	b = temp;
	c = (a + b) / 2;
	//printf("a=%lf,b=%lf,c=%lf",a,b,c);
	while (fbs(f(c)) > 1e-5)
	{
		if (f(a)*f(c) < 0)
			b = c;
		else if (f(b)*f(c) < 0)
			a = c;
		c = (a + b) / 2;
	}
	printf("方程的解为%lf", c);
	return 0;
}
double f(double x)
{
	double result;
	result = x*x*x*2 - x*x*5 + x*3 - 6;
	return result;
}
double fbs(double x)
{
	double result;
	result = (x >= 0 ? x : -x);
	return result;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值