diff --git a/.gitignore b/.gitignore index 27d5772..f215e35 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,4 @@ # Matlab related *.m~ - +*.asv diff --git a/Work 3/report/Work3_report.pdf b/Work 3/report/Work3_report.pdf index c9f6f6b..8dcefc4 100644 Binary files a/Work 3/report/Work3_report.pdf and b/Work 3/report/Work3_report.pdf differ diff --git a/Work 3/report/Work3_report.tex b/Work 3/report/Work3_report.tex index 5f2562d..3800ebc 100644 --- a/Work 3/report/Work3_report.tex +++ b/Work 3/report/Work3_report.tex @@ -43,7 +43,7 @@ \usepackage{commath} \usepackage{float} - +\usepackage[labelformat=empty]{subcaption} \begin{document} @@ -51,15 +51,12 @@ %\tableofcontents -\sloppy - \section{Εισαγωγή} -Η παρούσα εργασία αφορά το πρόβλημα της ελαχιστοποίησης μιας δοσμένης συνάρτησης πολλών μεταβλητών $f: \mathbb{R}^n \rightarrow \mathbb{R}$ χωρίς περιορισμούς. -Για το σκοπό αυτό κάνουμε χρήση τριών μεθόδων. -Της μεθόδου μέγιστης καθόδου (Steepest Descent), της μεθόδου Newton, και της Levenberg-Marquardt. -Ακόμα για κάθε μία από αυτές θα υλοποιήσουμε τρεις διαφορετικές τεχνικές υπολογισμού βήματος. +Η παρούσα εργασία αφορά το πρόβλημα της ελαχιστοποίησης μιας δοσμένης συνάρτησης πολλών μεταβλητών $f: \mathbb{R}^n \rightarrow \mathbb{R}$ με περιορισμούς χρησιμοποιώντας τη μέθοδο μέγιστης καθόδου με προβολή. +Η μέθοδος αυτή θα εκτελεστεί σε αντιπαραβολή με την αντίστοιχη μέθοδο χωρίς περιορισμούς από την προηγούμενη εργασία. +Για το λόγο αυτό χρησιμοποιούμε των κώδικα της προηγούμενης εργασίας με κάποιες τροποποιήσεις, όπως θα δούμε και παρακάτω. -\section{Παραδοτέα} +\subsection{Παραδοτέα} Τα παραδοτέα της εργασίας αποτελούνται από: \begin{itemize} \item Την παρούσα αναφορά. @@ -67,16 +64,25 @@ \item Το \href{https://git.hoo2.net/hoo2/OptimizationTechniques/src/branch/master/Work%203}{σύνδεσμο} με το αποθετήριο που περιέχει όλο το project με τον κώδικα της MATLAB, της αναφοράς και τα παραδοτέα. \end{itemize} -\section{Προγραμματιστική προσέγγιση} +\subsection{Προγραμματιστική προσέγγιση} Για τον προγραμματισμό και εκτέλεση των μεθόδων της παρούσας εργασίας έγινε χρήση της MATLAB. Στον κατάλογο \textbf{scripts}, περιέχονται όλες οι μέθοδοι και οι τεχνικές υπολογισμού βημάτων με τη μορφή συναρτήσεων καθώς και scripts που τις καλούν. Για κάθε μία μέθοδο (ένα θέμα της εργασίας), υπάρχει το αντίστοιχο script που περιέχει τους υπολογισμούς, τις κλήσεις των μεθόδων και τη δημιουργία των διαγραμμάτων. -Για το πρώτο θέμα το αρχείο Script\_1\_Plots.m για το δεύτερο το Script\_2\_Steepest\_descent.m και ούτω καθεξής. -Στην παρούσα εργασία η υλοποίηση του κώδικα ακολουθεί την τεχνική της προηγούμενης εργασίας και “ομαδοποιεί” αρκετές λειτουργίες. +Για το πρώτο θέμα το αρχείο Script\_1\_SteepDesc.m για το δεύτερο το Script\_2\_SteepDesc\_Proj.m και ούτω καθεξής. +Η μέθοδος μέγιστης καθόδου (αρχείο: \textbf{method\_SteepDesc.m}) είναι η ίδια με αυτή της προηγούμενης εργασίας με τη μόνη διαφορά ότι τροποποιήθηκε ώστε η αντικειμενική συνάρτηση να δέχεται διάνυσμα ώς όρισμα και όχι δύο διαφορετικές μεταβλητές $x, y$. +Αυτό ακολουθήθηκε και για την έκδοση με προβολή και φυσικά είχε αντίκτυπο και στις υπόλοιπες συναρτήσεις, όπως η κλίση ή ο Εσσιανός. +Στην παρούσα εργασία η υλοποίηση του κώδικα ακολουθεί την προσέγγιση των προηγούμενων εργασιών. Πιο συγκεκριμένα. +\subsection{Μέθοδοι επιλογής βήματος} +Εφόσον στην προηγούμενη εργασία οι μέθοδοι επιλογής βήματος ήταν ανεξάρτητες από την μέθοδο υπολογισμού του ελάχιστου και εφόσον χρησιμοποιούμε τον ίδιο κώδικά και στην παρούσα εργασία, αυτός ο τρόπος σχεδίασης παρέμεινε. +Ουσιαστικά για κάθε ένα τρόπο υπολογισμού του $\gamma_k$, υπάρχει αντίστοιχη συνάρτηση, με κοινό interface. +Αυτό έχει τη μορφή: \textit{\textbf{gamma\_(f, grad\_f, dk, xk)}}, όπου το \textbf{f} είναι η αντικειμενική συνάρτηση, \textbf{grad\_f} η συνάρτηση κλίσης της, \textbf{dk} η τιμή της συνάρτησης κλίσης στο xk και \textbf{xk} το σημείο ενδιαφέροντος. +Έτσι οι μέθοδοι αντιγράφηκαν και εδώ για ολότητα, ακόμα και αν για την παρούσα εργασία χρησιμοποιείται μόνο το σταθερό βήμα $\gamma_k$. + \subsection{Symbolic expression functions} -Μία ακόμη προγραμματιστική τεχνική που ακολουθήθηκε είναι η χρήση \textbf{symbolic expression} για την αναπαράσταση των διαφορετικών αντικειμενικών συναρτήσεων. +Μία ακόμη προγραμματιστική τεχνική που ακολουθήθηκε είναι η χρήση \textbf{symbolic expression} για την αναπαράσταση της αντικειμενικής συνάρτησης. +Η εξήγηση υπάρχει και στις προηγούμενες εργασίες αλλά την παραθέτουμε εδώ για ολότητα. Ο λόγος που επιλέχθηκε είναι η \textbf{δυνατότητα εξαγωγής ενός symbolic expression που αναπαριστά την κλίση $\nabla f$ και τον Εσσιανό $\nabla^2f$ μιας συνάρτησης} από την MATLAB, κάνοντας χρήση των εντολών \textit{gradient()} και \textit{hessian()}. Αν αντίθετα χρησιμοποιούσαμε απλές συναρτήσεις, πολυώνυμα ή lambdas για την αναπαράσταση των αντικειμενικών συναρτήσεων, τότε για τον υπολογισμό της κλίσης και του Εσσιανού θα έπρεπε: \begin{itemize} @@ -88,6 +94,104 @@ Για το λόγο αυτό, ενώ η συνάρτηση δίνεται ως symbolic expression, μέσω αυτής υπολογίζονται αυτόματα η κλίση, ο Εσσιανός αλλά και οι “κανονικές” συναρτήσεις MATLAB που τις υλοποιούν. Έτσι έχουμε την ακριβή αναπαράσταση της κλίσης και του Εσσιανού ως συναρτήσεις χωρίς να πληρώνουμε το κόστος της subs(). - +\section{Απεικόνιση της συνάρτησης} +Η συνάρτηση με την οποία ασχολούμαστε στην παρούσα εργασία είναι η: +\boldmath +\begin{equation} + f: \mathbb{R}^2 \rightarrow \mathbb{R}, f(x) = \frac{1}{3}{x_1}^2 + 3{x_2}^2, x = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} +\end{equation} +\label{eq:ObjectiveFunction} +Όπου $ -10 \leq x_1 \leq 5 $ και $ -8 \leq x_2 \leq 12 $ \\ +\unboldmath +Στο παρακάτω σχήμα \ref{fig:plot3dFunction} φαίνεται η τρισδιάστατη απεικόνιση της συνάρτησης. +\InsertFigure{!h}{0.8}{fig:plot3dFunction}{../scripts/figures/Plot_Function.png}{Γραφική παράσταση της f} + +Από το σχήμα μπορούμε πολύ εύκολα να διακρίνουμε ότι η συνάρτηση είναι κυρτή στο σύνολο των περιορισμών της εκφώνησης $ -10 \leq x_1 \leq 5 $ και $ -8 \leq x_2 \leq 12 $. +Για να πάρουμε μια καλύτερη αίσθηση για το που βρίσκεται το τοπικό ελάχιστο της $f$, παρακάτω παραθέτουμε ένα γράφημα με τις ισοβαρείς καμπύλες της $f$. +\InsertFigure{H}{0.8}{fig:plotContour}{../scripts/figures/Plot_Contour.png}{Ισοβαρείς της f} + +Από το παραπάνω σχήμα \ref{fig:plotContour} επιβεβαιώνεται και γραφικά το ελάχιστο στο σημείο $(0,0)$. +Τα διαγράμματα για τη μέθοδο δημιουργούνται εκτελώντας το αρχείο \textbf{Script\_0\_Plots.m} + +\section{Μέθοδος Μέγιστης Καθόδου χωρίς περιορισμούς - Θέμα 1} +Εφαρμόζοντας την μέθοδο μέγιστης καθόδου από την προηγούμενη εργασία, με ακρίβεια $\epsilon = 0.001$, για τα βήματα $\gamma_k$ της εκφώνησης, παρατηρούμε ότι η μέθοδος συγκλίνει στο ελάχιστο για μικρά $\gamma_k$ ενώ αποκλίνει για μεγάλα \boldmath$\gamma_k > 0.34$\unboldmath. +Από τις δοκιμές φαίνεται ότι το σημείο εκκίνησης δεν παίζει ρόλο και για αυτό επιλέξαμε να παραθέσουμε τα ευρήματά μας από το σημείο $(5,-5)$, για αντιπαραβολή με το επόμενο βήμα της εκφώνησης. +\InsertFigure{H}{0.6}{fig:StDes_Iter_o_gamma_2}{../scripts/figures/StDes_Iter_o_gamma_1.png}{Αριθμός επαναλήψεων για διαφορετικές τιμές $\gamma_k$ [Μέγιστη Κάθοδος].} +Επίσης παρατηρούμε ότι για μικρό \boldmath$\gamma_k = 0.1$ η σύγκλιση είναι ομαλή, ενώ για μεγάλο $\gamma_k = 0.3$ \unboldmath παρουσιάζει ταλάντωση κατά την σύγκλιση. +Παρακάτω παραθέτουμε την πορεία σύγκλισης και απόκλισης για τις διαφορετικές τιμές του $\gamma_k$. + +\begin{figure}[ht] + \centering + % First row + \begin{subfigure}{0.45\textwidth} + \centering + \includegraphics[width=\linewidth]{../scripts/figures/StDes_gamma_0.1.png} + \caption{$\gamma_k = 0.1$} + \label{fig:StDes_gamma_0.1} + \end{subfigure} + \hfill + \begin{subfigure}{0.45\textwidth} + \centering + \includegraphics[width=\linewidth]{../scripts/figures/StDes_gamma_0.3.png} + \caption{$\gamma_k = 0.3$} + \label{fig:StDes_gamma_0.3} + \end{subfigure} + + % Second row + \vspace{1em} + \begin{subfigure}{0.45\textwidth} + \centering + \includegraphics[width=\linewidth]{../scripts/figures/StDes_gamma_3.png} + \caption{$\gamma_k = 3$} + \label{fig:StDes_gamma_3} + \end{subfigure} + \hfill + \begin{subfigure}{0.45\textwidth} + \centering + \includegraphics[width=\linewidth]{../scripts/figures/StDes_gamma_5.png} + \caption{$\gamma_k = 5$} + \label{fig:StDes_gamma_5} + \end{subfigure} + + \caption{Σύγκριση της μεθόδου Steepest descent για διαφορετικά $\gamma_k$} + \label{fig:StDes_gamma} +\end{figure} + +Απόδειξη... + +\section{Μέθοδος Μέγιστης Καθόδου με προβολή} +Πριν περάσουμε στις υπόλοιπες απαιτήσεις της εργασίας θα θέλαμε να παραθέσουμε κάποιες πληροφορίες για την υλοποίηση της μεθόδου μέγιστης καθόδου με προβολή (αρχείο: \textbf{method\_SteepDesc\_Proj.m}). +Η συνάρτηση αυτή δέχεται ως είσοδο την αντικειμενική συνάρτηση και την συνάρτηση κλίσης καθώς και το σημείο εκκίνησης $x_k$ και το βήμα $s_k$. +Με τη βοήθεια της συνάρτησης \textit{ProjectionPoint()} \textbf{παίρνει πρώτα την προβολή} του $x_k$ στο διάστημα των περιορισμών αν αυτό χρειάζεται \textbf{και έπειτα εφαρμόζει τον αλγόριθμο}. +Αυτό σημαίνει ότι μπορεί να χρησιμοποιηθεί και για σημεία εκκίνησης εκτός του συνόλου των περιορισμών. +Ο αλγόριθμος είναι παρόμοιος με αυτόν της προηγούμενης εργασίας με τη διαφορά ότι η διεύθυνση $d_k$ επιλέγεται από τη σχέση: +\[ + d_k = Pr_X\{ x_k - s_k \nabla f(x_k)\} - x_k +\] +Δηλαδή εφαρμόζουμε πρώτα τη μέθοδο μέγιστης καθόδου με βήμα $s_k$ στην κατεύθυνση $-\nabla f$ και έπειτα προβάλουμε το σημείο στο σύνολο $X$ και χρησιμοποιούμε αυτό ως διεύθυνση με βήμα $\gamma_k$. + +\section{Μέθοδος Μέγιστης Καθόδου με προβολή $s_k = 5, \gamma_k = 0.5$ - Θέμα 2} +Εφαρμόζοντας τη μέθοδο για ακρίβεια $\epsilon = 0.01$, $s_k = 5$ και $\gamma_k = 0.5$ έχουμε: +\InsertFigure{H}{0.8}{fig:StDesProj_sk_5_gamma_0.5}{../scripts/figures/StDesProj_sk_5_gamma_0.5.png}{Μέθοδος μέγιστης καθόδου με προβολή για $s_k = 5, \gamma_k = 0.5$.} + +Παρατηρούμε πως ενώ η μέθοδος ταλαντώνει και δεν συγκλίνει στο ελάχιστο \textbf{όπως και η αντίστοιχη εκτέλεση της μέγιστης καθόδου χωρίς περιορισμούς με το ίδιο} \boldmath$\gamma_k$\unboldmath. +Παρόλα αυτά όμως, η ταλάντωση λαμβάνει χώρα \textbf{εντός του συνόλου των περιορισμών} της εκφώνησης. + +\section{Μέθοδος Μέγιστης Καθόδου με προβολή $s_k = 15, \gamma_k = 0.1$ - Θέμα 3} +Εφαρμόζοντας τη μέθοδο για ακρίβεια $\epsilon = 0.01$, $s_k = 15$ και $\gamma_k = 0.1$ έχουμε: +\InsertFigure{H}{0.8}{fig:StDesProj_sk_15_gamma_0.1}{../scripts/figures/StDesProj_sk_15_gamma_0.1.png}{Μέθοδος μέγιστης καθόδου με προβολή για $s_k = 15, \gamma_k = 0.1$.} + +Εδώ παρατηρούμε πως ενώ το $\gamma_k$ έχει επιλεγεί στο εύρος που οδηγεί σε σύγκλιση, το αντίστοιχο βήμα $s_k$ είναι πολύ μεγάλο, με αποτέλεσμα η μέθοδος να ταλαντώνει και πάλι. +Αυτή τη φορά μόνο στον άξονα $x_2$. + +\section{Μέθοδος Μέγιστης Καθόδου με προβολή $s_k = 0.1, \gamma_k = 0.2$ - Θέμα 4} +Αρχικά παρατηρούμε πως το σημείο δεν είναι εφικτό, καθώς είναι εκτός του συνόλου των περιορισμών της εκφώνησης. +Αυτό βέβαια δεν μας αποτρέπει από την εφαρμογή της μεθόδου, καθώς αρχικά μπορούμε να προβάλουμε το σημείο στο σύνολο και να εφαρμόσουμε τη μέθοδο έπειτα. +Ακόμα, αυτή τη φορά οι τιμές των βημάτων $s_k, \gamma_k$, έχουν επιλεγεί μέσα στο εύρος για το οποίο έχουμε σύγκλιση, επομένως αναμένουμε η μέθοδος να συγκλίνει στο ελάχιστο. +Εφαρμόζοντας τη μέθοδο για ακρίβεια $\epsilon = 0.01$ έχουμε: +\InsertFigure{H}{0.8}{fig:StDesProj_sk_0.1_gamma_0.2}{../scripts/figures/StDesProj_sk_0.1_gamma_0.2.png}{Μέθοδος μέγιστης καθόδου με προβολή για $s_k = 0.1, \gamma_k = 0.2$.} + +\section{Συμπεράσματα} +... \end{document} diff --git a/Work 3/scripts/GivenEnv.asv b/Work 3/scripts/GivenEnv.asv deleted file mode 100644 index 2979d11..0000000 --- a/Work 3/scripts/GivenEnv.asv +++ /dev/null @@ -1,33 +0,0 @@ -% Given environment - -clear; -% Setup the function under test -syms x [2 1] real; -fexpr = (1/3)*x(1)^2 +3*x(2)^2; -title_fun = "$f(x) = frac{1}{3}{x_1}^2 + 3{x_2}^2$"; - -% Calculate the gradient and Hessian -grad_fexpr = gradient(fexpr, x); % Gradient of f -hessian_fexpr = hessian(fexpr, x); % Hessian of f - -% Convert symbolic expressions to MATLAB functions -fun = matlabFunction(fexpr, 'Vars', {x}); % Function -grad_fun = matlabFunction(grad_fexpr, 'Vars', {x}); % Gradient -hessian_fun = matlabFunction(hessian_fexpr, 'Vars', {x}); % Hessian - -% Minimum reference -%Freference = @(x) x(1).^5 .* exp(-x(1).^2 - x(2).^2); -%[Xmin, Fmin] = fminsearch(Freference, [-1, -1]); - -% Amijo globals -global amijo_beta; % Step reduction factor in [0.1, 0.5] (typical range: [0.1, 0.8]) -global amijo_sigma; % Sufficient decrease constant in [1e-5, 0.1] (typical range: [0.01, 0.3]) - -%fixed step size globals -global gamma_fixed_step - -global image_width, -global image_height; - -image_width = 960; -image_height = 640; \ No newline at end of file diff --git a/Work 3/scripts/Script_1_SteepDesc.m b/Work 3/scripts/Script_1_SteepDesc.m index 6152f75..531ac7e 100644 --- a/Work 3/scripts/Script_1_SteepDesc.m +++ b/Work 3/scripts/Script_1_SteepDesc.m @@ -3,7 +3,7 @@ GivenEnv % Define parameters max_iter = 1000; % Maximum iterations -tol = 1e-4; % Tolerance +tol = 0.001; % Tolerance % Point x0 = (1, 1) % ========================================================================= @@ -15,15 +15,26 @@ gf = grad_fun(x0); hf = hessian_fun(x0); fprintf('Initial point (%d, %d), f = %f, grad = [%f;%f], hessian = [%f %f ; %f %f]=> Method applicable\n', x0, f, gf, hf); -for g=[0.1, 0.3, 0.5, 3, 5] + +k = zeros(100, 1); +j = 1; +n = linspace(0.1, 1.5, 100); +for g = n + gamma_fixed_step = g; + [~, ~, k(j)] = method_SteepDesc(fun, grad_fun, x0, tol, max_iter, 'fixed'); + j = j + 1; +end +plotItersOverGamma(n, k, "Iteration for different $\gamma$ values", "figures/StDes_Iter_o_gamma_" + point + ".png"); + +for g=[0.1, 0.3, 3, 5] gamma_fixed_step = g; [x_fixed, f_fixed, kk] = method_SteepDesc(fun, grad_fun, x0, tol, max_iter, 'fixed'); fprintf('Fixed step g=%f: Initial point (%f, %f), steps:%d, Final (x1,x2)=(%f, %f), f(x1,x2)=%f\n', g, x0, kk, x_fixed(:, end), f_fixed(end)); if g <= 1 - plotPointsOverContour(x_fixed, fun, XSetLimmits(1, :), XSetLimmits(2, :), 100, point_str + ": Steepest descent $\gamma$ = " + gamma_fixed_step, ""); + plotPointsOverContour(x_fixed, fun, XSetLimmits(1, :), XSetLimmits(2, :), 100, point_str + ": Steepest descent $\gamma$ = " + gamma_fixed_step, "figures/StDes_gamma_" + g + ".png"); else - plotPointsOverContour(x_fixed, fun, [-500, 500], [-500, 500], 100, point_str + ": Steepest descent $\gamma$ = " + gamma_fixed_step, ""); + plotPointsOverContour(x_fixed, fun, [-500, 500], [-500, 500], 100, point_str + ": Steepest descent $\gamma$ = " + gamma_fixed_step, "figures/StDes_gamma_" + g + ".png"); end end diff --git a/Work 3/scripts/Script_2_SteepDesc_Proj.m b/Work 3/scripts/Script_2_SteepDesc_Proj.m index 3a9eabd..4114454 100644 --- a/Work 3/scripts/Script_2_SteepDesc_Proj.m +++ b/Work 3/scripts/Script_2_SteepDesc_Proj.m @@ -23,7 +23,7 @@ fprintf('Initial point (%d, %d), f = %f, grad = [%f;%f], hessian = [%f %f ; %f % gamma_fixed_step = gamma; [x_fixed, f_fixed, kk] = method_SteepDesc_Proj(fun, grad_fun, x0, sk_step, XSetLimmits, tol, max_iter, 'fixed'); fprintf('Fixed step g=%f: Initial point (%f, %f), steps:%d, Final (x1,x2)=(%f, %f), f(x1,x2)=%f\n', gamma_fixed_step, x0, kk, x_fixed(:, end), f_fixed(end)); -plotPointsOverContour(x_fixed, fun, XSetLimmits(1, :), XSetLimmits(2, :), 100, point_str + ": Steepest descent $\gamma$ = " + gamma_fixed_step, ""); +plotPointsOverContour(x_fixed, fun, XSetLimmits(1, :), XSetLimmits(2, :), 100, point_str + ": Steepest descent proj $s_k$ = " + sk_step + ", $\gamma$ = " + gamma_fixed_step, "figures/StDesProj_sk_" + sk_step + "_gamma_" + gamma + ".png"); %[x_minimized, f_minimized, kk] = method_SteepDesc_Proj(fun, grad_fun, x0, sk_step, XSetLimmits, tol, max_iter, 'minimized'); %fprintf('Minimized f: Initial point (%f, %f), steps:%d, Final (x1,x2)=(%f, %f), f(x1,x2)=%f\n', x0, kk, x_fixed(:, end), f_fixed(end)); diff --git a/Work 3/scripts/Script_3_SteepDesc_Proj.m b/Work 3/scripts/Script_3_SteepDesc_Proj.m index 144a1de..4a6baff 100644 --- a/Work 3/scripts/Script_3_SteepDesc_Proj.m +++ b/Work 3/scripts/Script_3_SteepDesc_Proj.m @@ -8,7 +8,7 @@ max_iter = 1000; % Maximum iterations % ========================================================================= x0 = [-5, 10]'; gamma = 0.1; -sk_step = 55; +sk_step = 15; tol = 0.01; % Tolerance @@ -23,5 +23,5 @@ fprintf('Initial point (%d, %d), f = %f, grad = [%f;%f], hessian = [%f %f ; %f % gamma_fixed_step = gamma; [x_fixed, f_fixed, kk] = method_SteepDesc_Proj(fun, grad_fun, x0, sk_step, XSetLimmits, tol, max_iter, 'fixed'); fprintf('Fixed step g=%f: Initial point (%f, %f), steps:%d, Final (x1,x2)=(%f, %f), f(x1,x2)=%f\n', gamma_fixed_step, x0, kk, x_fixed(:, end), f_fixed(end)); -plotPointsOverContour(x_fixed, fun, XSetLimmits(1, :), XSetLimmits(2, :), 100, point_str + ": Steepest descent $\gamma$ = " + gamma_fixed_step, ""); +plotPointsOverContour(x_fixed, fun, XSetLimmits(1, :), XSetLimmits(2, :), 100, point_str + ": Steepest descent proj $s_k$ = " + sk_step + ", $\gamma$ = " + gamma_fixed_step, "figures/StDesProj_sk_" + sk_step + "_gamma_" + gamma + ".png"); diff --git a/Work 3/scripts/Script_4_SteepDesc_Proj.m b/Work 3/scripts/Script_4_SteepDesc_Proj.m index 760bb2e..6af77da 100644 --- a/Work 3/scripts/Script_4_SteepDesc_Proj.m +++ b/Work 3/scripts/Script_4_SteepDesc_Proj.m @@ -23,5 +23,5 @@ fprintf('Initial point (%d, %d), f = %f, grad = [%f;%f], hessian = [%f %f ; %f % gamma_fixed_step = gamma; [x_fixed, f_fixed, kk] = method_SteepDesc_Proj(fun, grad_fun, x0, sk_step, XSetLimmits, tol, max_iter, 'fixed'); fprintf('Fixed step g=%f: Initial point (%f, %f), steps:%d, Final (x1,x2)=(%f, %f), f(x1,x2)=%f\n', gamma_fixed_step, x0, kk, x_fixed(:, end), f_fixed(end)); -plotPointsOverContour(x_fixed, fun, XSetLimmits(1, :), XSetLimmits(2, :), 100, point_str + ": Steepest descent $\gamma$ = " + gamma_fixed_step, ""); +plotPointsOverContour(x_fixed, fun, XSetLimmits(1, :), XSetLimmits(2, :), 100, point_str + ": Steepest descent proj $s_k$ = " + sk_step + ", $\gamma$ = " + gamma_fixed_step, "figures/StDesProj_sk_" + sk_step + "_gamma_" + gamma + ".png"); diff --git a/Work 3/scripts/figures/Plot_Contour.png b/Work 3/scripts/figures/Plot_Contour.png index 2291ed3..4ef2b5e 100644 Binary files a/Work 3/scripts/figures/Plot_Contour.png and b/Work 3/scripts/figures/Plot_Contour.png differ diff --git a/Work 3/scripts/figures/Plot_Function.png b/Work 3/scripts/figures/Plot_Function.png index fd059fd..48daa23 100644 Binary files a/Work 3/scripts/figures/Plot_Function.png and b/Work 3/scripts/figures/Plot_Function.png differ diff --git a/Work 3/scripts/figures/StDesProj_gamma_0.5_sk_5.png b/Work 3/scripts/figures/StDesProj_gamma_0.5_sk_5.png new file mode 100644 index 0000000..4c76c18 Binary files /dev/null and b/Work 3/scripts/figures/StDesProj_gamma_0.5_sk_5.png differ diff --git a/Work 3/scripts/figures/StDesProj_sk_0.1_gamma_0.2.png b/Work 3/scripts/figures/StDesProj_sk_0.1_gamma_0.2.png new file mode 100644 index 0000000..a3b5f1c Binary files /dev/null and b/Work 3/scripts/figures/StDesProj_sk_0.1_gamma_0.2.png differ diff --git a/Work 3/scripts/figures/StDesProj_sk_15_gamma_0.1.png b/Work 3/scripts/figures/StDesProj_sk_15_gamma_0.1.png new file mode 100644 index 0000000..7cbf018 Binary files /dev/null and b/Work 3/scripts/figures/StDesProj_sk_15_gamma_0.1.png differ diff --git a/Work 3/scripts/figures/StDesProj_sk_5_gamma_0.5.png b/Work 3/scripts/figures/StDesProj_sk_5_gamma_0.5.png new file mode 100644 index 0000000..fed0c54 Binary files /dev/null and b/Work 3/scripts/figures/StDesProj_sk_5_gamma_0.5.png differ diff --git a/Work 3/scripts/figures/StDes_Iter_o_gamma_1.png b/Work 3/scripts/figures/StDes_Iter_o_gamma_1.png new file mode 100644 index 0000000..f9e47a3 Binary files /dev/null and b/Work 3/scripts/figures/StDes_Iter_o_gamma_1.png differ diff --git a/Work 3/scripts/figures/StDes_fixed_1.png b/Work 3/scripts/figures/StDes_fixed_1.png deleted file mode 100644 index 59a8cbe..0000000 Binary files a/Work 3/scripts/figures/StDes_fixed_1.png and /dev/null differ diff --git a/Work 3/scripts/figures/StDes_fixed_2.png b/Work 3/scripts/figures/StDes_fixed_2.png deleted file mode 100644 index f51f472..0000000 Binary files a/Work 3/scripts/figures/StDes_fixed_2.png and /dev/null differ diff --git a/Work 3/scripts/figures/StDes_gamma_0.1.png b/Work 3/scripts/figures/StDes_gamma_0.1.png new file mode 100644 index 0000000..7e18104 Binary files /dev/null and b/Work 3/scripts/figures/StDes_gamma_0.1.png differ diff --git a/Work 3/scripts/figures/StDes_gamma_0.3.png b/Work 3/scripts/figures/StDes_gamma_0.3.png new file mode 100644 index 0000000..1571cf3 Binary files /dev/null and b/Work 3/scripts/figures/StDes_gamma_0.3.png differ diff --git a/Work 3/scripts/figures/StDes_gamma_3.png b/Work 3/scripts/figures/StDes_gamma_3.png new file mode 100644 index 0000000..ab28a42 Binary files /dev/null and b/Work 3/scripts/figures/StDes_gamma_3.png differ diff --git a/Work 3/scripts/figures/StDes_gamma_5.png b/Work 3/scripts/figures/StDes_gamma_5.png new file mode 100644 index 0000000..6f9c6f9 Binary files /dev/null and b/Work 3/scripts/figures/StDes_gamma_5.png differ