Prilog lekciji Lokalni ekstremumi multivarijabilnih funkcija na temu koriscenja Matlaba - smene 8 i 9 (A. Pejcev)

Post Reply
apejcev
Posts: 1821
Joined: 25.06.2014. 00:25

Prilog lekciji Lokalni ekstremumi multivarijabilnih funkcija na temu koriscenja Matlaba - smene 8 i 9 (A. Pejcev)

Post by apejcev »

Na kolokvijumima i ispitima se, naravno, od studenata ocekuje da ispitivanje da li se u nekoj kriticnoj tacki (stacionarnoj tacki) dostize ili ne dostize lokalna ekstremna vrednost funkcije vise promenljivih - sprovode rucno, po mogucstvu uz pomoc Hesijana ako su u toj kriticnoj tacki svi parcijalni izvodi definisani i jednaki nula. Medjutim, ukoliko je odgovarajuca tacka kriticna iz razloga sto u njoj bar jedan od parcijalnih izvoda date funkcije nije definisan - u toj tacki automatski ne moze biti definisan ni Hesijan, s obzirom na to da bi (izmedju ostalog) trebao da sadrzi parcijalne izvode i tog izvoda koji nije definisan. Najbolji primer na ovu temu je 9. zadatak sa Sestog domaceg.

U praksi se, naravno, sve ove stvari rade pomocu racunara. Za pocetak, u MATLAB-u postoji gotova funkcija za racunanje Hesian-ove matrice (a da ne govorimo o tome da postoje i gotove funkcije koje resavaju odgovarajuci sistem jednacina u kojem se parcijlani izvodi 1. reda date funkcije izjednacavaju sa nulom).
Specijalno, u slucaju funkcije 2 promenljive, gde izraz z=f(x,y) sam po sebi u prostoru predstavlja jednu povrs, donekle najprirodniji nacin da se za bilo koju njenu kriticnu tacku (pogotovu ako Hesian nije definisan) ispita da li se u toj tacki dostize lokalna ekstremna vrednost ili ne - jeste da se grafik te povrsi jednostavno ''zumira'' u okolini te tacke i na slici pogleda da li odgovarajuci deo grafika izgleda kao brezuljak (lokalni maksimum), udubljenje (lokalni minimum) ili nijedno od ta dva (u tom slucaju nema lokalne ekstremne vrednosti).

U prilogu je dat kood u MATLABU-u, kompletno pripremljen od strane profesorke Davorke Jandrlic (koji ce u odgovarajucim smenama verovatno obradjen kao redovna vezba na predmetu Racunarski alati), koji na opisani nacin tretira 9. zadatak sa Sestog domaceg. Prilozene su i slike koje se iscrtaju odgovarajucim pozivima skripte, ali barem to je nesto sto bi studenti i sami trebalo da znaju kojim naredbama se postize.
sl1.png
(161.87 KiB) Not downloaded yet
sl2.png
(115.77 KiB) Not downloaded yet
sl3.png
(19.04 KiB) Not downloaded yet
deveti zadatak sa Sestog domaceg iz Matematike 2 - Grafika simbolicki izrazi
syms x y clear
figure(1)
z=sqrt(x^2+y^2)+sqrt(1-x^2)+sqrt(1-y^2) %zadata povrs kao predstavljena simbolickim izrazom
ezmeshc(z,[-1.1 1.1 -1.1 1.1]); % predstavljanje povrsi sa konturama kako bi se uocili lokalni min i max i njihove pozicije
J = jacobian(z,[x y]); % izracunavanje gradijenta
J(1)
% ezmesh(J(1),[-1.1 1.1 -1.1 1.1]);
[a b]=solve((x^2 + y^2)^(1/2)==0) %(a,b)=(0,0) tacka u kojoj nije definisan J(1)
a1=solve((1 - x^2)^(1/2)==0) % za x = 1 i za x = -1 takodje nije definisan J(1)
J(2) % slicno kao za J(1) dobijamo kriticne tacke (0,0) i y = -1 i y = 1
% ezmesh(J(2),[-1.1 1.1 -1.1 1.1]);
%close('all')

z =

(x^2 + y^2)^(1/2) + (1 - x^2)^(1/2) + (1 - y^2)^(1/2)


ans =

x/(x^2 + y^2)^(1/2) - x/(1 - x^2)^(1/2)


a =

0


b =

0


a1 =

-1
1


ans =

y/(x^2 + y^2)^(1/2) - y/(1 - y^2)^(1/2)


Kriticne tacke
dalje odredjujemo kriticne tacke

res = solve(J); % resavanje sistema jednacina
x_res=double(res.x); % x komponenta resenja, ne mora double ako zelimo da ostane razlomak
y_res=double(res.y); % y komponenta resenja

res.z=subs(z,{x,y},{x_res',y_res'});

z_res = double(res.z); % vrednosti fje u datim tackama

ezmesh(z,[-1.1 1.1 -1.1 1.1]);
hold on
% ose se podesavaju kako bi se sve tacke videle u suprotnom se tacke
% maksimuma nece videti
axis([-1.1 1.1 -1.1 1.1 0 2.7]);
plot3(x_res,y_res,z_res, 'ro', 'MarkerSize', 10,'MarkerFaceColor', 'r');

H=hessian(z) % izracunavanje Hesiana

% Hesian u kriticnim tackama:
for i = 1:length(x_res)
double(subs(H,{x,y},{x_res(i),y_res(i)}))% zamena kriticnih tacaka u dobijenu Hesian matricu
end

% Prethodno nisu odredjene vrednosti funkcije u svim kriticnim tackama, vec
% smao onim gde su parcijalni izvodi definisani
% Provera ponasanja funkcije u tackama (0,0), x = -1, x = 1, y = -1, y = 1

%ezmesh(z,[-1.2 1.2 -1.2 1.2]);
z0=subs(z,{x,y},{0,0}); % Vrednost funkcije je 2

hold on
plot3(0,0,z0, 'bo', 'MarkerSize', 20,'MarkerFaceColor', 'r');
view([190 -20]);
%close('all');

H =

[ 1/(x^2 + y^2)^(1/2) - x^2/(1 - x^2)^(3/2) - x^2/(x^2 + y^2)^(3/2) - 1/(1 - x^2)^(1/2), -(x*y)/(x^2 + y^2)^(3/2)]
[ -(x*y)/(x^2 + y^2)^(3/2), 1/(x^2 + y^2)^(1/2) - y^2/(1 - y^2)^(3/2) - y^2/(x^2 + y^2)^(3/2) - 1/(1 - y^2)^(1/2)]


ans =

-2.8284 0
0 0.4142


ans =

-2.8284 0
0 0.4142


ans =

0.4142 0
0 -2.8284


ans =

0.4142 0
0 -2.8284


ans =

-1.2247 -0.6124
-0.6124 -1.2247


ans =

-1.2247 0.6124
0.6124 -1.2247


ans =

-1.2247 0.6124
0.6124 -1.2247


ans =

-1.2247 -0.6124
-0.6124 -1.2247


Provera ponasanja funkcije za x = -1

zm1 = subs(z,{x},{-1}) % Nacrtajmo ovu krivu sada
ezplot(zm1,[-1.2 1.2]); %Maksimum dostize za y = 0, a minimum u -1 i 1
subs(zm1,{y},{0})
subs(zm1,{y},{-1})
% Zbog simetricnosti moze se izvesti zakljucak i za ostale tacke na
% krajevima intervala definisanosti funkcije mada se i sa grafika da
% zakljuciti da su tacke minimuma (-1,1) (-1, -1) (1,-1) i (1,1)
z1 = subs(z,{x},{1}) % Nacrtajmo ovu krivu sada
ezplot(z1,[-1.2 1.2]); %Maksimum dostize za y = 0, znaci tacka (-1, 0) je od interesa
subs(z1,{y},{0})
%

zm1 =

(y^2 + 1)^(1/2) + (1 - y^2)^(1/2)


ans =

2


ans =

2^(1/2)


z1 =

(y^2 + 1)^(1/2) + (1 - y^2)^(1/2)


ans =

2


crtanje kontura sa vrednostima fje u konturama radi provere resenja
x=[-1:.1:1];
y=[-1:.1:1];
[X Y]=meshgrid(x,y);
Z=sqrt(X.^2+Y.^2)+sqrt(1-X.^2)+sqrt(1-Y.^2);
figure(2)
[c h] = contour(X,Y,Z,10); % crtanje kontura 20 je broj kontura moze da se smanji po potrebi izmeniti
clabel(c,h); % oznacavanje kontura pridruzivanjem vrednosti funkcije odgovarajucim linijama
hold on
grid % linije mreze omogucavaju bolju ocenu polozaja


Published with MATLAB® R2018a


A. Pejcev

Post Reply