求解已知一元三次方程的一个实数解
上机内容:C++
上机目的:
编程序求解方程2x3-5*x2+3x-6=0的1个实数根,要求精确到0.00001
已知f(x)=2x3-5*x2+3x-6 在>0时单调递增
我的程序:
#include <iostream>
using namespace std;
double check(double x)
{
double tmp=2*x*x*x-5*x*x+3*x-6;
return tmp;
}
int main()
{
int i;
int f;
i=0;
f=2*i^3-5*i^2+3*i-6;
if(f<0)
{
while(f<0)
{
f=2*i^3-5*i^2+3*i-6;
i++;
}
i+=1;
}
else if(f>0)
{
while(f>0)
{
f=2*i^3-5*i^2+3*i-6;
i--;
}
i-=1;
}
else
cout<<f;
double mid,low,high;
low=i-1;//易知f<0,此处按照f<0的情况,若>0,则是low=i+1//
high=i;
while(high-low>0.00001)
{
mid=(low+high)/2.0;
if(check(mid)<0)
low=mid;
else
high=mid;
}
cout<<high<<endl;
return 0;
}
运行结果:
心得体会:
又是参考别人程序的一天,看来思路是需要积累的,根据提示运用二分法,却没想到可用首尾相减来逼近。
知识点总结:
根的近似解可用二分逼近法来求,还有一些其他方法,比如牛顿迭代法等。