Напишите программу в питоне, которая находит все минимумы и максимумы функции на отрезке [-5;5] с точностью 0,001, используя метод «золотого сечения». Границы интервала для поиска каждого минимума и максимума задаются вручную. Определите координаты точек максимума и минимума заданной вам функции на этом отрезке.
ответы есть, но нужно решение.
const e=0.0001; // точность
var gold: real; // пропорция "Золотого сечения"
a,b: real; // начало и конец отрезка
x1,x2: real; // точки деления
y1,y2: real; // значения целевой функции в точках деления
function f(x:real):real; // целевая функция
begin
f:=x*x*x-8*x+1-5*sin(x);
end;
begin
gold:=(sqrt(5)+1)/2;
a:=-5;
b:=5;
repeat
x1:=b-((b-a)/gold);
x2:=a+((b-a)/gold);
y1:=f(x1);
y2:=f(x2);
if(y1<=y2) then a:=x1 else b:=x2; // условие - поиск максимума
until abs(y2-y1)<e;
writeln('max(',(x1+x2)/2:0:3,',',(y1+y2)/2:0:3,')'); // середина интервала
a:=-5;
b:=5;
repeat
x1:=b-((b-a)/gold);
x2:=a+((b-a)/gold);
y1:=f(x1);
y2:=f(x2);
if(y1>=y2) then a:=x1 else b:=x2; // условие - поиск минимума
until abs(y2-y1)<e;
writeln('min(',(x1+x2)/2:0:3,',',(y1+y2)/2:0:3,')');
End.
Объяснение:
Думаю код ясен.
f(X)=x*x*x-8*x+1-5*sinx
max(-1.612,14.703) min( 1.612,-12.703)
0