【题目描述】
有函数:
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 }