二分法求函數的零點


【題目描述】

有函數:

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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM