本文主要是介绍7-20 二分法求函数的零点 (10分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
7-20 二分法求函数的零点 (10分)
有函数:f(x)=x
5
−15x
4
+85x
3
−225x
2
+274x−121 已知f(1.5)>0,f(2.4)<0 且方程f(x)=0 在区间[1.5,2.4] 有且只有一个根,请用二分法求出该根。 提示:判断函数是否为0,使用表达式 fabs(f(x)) < 1e-7
输入格式:
无。
输出格式:x
该方程在区间[1.5,2.4]中的根。要求四舍五入到小数点后6位。。
输入样例:
无
输出样例:
无
//方法一
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;int f(double x){double f=pow(x,5)-15*pow(x,4)+85*pow(x,3)-225*pow(x,2)+274*x-121;if(f<-1e-7) {return -1;}else if(f>1e-7) {return 1;}else return 0;
}int main(){double left=1.5;double right=2.4;double m;while(right-left>=1e-7){m=(left+right)/2.0;if(f(m)==1){left=m;}else if(f(m)==-1){right=m;}else {break;}}cout << fixed<< setprecision(6)<<m;return 0;}
//方法二
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;double fx(double x){return pow(x, 5) - 15 * pow(x, 4) + 85 * pow(x, 3) - 225 * pow(x, 2) + 274 * x - 121;
}double find(double left, double right){double middle = (left + right) / 2.0;double result = fx(middle);if (result > 1e-7) return find(middle, right);else if (result < -1e-7) return find(left, middle);else return middle;
}int main(){double result = find(1.5, 2.4);cout << fixed << setprecision(6) << result;return 0;
}
这篇关于7-20 二分法求函数的零点 (10分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!