二分法求函数的零点

【题目描述】

有函数:

f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121

已知 f(1.5) > 0 , f(2.4) < 0 且方程 f(x) = 0 在区间 [1.5,2.4] 有且只有一个根,请用二分法求出该根。

【输入格式】

【输出格式】

该方程在区间[1.5,2.4]中的根。要求四舍五入到小数点后6位。

【分析】

我们每次枚举x,然后检验误差是否在误差范围内,在二分求解就可以了。

二分策略:从1.5和2.4开始。因为这个函数的最高项为奇数次,所以必定是单调递增或递减。

因为这个最高次项的系数为正数,所以就是单调递增,如果mid所对应得函数值>0那么就查右区间,反之就查左区间。

【代码】

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 double Pow(double x,int e){
 5     double ans=1;
 6     for(int i=1;i<=e;i++)ans*=x;
 7     return ans;
 8 }
 9 double f(double x){
10     return Pow(x,5)-15*Pow(x,4)+85*Pow(x,3)-225*Pow(x,2)+274*x-121;
11 }
12 double ef(double l,double r){
13     double mid=(l+r)/2;
14     if(abs(f(mid))<0.0000005) return mid;
15     if(f(mid)>0) return ef(mid,r);
16     else return ef(l,mid);
17 }
18 int main()
19 {
20     printf("%0.6lf\n",ef(1.5,2.4));
21     return 0;
22 }

猜你喜欢

转载自www.cnblogs.com/Dawn-Star/p/9172711.html