lsmCC 发表于 2023-11-10 18:39:45

一元三次方程其求解方程

#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,怎么确定右边界

isdkz 发表于 2023-11-10 18:44:58

右边界取i+2.0是为了确定一个初始的区间范围,用于判断函数solve(x)在该区间内是否存在根。在这段代码中,通过遍历从-100到100的区间,以每两个相邻的数作为一个区间的左右边界,来判断该区间内是否存在方程的根。

确定右边界的选择是为了保证在每个区间内都能够包含可能的根。选择i+2.0作为右边界的原因是为了确保每个区间的宽度足够大,以便在使用二分法逼近根时有足够的空间进行迭代。如果右边界选择的过小,可能会导致无法准确找到根的位置,或者需要更多的迭代次数才能找到根。

因此,选择i+2.0作为右边界是为了在每个区间内充分考虑到可能的根的位置,并确保二分法能够有效地逼近根的位置。
页: [1]
查看完整版本: 一元三次方程其求解方程