求解一元三次方程根的时候需要求函数峰值,本以为这类题是水题,没想到就在机房里耗了一个晚自习(悲
多峰函数的峰值真的能用三分法搞出来吗
我在三分的时候,其中的一个等分点似乎把峰给跳过了
然后下一次枚举的时候峰就不在待定区间里了
具体代码如下:
void triple(){
int l=L,r=R;
while(r-l>eps){
int p=(2*l+r)/3,q=(l+2*r)/3;
if(ans(p)<ans(q))l=p;
else r=q;
}//求出峰横坐标
peak_1=(l+r)*0.5;
l=L;r=R;
while(r-l>eps){
int p=(2*l+r)/3,q=(l+2*r)/3;
if(ans(p)<ans(q))r=q;
else l=p;
}//求出谷横坐标
peak_2=(l+r)*0.5;
}
这样求得的两个峰的位置都在L和R附近,根本不对
请问问题出在哪呢?