二分法进阶应用——求方程根的近似解
今天开始恶补算法编程。以前只会最基础的折半查找。今天学会了如何利用折半查找求方程的根,模板如下:
#include<stdio.h>
#include<math.h>
const double eps=1e-5;
//首先定义待求解函数,注意返回值和参数都要是浮点类型
double f(double x)
{
return x*x-2;//求解根号2的近似解
}
//方程的根有个特点f(a)*f(b)<0 根x一定在区间(a,b)中
double BinaryF(double left,double right){
double mid;
while(right-left>eps){//一个坑,是大于
mid=(left+right)/2;
if(f(mid)>0){//单调递增的函数大于0,单调递减的函数小于0
right=mid; //根在区间[left,mid]内
}
else{
left=mid;//根在区间[mid,right]内
}
}
return mid;
}
int main(void){
double ans=BinaryF(1,2);
printf("%lf",ans);
}