%% TMA671 Lösning av uppgift N.7.14
clear;
% Under storgruppsövningen som hölls onsdagen den 21e Maj 2018
% så demonstrerades uppgift 10 i Kapitel 14 i Numerisk Analys
% boken. Uppgiften handlar om att minimera en konvex funktion 
% f:R^2->R med hjälp av ''fminunc''.
% Programmet är skrivet av Johannes Borgqvist

%% Almänna saker för uppgiften
% Gränser
minX = -5;
maxX = 5;
minY = -5;
maxY = 5;
% Funktion som skall minimeras
f = @(x,y) (2.*x.^3) - (3.*x.^2) - (6.*x.*y.*(x-y-1));
% Define a mesh
[X, Y] = meshgrid(minX:0.01:maxX,minY:0.01:maxY);
% Define the function surface
Z = 2*X.^3 - 3*X.^2 - 6.*X.*Y.*(X-Y-1);
%% We find the minima
% Define the function
f = inline('2*x(1)^3-3*x(1)^2-6*x(1)*x(2)*(x(1)-x(2)-1)');
fminus = inline('-(2*x(1)^3-3*x(1)^2-6*x(1)*x(2)*(x(1)-x(2)-1))');
% Find first minima
xMin = fminunc(f,[0.5, 0.5]);
% Find second minima
xMax = fminunc(fminus,[-0.5, -0.5]);
% Saddle 1
saddle1 = [0; 0];
% Saddle 2
saddle2 = [0; -1];
%% Plottar




fig = figure('units','normalized','outerposition',[0 0 1 1],...
     'PaperPositionMode','auto');
%figure(1)
clf
contourf(X,Y,Z)
colormap jet
cb = colorbar;
%cb.Label.Interpreter = 'latex';
set(cb,'Ticklabelinterpreter','latex','Fontsize',20)
hold on
p1 = plot(xMin(1),xMin(2), '*','Color',[0.1, 0, 0], 'MarkerSize', 30, 'LineWidth', 3);
hold on
p2 = plot(xMax(1),xMax(2), '*red', 'MarkerSize', 30, 'LineWidth', 3);
hold on
p3 = plot(saddle1(1),saddle1(2), '*blue', 'MarkerSize', 30, 'LineWidth', 3);
hold on
p4 = plot(saddle2(1),saddle2(2), '*magenta', 'MarkerSize', 30, 'LineWidth', 3);
hold off
axis([minX, maxX, minY, maxY])
set(gca,'Ticklabelinterpreter','latex','Fontsize',20)
leg = legend([p1,p2,p3,p4],'Minima:$\;\;\;x_{\mathrm{min}}=\left(1, 0\right)^{\mathrm{T}}$','Maxima:$\;\;\;x_{\mathrm{max}}=\left(-1, -1\right)^{\mathrm{T}}$',...
    'Saddle 1:$\;\;\;x_{\mathrm{saddle}}=\left(0, 0\right)^{\mathrm{T}}$','Saddle 2:$\;\;\;x_{\mathrm{saddle}}=\left(0, -1\right)^{\mathrm{T}}$');
set(leg,'interpreter','latex','Fontsize',10,'Location','NorthEast')
xlabel('$x$','interpreter','latex','FontSize',40)
ylabel('$y$','interpreter','latex','FontSize',40)
cb.Label.String = '$f\left(x,y\right)$';
cb.Label.Interpreter = 'latex';
cb.Label.FontSize = 40;
titleStr = {'\textbf{TMA671 Uppgift N.7.14}','Datum: 2018-05-21, Skriven av: Johannes Borgqvist',...
    ['\textit{Minimering med ''''\textsf{fminunc}'''' av funktionen}'],...
    '$\;\;\;f\left(x,y\right)=2x^3-3x^2-6xy(x-y-1).$'...
    };
title(titleStr,'interpreter','latex','Fontsize',50)
print(fig, '-depsc', '-r0', 'UppgiftN714Datum20180521.eps')



