今天学习了一个根的搜索的方法叫逐步搜索法:可以用来搜索某一范围内的根。
主要依据:(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);
}
运行结果如下: