Оптимизация
Метод перебора
clc
clear
a=-10;
b=10;
e=0.01;
ymin=2*a^2-2*a+8;
for x=-10:0.01:10
y=2*x^2-2*x+8;
if y<=ymin
ymin=y;
xopt=x;
end
end
ymin
xopt
ymin=100
while a<b+e
y=2*a^2-2*a+8;
if y<=ymin
ymin=y;
xopt=a;
end
a=a+e;
end
xopt
ymin
алгоритм поразрядного поиска
clc
clear ALL
a=-10;
b=10;
e=0.001;
while (b-a)/2>e
x1=a;
y1=2*x1^2-2*x1+8;
x2=x1+(b-a)/10;
y2=2*x2^2-2*x2+8;
n1=0;
while y1>=y2
y1=2*x1^2-2*x1+8;
x2=x1+(b-a)/10;
y2=2*x2^2-2*x2+8;
if y2<y1
x1=x2;
end
n1=n1+1;
end
b=x2;
y1=2*x1^2-2*x1+8;
x2=x1-(b-a)/10;
y2=2*x2^2-2*x2+8;
n2=0;
while y1>=y2
y1=2*x1^2-2*x1+8;
x2=x1-(b-a)/10;
y2=2*x2^2-2*x2+8;
if y2<y1
x1=x2;
end
n2=n2+1;
end
a=x2;
end
n=n1+n2
xopt=(b+a)/2
первый метод дихотомии
clc
clear all
a=-10;
b=10;
e=0.001;
delta=0.0005;
while (b-a)/2>e;
x1=(a+b)/2-delta;
x2=(a+b)/2+delta;
y1=2*x1.^2-2*x1+8;
y2=2*x2.^2-2*x2+8;
if y1<=y2
b=x2;
else
a=x1;
end
end
xopt=(a+b)/2
второй метод дихотомии
clc
clear
a=-10;
b=10;
e=0.001;
delta=0.0005;
n=0;
while abs(b-a)/2>e;
x1=a+(b-a)/4;
x2=a+(b-a)/4*2;
x3=a+(b-a)/4*3;
y1=2*x1.^2-2*x1+8;
y2=2*x2.^2-2*x2+8;
y3=2*x3.^2-2*x3+8;
if y1<=y2
b=x2;
else
a=x1;
if y2<=y3
a=x1;
b=x3;
else
a=x2;
end
end
n=n+1;
end
xopt=(a+b)/2
n
золотое сечение
clc
clear
a=-10;
b=10;
e=0.01;
n=0;
while abs(b-a)/2>+e;
x1=a+(((3-sqrt(5))/2)*(b-a));
x2=a+(((sqrt(5)-1)/2)*(b-a));
y1=x1.^2+4*x1+5;
y2=x2.^2+4*x2+5;
if y1<=y2
b=x2;
else
a=x1;
end
n=n+1;
end
n
xopt=(a+b)/2
метод аппроксимации и метод парабол
clc
clear all
a=-10;
b=10;
e=0.001;
d=(b-a)/10;
while abs((b-a)/2)>e
for x=a:d:b-d
y1=2*x^2-2*x+8;
y=2*(x+d)^2-2*(x+d)+8;
if y>y1
b1=a;
a1=x+d;
d1=-(a1-b1)/10;
break
end
end
a=a1;
b=b1;
d=d1;
end
x1=a
x3=b
x2=(a+b)/2
format long
f1=2*x1^2-2*x1+8
f2=2*x2^2-2*x2+8
f3=2*x3^2-2*x3+8
dx1=[f1 x1 8;f2 x2 8;f3 x3 8];
dx2=[x1^2 f1 8;x2^2 f2 8;x3^2 f3 8];
dx3=[x1^2 x1 f1;x2^2 x2 f2;x3^2 x3 f3];
D=[x1^2 x1 8;x2^2 x2 8 ;x3^2 x3 8];
A=det(dx1)/det(D)
B=det(dx2)/det(D)
C=det(dx3)/det(D)
xopt=-(B/(2*A))
fopt=2*xopt^2-2*xopt+8
метод средней точки
clc
clear all
a=-10;
b=10;
e=0.001;
delta=0.0005;
n=0;
x1=(a+b)./2;
y1=2*x1.^2-2.*x1+8;
f=4*x1-2;
while abs(f)>e;
x1=(a+b)./2;
f=(((2*(x1+delta)^2)-2*(x1+delta)+8)-((2*(x1)^2)-2*(x1)+8))/(delta)
if f<0;
a=x1;
else
b=x1;
end
n=n+1;
end
xopt=x1;
xopt
n
метод касательных
clc
clear all
a=0.7*pi;
b=2*pi;
e=0.001;
h=0.0005;
x=b-1;
diffy1=((sin(x+h))-(sin(x-h)))/2*h;
n=0;
while abs(diffy1)>e;
diffy2=((sin(x+h))-2*sin(x)+(sin(x-h)))/h.^2;
x=x-diffy1/diffy2;
diffy1=((sin(x+h))-(sin(x-h)))/2*h;
n=n+1
end
xopt=x
n
метод хорд
clear
clc
a=0.7*pi;
b=2*pi;
e=0.001;
dx=10;
n=0;
d=0.001;
while abs(dx)>e;
da=((sin(a+d))-(sin(a-d)))/(d);
db=((sin(b+d))-(sin(b-d)))/(d);
x=-da./(db-da)*(b-a)+a;
dx=((sin(x+d))-(sin(x-d)))/(d);
if abs(dx*db)<0;
a=x;
else
b=x;
end
n=n+1;
end
xopt=x*180/pi
n