7-2 二分法求函数的零点 (30 分)

题目描述:

  • 有函数: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 }

总结:

分治思想,写递归函数的时候先写结束条件,有返回值的返回,不符合返回条件则返回递归函数本身(参数不一样)

上一篇:实验2-4-2 生成3的乘方表 (15 分)


下一篇:JS 1-10 Math 常用的对象