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.
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