三分法求极值模板
以后大概就这么写吧
program tri;
//三分法求凸性函数极值
Const
SMAX=true;
SMIN=false;
NOW=SMAX;
LMIN=1e-10;
RMAX=100000000;
Res=1e-10;//这个精度不能再小了,否则浮点数误差会大于此精度
Function F(x:extended):extended;inline;//extended的更精确,但同时计算速度最慢
begin
exit(ln(x)-x);
end;
Function get(l,r:extended):extended;
var
mid1,mid2:extended;
begin
if r-l<Res then exit((l+r)/2);
mid1:=(r-l)/3+l;
mid2:=(r-l)/3*2+l;
if NOW=SMAX then
if f(mid1)>f(mid2) then exit(get(l,mid2)) else exit(get(mid1,r))
else
if f(mid1)<f(mid2) then exit(get(l,mid2)) else exit(get(mid1,r));
end;
begin
writeln(get(lmin,rmax):0:18);
end.

浙公网安备 33010602011771号