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
3. Wykres konturowy z zaznaczoną ściężką poszukiwania minimum.
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*')