#include<iostream> #include<cmath> using namespace std; float Formula(float x)//方程表达式 { float y; y=x*x*x-x-1; //范例方程 return y; } float Dimidiate(float x0,float x1)//二分表达式 { float k; k=(x0+x1)/2; return k; } int Binary(float a,float b,float e)//计算二分次数Exact_Binary { int l=2; for(int k=0;k<100;k++) { if(pow(l,k)>=(b-a)/(2*e)) break; //|x-x'|≤(b'-a')/2=(b-a)/pow(2,k+1). } return k; } void main() { float a,b,e; //区间与精度 float x,y,y0,y1; //临时变量 int k,n; cout<<"***方程求根二分法***"<<endl; cout<<"输入区间[a,b]与精度ε(绝对误差限)"<<endl; cin>>a>>b>>e; k=Binary(a,b,e); //确定二分次数 // cout<<"二分次数"<<k<<endl; y0=Formula(a); y1=Formula(b); if(y0*y1<0) { for(n=0;n<=k;n++) { x=Dimidiate(a,b); cout<<"第"<<n+1<<"次二分结果:"<<x<<endl; y=Formula(x); if(y0*y>0)a=x; // 选择领域 else b=x; //确定进行下一步计算的边界 } cout<<"二分次数:"<<k<<endl; cout<<"所求实根:"<<x<<endl; } else cout<<"限定区间内没有实根"<<endl; }