Оптимизация

Оптимизация


Метод перебора

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

       

 


Report Page