当一个函数\(f(x)\)满足在区间在区间\([l,r]\)内有且仅有一个\(x~\in~[l,r]~,~s.t.~~f(x)\)在\([l,x]\)内单调严格递增,在\([x,r]\)内单调严格递减,则说\(f(x)\)在\([l,r]\)内是一个单峰函数,求出单峰点\(x\)的算法为三分法。
考虑对一个区间\([l,r]\),取三等分点,记做\(midl\)和\(midr\)。不妨设\(midl~<~midr\),则若\(f(midl)~\leq~f(midr)\),则单峰点一定在区间\([midl,r]\)范围内。反之单峰点一定在区间\([l,midr]\)范围内。
首先设\(f(midl)~<~f(midr)\),
以下说明\(midl\)一定不在单峰点右侧。
若\(midl\)在单峰点右侧,则\(\forall~x_0~\in~(midl,r]\),都有\(f(x_0)~<~f(x)\)。因为\(midr~>~midl\)且\(f(midr)~>~f(midl)\),于是产生矛盾。故可说明\(midl\)一定不再单峰点右侧。
当\(f(midl)~>~f(midr)\)时,证明同上。
再设\(f(midl)~=~f(midr)\),
以下说明单峰点一定在\([midl,midr]\)之间
假设\(midl\)和\(midr\)同在单峰点一侧,则\(f(x)\)在区间\([midl,midr]\)上严格单调,而\(f(midl)~=~f(midr)\),产生矛盾。于是单峰点一定在\([midl,midr]\)之间。
于是在\([l,r]\)内取两个三等分点(在代码中使用黄金分割点),比较两点函数值大小,对函数值较小的一侧缩小区间即可。
给出一个\(N\)次函数,保证在范围\([l,r]\)内存在一点\(x\),使得\([l,x]\)上单调增,\([x,r]\)上单调减。试求出\(x\)的值。
第一行一次包含一个正整数N和两个实数\(l,r\),含义如题目描述所示。
第二行包含\(N+1\)个实数,从高到低依次表示该\(N\)次函数各项的系数。
输出为一行,包含一个实数,即为\(x\)的值。四舍五入保留5位小数。
\(forall:\)
\(7~\leq~n~\leq~13~,~|A_i|~<10\)。其中\(|A_i|\)为系数