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