首页 > 其他分享 >w7 T232071 解方程

w7 T232071 解方程

时间:2023-04-15 15:34:35浏览次数:41  
标签:right T232071 calculate int mid yl w7 解方程 left

 

 主要思路:由于根与根之差的绝对值>=1,所以在单位唯一的区间内至多只有一个根。使用零点存在性定理,定义左端点left和right,若f(left)*f(right)<=0,则在区间内必有根,然后再在区间内使用二分来确定根的精度。

 

代码如下:

#include<iostream>
#include<cmath>
#include<algorithm>
#include<iomanip>
using namespace std;
double a,b,c,d;
int calculate(double x){
  return a*pow(x,3)+b*pow(x,2)+c*x+d; //计算f(x)
}

int main()
{
  cin>>a>>b>>c>>d;
  double left,right,mid,yl,yr;
  for(int i=-100;i<=100;++i){
    left=i; right=i+1;
    yl=calculate(left);
    yr=calculate(right);
    if(!yl){
      cout<<fixed<<setprecision(2)<<left<<" "; //若yl==0,则对应的x=left即为方程的一个根
    }
    if(yl*yr<0){
      while(right-left>0){
        mid=(left+right)/2;
        if(calculate(mid)<0) left=mid;
        else if(calculate(mid)>0) right=mid;
        else cout<<fixed<<setprecision(2)<<mid<<" ";
      }
    }
  }
  return 0;
}

搜索

复制

标签:right,T232071,calculate,int,mid,yl,w7,解方程,left
From: https://www.cnblogs.com/ruiyifei/p/17321221.html

相关文章