#include<bits/stdc++.h>
using namespace std;
double f(double x,double y)
{
double f=(x*(x*(x*(x*(x*(x*(x*6+8)))+7)+5)-y));
return f;}
double slove(double l,double r,double y){
double lm,rm;
while(r-l>pow(10,-6)){
lm=(2*l+r)/3;
rm=(l+2*r)/3;
if(f(lm,y)>f(rm,y))l=lm;
else if(f(lm,y)<f(rm,y))r=rm;
else l=lm,r=rm;
}
return f((l+r)/2,y);
}
int main()
{
double y;
int n;
scanf("%d",&n);
while(n--){
scanf("%lf",&y);
printf("%.4f\n",slove(0.0,100.0,y));
}
return 0;
}
本文介绍了一种名为双线性搜索的算法,用于高效地在区间内找到函数f(x) = x*(x*(x*(x*(x*(x*6+8)))+7)+5)-y的极值点。通过逐步缩小区间并利用函数单调性,该算法简化了黄金分割法的应用,适用于求解二次函数的最优点。作者展示了如何在main函数中调用slove()函数,解决实际问题。

1978

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



