题目描述:
- 有函数:f(x)=x5−15x4+85x3−225x2+274x−121 已知f(1.5)>0,f(2.4)<0 且方程f(x)=0 在区间[1.5,2.4] 有且只有一个根,请用二分法求出该根。
- 提示:判断函数是否为0,使用表达式 fabs(f(x)) < 1e-7
输入格式:
无。
输出格式:
该方程在区间[1.5,2.4]中的根。要求四舍五入到小数点后6位。。
输入样例:
无
结尾无空行
输出样例:
无
结尾无空行
分析:
•此题关键词:f(1.5)>0,f(2.4)<0 有且只有一个根 二分法 fabs(f(x)) < 1e-7
•题目要求找到并输出根的值(注意小数点后几位)
思路:
题目不难,带入区间中值mid计算与0的差值是否在1e-7以内,如果是则跳出递归,返回mid值,若不在范围内则通过正负来判断mid在零点左侧还是在零点右侧,若为正则在零点左侧,向右侧递归,反之则向左侧递归。
代码:
1 #include <iostream> 2 #include <cmath> 3 #include <iomanip> 4 using namespace std; 5 6 double f(double x) 7 { 8 return (pow(x,5) - 15*pow(x,4) + 85*pow(x,3) - 225*pow(x,2) + 274*x - 121); 9 } 10 11 double binary_sort(double start, double end) 12 { 13 // cout << start << " " << end << endl; 14 // getchar(); 15 double mid = (start + end)/2.000000; 16 if(fabs(f(mid)) < 1e-7) return mid; 17 else if(f(mid) > 0) binary_sort(mid, end); 18 else if(f(mid) < 0) binary_sort(start, mid); 19 } 20 21 int main() 22 { 23 double start = 1.5, end = 2.4; 24 double flag = binary_sort(start, end); 25 cout << fixed << setprecision(6) << flag << endl; 26 return 0; 27 }
总结:
分治思想,写递归函数的时候先写结束条件,有返回值的返回,不符合返回条件则返回递归函数本身(参数不一样)