一元三次方程其求解方程
#include <bits/stdc++.h>using namespace std;
double a,b,c,d;
double solve(double x)
{
return a*x*x*x+b*x*x+c*x+d;
}
int main()
{
cin>>a>>b>>c>>d;
for(double i=-100;i<=100;i++)//即在-100到100中一个一个区间去判断
{
double x1=i,x2=i+2.0;
if(solve(x1)==0.0)printf("%.2lf",i); //如果带进去x1==0,则说明就是此方程的根
if(solve(x1)*solve(x2)<0)//标明此处必有一个根,然后去判断
{
while(x2-x1>=0.001)
{
double mid=(x1+x2)/2.0;
if(solve(x1)*solve(mid)<=0.0)x2=mid;
else x1=mid;
}
printf("%.2lf",x1);
}
}
return 0;
}
为什么右边界要取i+0.1,怎么确定右边界 右边界取i+2.0是为了确定一个初始的区间范围,用于判断函数solve(x)在该区间内是否存在根。在这段代码中,通过遍历从-100到100的区间,以每两个相邻的数作为一个区间的左右边界,来判断该区间内是否存在方程的根。
确定右边界的选择是为了保证在每个区间内都能够包含可能的根。选择i+2.0作为右边界的原因是为了确保每个区间的宽度足够大,以便在使用二分法逼近根时有足够的空间进行迭代。如果右边界选择的过小,可能会导致无法准确找到根的位置,或者需要更多的迭代次数才能找到根。
因此,选择i+2.0作为右边界是为了在每个区间内充分考虑到可能的根的位置,并确保二分法能够有效地逼近根的位置。
页:
[1]