7-20 二分法求函式的零點 (10分)

Suzerk發表於2020-10-11

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;
}  

相關文章