Extremvärden
Funktionen Har ett lokalt maximum och fyra lokala minimum på området .
Jag ska hitta extrempunkterna med metoden gradient ascent där jag utnyttjar gradienten.
Jag har lyckats hitta maximumpunkten så här:
x=-5:0.05:5; % vektor med x-värden
y=-5:0.05:5; % vektor med y-värden
[X,Y]=meshgrid(x,y);
Z=(X.^2+Y-11).^2+(X+Y.^2-7).^2;
C=10:10:190;
contour(X,Y,Z,C)
axis equal
colormap jet
colorbar
hold on
fx=@(X,Y) 4.*X.^3+4.*X.*Y-42.*X+2.*Y.^2-14;
fy=@(X,Y) 4.*X.^3+4.*X.*Y-26.*Y+2.*X.^2-22;
x0=-2; % startpunkt x-koord
y0=-2; % startpunkt y-koord
h=0.01; % steglängd
[xs,ys]=GradientAscent(h,x0,y0,fx,fy); % beräknar vägen i gradientens riktning
plot(xs,ys,'-k','LineWidth',1.5) % rita ut vägen
xs(end) % x-koord lok max
ys(end) % y-koord lok max
function [x,y]=GradientAscent(h,x0,y0,fx,fy)
eps=h/10; % parameter
x(1)=x0; % startvärde x
y(1)=y0; % startvärde y
G=sqrt(fx(x0,y0)^2+fy(x0,y0)^2); % normen av gradienten
n=1; % index
while G>=eps && n<1000
x(n+1)=x(n)+h*fx(x(n),y(n))/G; % steg i x-led
y(n+1)=y(n)+h*fy(x(n),y(n))/G; % steg i y-led
n=n+1; % öka index
G=sqrt(fx(x(n),y(n))^2+fy(x(n),y(n))^2); % normen av gradienten
end
end
Jag hittar då maximumpunkten och grafen ser ut så här:
Jag ska nu modifiera funktionen GradientAscent så att den går mot minimum istället för maximum. Eftersom gradienten alltid är positiv tänkte jag att man bara behöver ändra stegen i x och y led genom att sätta in ett minustecken framför gradienten med då ser resultatet ut såhär:
Det ser faktiskt ut som om linjen går mot i negativ riktning i början innan den drar iväg uppåt men längre än såhär kommer jag inte. Några förslag?
Så här ser det ut om jag väljer origo som startpunkt:
Det ser fortfarande ut som den går mot en minimumpunkt i början, för att sen avvika nedåt den här gången.
Jag tycker fy ska ha 4.*Y.^3 i början, inte 4.*X.^3.
Ja nu känner man sig lite dum... Självklart ska fy bestå av Y. Jag gjorde misstaget att anta att allt utom själva GradientDescent var rätt eftersom GradientAscent fungerade. Med det problemet åtgärdat kunde jag enkelt lösa uppgiften genom att ändra fy och fx till negativa.