逐步搜索法

今天学习了一个根的搜索的方法叫逐步搜索法:可以用来搜索某一范围内的根。
主要依据:(1)f(x)=0的跟不好求,但若给出x的值,则对应的函数值f(x)好求
(2)若某一区间左右两边界处的函数值异号,则此区间内有根。
//适用这区间只有一个根且要求函数要连续
执行过程:以搜索范围的两边界为起点,以h为步长,一步步向另一端迈进。以每一步的起点和终点为边界,每一步迈过的区域为一个子区间,判断该子区间两边界的函数值是否异号,等于0,还是同号。异号则在这个子区间内有区间。同号则检查下一个子区间。若某边界处函数值为0,则为根。
我这课本通过设置x的精度要求epsilon,来设置步长h=2*epsilon,当然,我觉得你可以自己直接设置你的步长。其次,我的课本是C语言,我这里改成了C++语言。最后还有就是为了确保我赋予的值没有出错,这里面我每赋一次值,我就输出了(最近总是存在赋值错误)
代码如下:

/*逐步搜索法*/
#include<iostream>
using namespace std;
double f(double x);
int main(void)
{
	double a,b,epsilon,x,h,begin,end;
	cout<<"请输入x的精度要求:";
	cin>>epsilon;
	cout<<"epsilon="<<epsilon<<endl;
    cout<<"请输入搜索区间的边界a,b:";
    cin>>a>>b;
    cout<<a<<" "<<b<<endl;;
	h=2*epsilon;
	if(f(b)==0)
	x=b;
	else
	for(begin=a,end=a+h;begin<b;begin=end,end+=h)
	{
		if(end>b)
		end=b;
		if(f(begin)==0)
		{
			x=begin;
			break;
		}
		if(f(begin)*f(end)<0)
		{
			x=(begin+end)/2;
			break;
		}
	}
	cout<<"\n方程f(x)=0的根x="<<x<<endl;
}
double f(double x)
{
	return(x*x*x+4*x*x-10);
    
}

运行结果如下:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值