Maciej Pawnuk, Tomasz Imiołek.

Minimalizacja na kierunku

Rozwiązanie analityczne

0x01 graphic

Obliczam gradient

G=0x01 graphic
=0x01 graphic

Obliczam punkty podejrzane

0x01 graphic

Rozwiązaniem układu jest:

0x01 graphic

Obliczam Hesjan

H=0x01 graphic

Obliczam wyznacznik hesjana

det(H)= 42.2566

det(H)>0 ---> minimum

punkt 0x01 graphic
to minimum funkcji.

Metoda Gaussa-Saidla

Kod programu:

Zloty podział:

function z = zloty_podzial(x,baza,e)

a = -1000;

b = 1000;

X = [b - (b-a)*(sqrt(5)-1)/2;a+(b-a)*(sqrt(5)-1)/2];

f=[funkcja(x+X(1)*baza);funkcja(x+X(2)*baza)];

while b-a>e*0.001

if f(1)>f(2)

a=X(1);

X(1)=X(2);

X(2)=a+(b-X(1));

else

b=X(2);

X(2)=X(1);

X(1)=a+(b-X(2));

end

f=[funkcja(x+X(1)*baza);funkcja(x+X(2)*baza)];

if f(1)>f(2)

z=X(2);

else

z=X(1);

end

if z - e < a && z + e > a

a = a - 500;

b = b - 500;

end

if z + e > b && z - e < b

b = b + 500;

a = a + 500;

end

end

Gauss:

function gauss(x,e)

baza=[1 0 0;0 1 0;0 0 1];

i=0;

odl=10;

while odl>e

xp=x;

x=x+baza(:,1)*zloty_podzial(x,baza(:,1),e);

x=x+baza(:,2)*zloty_podzial(x,baza(:,2),e);

x=x+baza(:,3)*zloty_podzial(x,baza(:,3),e);

odl=sqrt(((xp(1)-x(1))^2)+((xp(2)-xp(2))^2)+((xp(3)-x(3))^2));

i=i+ 1

f=funkcja(x)

x

odl

end

Funkcja:

function f=funkcja(x)

f= 2*x(1)^2+2*x(2)^2+3*x(3)^2+1.9643*x(1)*x(2)-1.7347*x(1)*x(3)+1.4643*x(2)*x(3)-8*x(1)-8*x(2)-24*x(3)+98;

Tabele Wyników:

Dla X=[1;1;1] (punkt bliski minimum)

dokładność

X

f(X)

iteracje

odległość

1

5.4805

-2.7570

6.5190

4.5477

4

0.8290

0.1

6.9133

-3.9272

6.9785

2.0080

9

0.0727

0.01

6.9898

-3.9939

6.9953

1.9990

13

0.0099

0.001

6.9991

-3.9993

6.9997

1.9989

18

6.0760e-004

0.0001

7.0001

-4.0001

7.0001

1.9989

23

4.1513e-005

dokładność

X

f(X)

iteracje

odległość

1

8.4924

-4.9229

7.8818

4.3091

12

0.7533

0.1

7.1320

-4.1053

7.0799

2.0171

17

0.0934

0.01

7.0128

-4.0063

7.0069

1.9991

21

0.0099

0.001

7.0016

-4.0015

7.0009

1.9989

26

7.0514e-004

0.0001

7.0002

-4.0002

7.0001

1.9989

31

6.7187e-005

Dla X=[100;100;100] (punkt daleki minimum)

Metoda najszybszego spadkuWynikówSaidlahesjana

Kod programu:

Zloty podzial:

function z = zloty_podzial(x,g,e)

a = -100;

b = 100;

z=b;

xn=[b-(b-a)*(sqrt(5)-1)/2; a+(b-a)*(sqrt(5)-1)/2];

f= [funk(x-xn(1)*g);funk(x-xn(2)*g)];

while norm(b-a)>0.01*e

if f(1)>f(2)

a=xn(1);

xn(1)=xn(2);

xn(2)=a+(b-xn(1));

else

b=xn(2);

xn(2)=xn(1);

xn(1)=a+(b-xn(2));

end

f = [funk(x-xn(1)*g);funk(x-xn(2)*g)];

end

if f(1)>f(2)

z = xn(2);

else

z = xn(1);

end

if z - e < a & z + e > a

a = a - 500;

end

if z + e > b & z - e < b

b = b + 500;

end

end

Gradient:

function g=gradient(x)

g(1) = 4*x(1)+1.9643*x(2)-1.7347*x(3)-8;

g(2) = 1.9643*x(1)+4*x(2)+1.4643*x(3)-8;

g(3) = -1.7347*x(1)+1.4643*x(2)+6*x(3)-24;

g=[g(1);g(2);g(3)]

Funkcja:

function f = funkcja(x)

f= 2*x(1)^2+2*x(2)^2+3*x(3)^2+1.9643*x(1)*x(2)-1.7347*x(1)*x(3)+1.4643*x(2)*x(3)-8*x(1)-8*x(2)-24*x(3)+98;

Spadek:

function i=spadek(x,E)

i=0;

stop=0;

while stop==0

i = i+1;

x = x - zloty_podzial(x,gradient(x),E)*gradient(x);

stop = norm(gradient(x))<E ;

end

end

Tabele wyników:

dokładność

X

f(X)

iteracje

1

6.6382

-3.6605

6.8261

2.1452

9

0.1

6.9537

-3.9566

6.9777

2.0013

15

0.01

6.9971

-3.9973

6.9986

1.9989

23

0.001

6.9997

-3.9998

6.9999

1.9989

29

0.0001

7.0001

-4.0001

7.0001

1.9989

35

Dla X=[1;1;1] (punkt bliski minimum)

dokładność

X

f(X)

iteracje

1

7.3968

-4.3914

7.2957

2.1452

10

0.1

7.0310

-4.0306

7.0232

2.0001

16

0.01

7.0057

-4.0056

7.0042

1.9989

20

0.001

7.0005

-4.0005

7.0004

1.9989

26

0.0001

7.0002

-4.0002

7.0001

1.9989

32

Dla X=[100;100;100] (punkt daleki minimum)

Wnioski:

Z naszych wyników można wywnioskować, że metoda Gaussa-Seida jest bardziej efektywna (potrzeba mniej iteracji do osiągnięcia wyniku) niż metoda najszybszego spadku. Jednakże metoda ta jest bardziej zależna od punktu startowego(im dalej tym więcej iteracji) dlatego gdy nie wiemy gdzie mniej więcej będzie znajdować się minimum lepszym wyborem staje się metoda najszybszego spadku.

0x01 graphic

wykres zależności dokładności a ilości iteracji.