Wszystkiego Najlepszego chłopaki z okazji świąt, MNS, WYDZIAŁ ELEKTRYCZNY


WYDZIAŁ ELEKTRYCZNY

TEMAT SPRAWOZDANIA: METODA NAJSZYPRZEGO SPATKU.

WYKONAŁ:

MICHAŁ MANIA

DATA:

20.05.2010

PUNKTY:

Zadanie jakie nam postawiono na laboratorjach było wykorzystanie jednej z metod poszukiwania minimum funkcji. Algorytm jaki udało nam się zaimplementowac w matlabie jest jedna z metod gradjętowych a dokładnie metoada najszyprzego spatku. Każda z analizowanych funkcji była funkcja dwuch zmiennych. Poniżej przedstawione są wyniki mojej pracy.

1. Wyniki poszukiwania minimum przy doborze różnych parametrów.

LP

Funkcja

Xpocz

 

Xest

 

ε

δ

N

f(x)

1

f(x)=2x1^2+50x2^2

[2,2]

[

0,0632000000

;

-0,0051000000

]

1e-1

1e-2

3

0,0093000000

2

f(x)=2x1^2+50x2^2

[2,2]

[

0,0019000000

;

-0,0005083600

]

1e-2

1e-3

5

0,0000200090

3

f(x)=2x1^2+50x2^2

[2,2]

[

0,0000354800

;

-0,0000501370

]

1e-3

1e-4

7

0,0000001282

4

f(x)=2x1^2+50x2^2

[2,2]

[

0,0000802060

;

-0,0000051363

]

1e-4

1e-5

7

0,0000000142

5

f(x)=2x1^2+50x2^2

[2,2]

[

-0,0000002806

;

-0,0000005003

]

1e-5

1e-6

9

0,0000000000

6

f(x)=2x1^2+50x2^2

[2,2]

[

0,0000080977

;

-0,0000003565

]

1e-6

1e-7

155

0,0000000001

7

f(X)=25*(x1+x2)^2+(-1*x1+x2)^2

[2,2]

[

-0,0026000000

;

-0,0026000000

]

1e-1

1e-2

2

0,0006760000

8

f(X)=25*(x1+x2)^2+(-1*x1+x2)^2

[2,2]

[

-0,0002600000

;

-0,0002600000

]

1e-2

1e-3

2

0,0000067600

9

f(X)=25*(x1+x2)^2+(-1*x1+x2)^2

[2,2]

[

-0,0000260000

;

-0,0000260000

]

1e-3

1e-4

2

0,0000000676

10

f(X)=25*(x1+x2)^2+(-1*x1+x2)^2

[2,2]

[

-0,0000026000

;

-0,0000026000

]

1e-4

1e-5

3

0,0000000007

11

f(X)=25*(x1+x2)^2+(-1*x1+x2)^2

[2,2]

[

-0,0000002600

;

-0,0000002600

]

1e-5

1e-6

3

0,0000000000

12

f(X)=25*(x1+x2)^2+(-1*x1+x2)^2

[2,2]

[

-0,0000000260

;

-0,0000000260

]

1e-6

1e-7

4

0,0000000000

13

f(x)=100*(x1^2-x2^2)^2+20*(x1^4+x2^2)^2

[2,2]

[

0,4582000000

;

0,4779000000

]

1e-1

1e-2

9

1,5194000000

14

f(x)=100*(x1^2-x2^2)^2+20*(x1^4+x2^2)^2

[2,2]

[

0,1030000000

;

0,0946000000

]

1e-2

1e-3

36

0,0019000000

15

f(x)=100*(x1^2-x2^2)^2+20*(x1^4+x2^2)^2

[2,2]

[

0,0117000000

;

0,0108000000

]

1e-3

1e-4

78

0,0000003110

16

f(x)=100*(x1^2-x2^2)^2+20*(x1^4+x2^2)^2

[2,2]

[

0,0011000000

;

0,0010000000

]

1e-4

1e-5

116

0,0000000000

17

f(x)=100*(x1^2-x2^2)^2+20*(x1^4+x2^2)^2

[2,2]

[

0,0001037000

;

0,0000967710

]

1e-5

1e-6

150

0,0000000000

18

f(x)=100*(x1^2-x2^2)^2+20*(x1^4+x2^2)^2

[2,2]

[

0,0000106550

;

0,0000099461

]

1e-6

1e-7

182

0,0000000000

19

f(x)=25*abs(2*x1-x2-4)+abs(4*x1+3*x2+8)

[2,2]

[

-

;

-

]

1e-3

1e-4

13

-

20

f(x)=25*abs(2*x1-x2-4)+abs(4*x1+3*x2+8)

[2,2]

[

-

;

-

]

1e-6

1e-7

15

-

2. Wykes 3D funkcji f(x)=2x1^2+50x2^2

0x01 graphic

3. Wykres konturowy z zaznaczoną ściężką poszukiwania minimum.

0x01 graphic

0x01 graphic

Wnioski:

Metoda jaką użyliśmy do poszukiwania minimum czyli metoda najszypszego spatku jak sama nazwa może sugerować pozwalała otrzymać prawidłowe wyniki przy względnie małej ilości literacji. Algorytm zbudowany na podstawie tej metody nie miał problemu ze znależieniem odpowiedzi dla funkcji wielomianowych natomiast nie poradził sobie z ostatnią z funkcji. Przyczyną tego niepowodzenia był fakt iż funkcja ta jest funkcja nieciągłą a nasz algorytm postępowania bazował na operatorach gradjętu i hessi.

Skrypt:

function f=fc(x1,x2)

f=2*x1^2+50*x2^2;

function gr=gradi(x1,x2)

delta=1e-3;

pfpx1=-(fc(x1,x2)-fc(x1+delta,x2))/delta;

pfpx2=-(fc(x1,x2)-fc(x1,x2+delta))/delta;

gr=[pfpx1;pfpx2];

function h=hessi(x1,x2)

del=1e-3;

gr0=gradi(x1,x2);

gr1=gradi(x1-del,x2);

gr2=gradi(x1,x2-del);

fpx11=(gr0-gr1)/del;

fpx22=(gr0-gr2)/del;

h=[fpx11,fpx22];

N=0;

blad=Inf;

x1=2;

x2=2;

p=[];

o=[];

i=0;

while blad>1e-2

gr=gradi(x1,x2);

h=hessi(x1,x2);

alfa=gr'*gr/(gr'*h*gr);

xn=[x1;x2]-alfa*gr;

%xn=[x1;x2]-h^-1*gr; metoda newtona

blad=norm(xn-[x1;x2]);

x1=xn(1);

x2=xn(2);

i=i+1;

p(i)=xn(1);

o(i)=xn(2);

N=N+1;

end

x1

x2

fc(x1,x2)

N

w=linspace(-30,30,100)

k=linspace(-10,10,100)

[W,K]=meshgrid(w,k)

for i=1:100

for j=1:100

z(i,j)=fc(W(i,j),K(i,j));

end

end

mesh(W,K,z)

w=linspace(-2,2,100)

k=linspace(-2,2,100)

[W,K]=meshgrid(w,k)

for i=1:100

for j=1:100

z(i,j)=fc(W(i,j),K(i,j));

end

end

Contour(W,K,z,1000)

hold on

plot(p,o,'r')

hold on

plot(p,o,'r*')



Wyszukiwarka