算法经典题型16
用二分法求一元非线性方程f(x)= x3/2+2x2-8=0 在区间[0, 2]上的近似实根r,精确到0.0001.
用到的思想—迭代法
博主用到的环境:Win7, CodeBlocks等。
一、代码
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float x,x1=0,x2=2,f1,f2,f;
float a,b;
cout<<"input a,b (f(a)*f(b)<0)"<<endl;
cin>>a>>b;
f1=x1*x1*x1/2+2*x1*x1-8;
f2=x2*x2*x2/2+2*x2*x2-8;
if(f1*f2>0){
cout<<"No root"<<endl;
return 0;
}
do{
x=(x1+x2)/2;
f=x*x*x/2+2*x*x-8;
if(f=0) break;
if(f1*f>0.0){
x1=x;
f1=f;
}
else x2=x;
}
while(abs(x1-x2)>=1e-4);
cout<<"root="<<x;
return 0;
}
二、测试
总结
谢谢宝宝们的阅读,有问题的话评论@我,没问题的话点个赞再走哦~