所给函数关系式中自变量x大于零,又都是加法运算,所以明显是递增的。故可用二分法求近似解,精度很重要。。
方法一:
#include<cstdio>
#include<cmath>
double F(double x){
return 8*pow(x,4)+7*pow(x,3)+2*x*x+3*x+6;
}//定义关系函数
int main(){
int t;
scanf("%d",&t);
while(t--){
double y;
scanf("%lf",&y);
if(F(0)>y||F(100)<y){//不在值域内时
printf("No solution!\n");
continue;
}
double l=0.0,r=100.0,mid=(l+r)/2;
while(r-l>1e-6){
if(F(mid)<y)
l=mid+1e-6;//加上精度
else
r=mid-1e-6;
mid=(l+r)/2;
}
printf("%.4lf\n",mid);
}//当y=100时输出结果为1.6151,但是能AC!
return 0;
}方法二:
#include<cstdio>
#include<cmath>
double F(double x){
return 8*pow(x,4)+7*pow(x,3)+2*x*x+3*x+6;
}//定义关系函数
int main(){
int t;
scanf("%d",&t);
while(t--){
double y;
scanf("%lf",&y);
if(F(0)>y||F(100)<y){//y不在值域内时
printf("No solution!\n");
continue;
}
double l=0.0,r=100.0,mid=(l+r)/2;
while(fabs(F(mid)-y)>1e-5){//当F(mid)于y相差小于1e-5时结束
if(F(mid)<y)
l=mid+1;//加减1!
else
r=mid-1;
mid=(l+r)/2;
}
printf("%.4lf\n",mid);
}
return 0;
}
本文介绍了一种使用二分法解决特定多项式方程的方法,该方程为8*X^4+7*X^3+2*X^2+3*X+6=Y,在0到100范围内寻找解。通过两个示例代码演示了如何根据给定的Y值找到相应的X值,或者判断无解的情况。
5646

被折叠的 条评论
为什么被折叠?



