function fmin(a:double, b:double, tol:double):double // нахождение точки минимума функции fun(x) // на интервале [a,b] c точностью tol var c,x,d,fa,fb,fc,fx,fd,dx,ca,fac,fbc; tol=abs(tol); fa=fun(a); fb=fun(b); if fbc then begin fx=fun(x); if fxfx then begin a=d; b=c; c=x; fa=fd; fb=fc; fc=fx; goto abc; end; if sign(c-d)=sign(d-a) and ( (3*abs(c-d)>abs(d-a))or(3*abs(d-a)>abs(c-d)) ) then begin b=c; c=d; fb=fc; fc=fd; goto abc end; if sign(c-d)=sign(d-b) and ( (3*abs(c-d)>abs(d-b))or(3*abs(d-b)>abs(c-d)) ) then begin a=c; c=d; fa=fc; fc=fd; goto abc end; end; end else begin x=c+tol; if x<>c then begin fx=fun(x); if fx>=fc then begin d=c-tol; fd=fun(d); if fd>fc then begin fmin=c; goto fin end; end; end; end; if abs(c-a)>=abs(b-c) then begin x=a+(c-a)/2; fx=fun(x); if fx<=fc then begin b=c; c=x; fb=fc; fc=fx end else begin a=x; fa=fx end; goto abc; end; x=b+(c-b)/2; fx=fun(x); if fx<=fc then begin a=c; c=x; fa=fc; fc=fx end else begin b=x; fb=fx end; goto abc; fin: end;