%
% Optimization Techniques Work 1 report
%
% authors:
%   Χρήστος Χουτουρίδης ΑΕΜ 8997
%   cchoutou@ece.auth.gr


\documentclass[a4paper, 11pt]{AUTHReport}

% Document configuration
\AuthorName{Χρήστος Χουτουρίδης}
\AuthorMail{cchoutou@ece.auth.gr}
\AuthorAEM{8997}

% \CoAuthorName{CoAuthor Name}
% \CoAuthorMail{CoAuthor Mail}
% \CoAuthorAEM{AEM}

% \WorkGroup{Ομάδα Χ}

\DocTitle{1η Εργαστηριακή Άσκηση}
\DocSubTitle{Ελαχιστοποίηση κυρτής συνάρτησης μιας μεταβλητής σε δοσμένο διάστημα}

\Department{Τμήμα ΗΜΜΥ. Τομέας Ηλεκτρονικής}
\ClassName{Τεχνικές Βελτιστοποίησης}

\InstructorName{Γ. Ροβιθάκης}
\InstructorMail{rovithak@auth.gr}
\CurrentDate{\today}

\usepackage{capt-of}
\usepackage{enumitem}
\usepackage{tabularx}
\usepackage{array}

\begin{document}

\setlist[itemize]{topsep=0pt, partopsep=0pt, itemsep=3pt, parsep=3pt}

\InsertTitle

%\tableofcontents

\sloppy

\section{Εισαγωγή}
Η παρούσα εργασία αφορά σε αριθμητικές μεθόδους ευρέσεως ελαχίστων σε πεπερασμένα διαστήματα, που χρησιμοποιούνται σε προβλήματα βελτιστοποίησης.
Οι αριθμητικές μέθοδοι βελτιστοποίησης συναρτήσεων αναπτύχθηκαν ιδιαίτερα στα μέσα του 20ού αιώνα, καθώς η εύρεση ελαχίστων (ή και μεγίστων) άρχισε να έχει μεγάλη πρακτική σημασία, ειδικά σε τομείς όπως η οικονομία, η φυσική, ή η ανάλυση συστημάτων.
Η μέθοδος της \textbf{διχοτόμου} έχει ρίζες στον Νεύτωνα και τον Ντεκάρτ, με τη διχοτόμηση να χρησιμοποιείται αρχικά για τον υπολογισμό της ρίζας μιας συνάρτησης και αργότερα να εξελίσσεται σε τεχνική για βελτιστοποίηση σε κυρτές συναρτήσεις.
Η μέθοδος του \textbf{χρυσού τομέα} προτάθηκε στις αρχές του 20ού αιώνα και εφαρμόστηκε στην βελτιστοποίηση τη δεκαετία του 1950.
Στη μέθοδό αυτή γίνεται χρήση της αναλογίας της "χρυσής τομής," η οποία προέρχεται από την αρχαία ελληνική γεωμετρία και χρησιμοποιούνταν για την κατασκευή αρμονικών διαστάσεων.
Η μέθοδος \textbf{Fibonacci} εισήχθηκε τη δεκαετία του 1960 και χρησιμοποιεί την ακολουθία Fibonacci, γνωστή ήδη από το 1202 από τον Ιταλό μαθηματικό Λεονάρντο της Πίζας (Fibonacci).
Η μέθοδος εκμεταλλεύεται τις ιδιότητες της ακολουθίας για να περιορίσει το διάστημα αναζήτησης πιο αποδοτικά σε σύγκριση με τον χρυσό τομέα.
Τέλος, η μέθοδος \textbf{διχοτόμου με χρήση παραγώγου}, αξιοποιεί τη χρήση των παραγώγων που εισήγαγε ο Νεύτων, για να υπολογίσει την κατεύθυνση προς το ελάχιστο.
Αυτές οι μέθοδοι αποτέλεσαν το θεμέλιο για την ανάπτυξη πιο σύγχρονων τεχνικών βελτιστοποίησης, οι οποίες συνεχίζουν να εξελίσσονται στον χώρο της μηχανικής μάθησης και των μαθηματικών.

\section{Παραδοτέα}
Τα παραδοτέα της εργασίας αποτελούνται από:
\begin{itemize}
    \item Την παρούσα αναφορά.
    \item Τον κατάλογο \textbf{scripts/}, που περιέχει τον κώδικα της MATLAB.
    \item Το \href{https://git.hoo2.net/hoo2/OptimizationTechniques/src/branch/master/Work%201}{σύνδεσμο} με το αποθετήριο που περιέχει όλο το project με τον κώδικα της MATLAB, της αναφοράς και τα παραδοτέα.
\end{itemize}


\section{Προγραμματιστική προσέγγιση}
Για τον προγραμματισμό και εκτέλεση των μεθόδων της παρούσας εργασίας έγινε χρήση της MATLAB.
Στον κατάλογο \textbf{scripts}, περιέχονται όλες οι μέθοδοι με τη μορφή συναρτήσεων καθώς και scripts που τις καλούν.
Το κεντρικό script που εκτελεί τον κώδικα όλης της εργασίας είναι το \textbf{Work1.m}.
Στην παρούσα εργασία η υλοποίηση του κώδικα δεν ακολουθεί επακριβώς τη ροή των θεμάτων της εκφώνησης.
Αντίθετα επιλέχθηκε μια διαφορετική προγραμματιστική προσέγγιση που ενοποιεί τα κοινά ζητούμενα από όλα τα θέματα.
Πιο συγκεκριμένα.

\subsection{Πολυμορφική κλήση μεθόδων}
\label{subsec:polymorphic-calls}
Εφόσον για κάθε θέμα ένα από τα ζητούμενα ήταν ο υπολογισμός και η απεικόνιση του αριθμού των κλήσεων των μεθόδων για διαφορετικές τιμές της παραμέτρου lambda, δημιουργήσαμε τη συνάρτηση \textbf{\emph{iterations\_over\_lambda()}} η οποία καλεί μια \textit{δοθείσα} μέθοδο για κάθε μία από τις αντικειμενικές συναρτήσεις και απεικονίζει τα αποτελέσματα.
Ομοίως, για κάθε θέμα, ζητούμενο ήταν η απεικόνιση της σύγκλισης των διαστημάτων σε κάθε επανάληψη.
Αντίστοιχα λοιπόν δημιουργήσαμε τη συνάρτηση \textbf{\emph{interval\_over\_iterations()}} η οποία ομοίως καλεί μια \textit{δοθείσα} μέθοδο για κάθε μία από τις αντικειμενικές συναρτήσεις.
Τέλος το κεντρικό script της εργασίας “Work1.m” καλεί σε βρόχο την κάθε μία από τις παραπάνω συναρτήσεις, για κάθε μία από τις μεθόδους, την οποία και περνάει ως όρισμα στη συνάρτηση.
\par
Οι παραπάνω συναρτήσεις λοιπόν, δέχονται τις μεθόδους ως ορίσματα και τις καλούν με αγνωστικιστικό τρόπο εσωτερικά.
Για το λόγο αυτό υλοποιήσαμε τις μεθόδους ώστε να έχουν \textbf{κοινό interface} ορισμάτων και επιστροφών, με αποτέλεσμα κάποιες μέθοδοι να έχουν ορίσματα που δεν χρησιμοποιούνται.
Το κέρδος όμως είναι ο πολυμορφικός τρόπος κλήσης των διαφορετικών μεθόδων, που απλοποιεί και μικραίνει τον κώδικα. \\
Έτσι όλες οι συναρτήσεις που υλοποιούν τις μεθόδους υπολογισμού ελαχίστου έχουν ως ορίσματα:
\begin{itemize}
    \item \textbf{fun\_expr}: Η αναπαράσταση της αντικειμενικής συνάρτησης ως symbolic expression.
    \item \textbf{alpha}: Η αρχή του διαστήματος αναζήτησης.
    \item \textbf{beta}: Το τέλος του διαστήματος αναζήτησης.
    \item \textbf{epsilon}: Η απόσταση από το μέσω του διαστήματος για τη μέθοδο της διχοτόμου και το μήκος του διαστήματος του τελικού βήματος για τη μέθοδο Fibonacci. \\
            \textit{\underline{Σημείωση}}: Στις υπόλοιπες μεθόδους το όρισμα δεν χρησιμοποιείται.
    \item \textbf{lambda}: Η ζητούμενη ακρίβεια.
\end{itemize}
Επίσεις όλες οι συναρτήσεις επιστρέφουν \textbf{[a, b, k, n]}:
\begin{itemize}
    \item \textbf{a}: Το διάνυσμα με όλες τις τιμές που παίρνει η αρχή του διαστήματος αναζήτησης σε κάθε επανάληψη.
    \item \textbf{b}: Το διάνυσμα με όλες τις τιμές που παίρνει το τέλος του διαστήματος αναζήτησης σε κάθε επανάληψη.
    \item \textbf{k}: Ο αριθμός των επαναλήψεων μέχρι να τερματιστεί ο αλγόριθμος.
    \item \textbf{n}: Ο αριθμός των κλήσεων της αντικειμενικής συνάρτησης.
\end{itemize}

\subsection{Symbolic sxpression functions}
Μία ακόμη προγραμματιστική τεχνική που ακολουθήθηκε είναι η χρήση \textbf{symbolic expression} για την αναπαράσταση των διαφορετικών αντικειμενικών συναρτήσεων.
Ο λόγος που επιλέχθηκε είναι η \textbf{δυνατότητα εξαγωγής ενός symbolic expression που αναπαριστά την παράγωγο μιας συνάρτησης} από την MATLAB, κάνοντας χρήση της εντολής diff().
Αν αντίθετα χρησιμοποιούσαμε απλές συναρτήσεις, πολυώνυμα ή lambdas για την αναπαράσταση των αντικειμενικών συναρτήσεων, τότε για τον υπολογισμό της παραγώγου θα έπρεπε:
\begin{itemize}
    \item Είτε να υπολογίζαμε αριθμητικά την παράγωγο μέσα στη μέθοδο της διχοτόμου, κάτι που θα εισήγαγε \textit{\textbf{αχρείαστο αριθμητικό σφάλμα}}.
    \item Είτε να κάναμε χρήση τριών επιπλέων συναρτήσεων (ή πολυωνύμων) για την αναπαράσταση των παραγώγων των αντικειμενικών συναρτήσεων, κάτι που ουσιαστικά θα δημιουργούσε \textit{\textbf{πλεονασμό πληροφορίας}}.
\end{itemize}
Η αναπαράσταση όμως με χρήση symbolic expression είναι πιο “βαριά” όταν χρειάζεται να υπολογίσουμε την τιμή μιας συνάρτησης σε κάποιο σημείο (subs(expr, number)).
Αυτό είναι κάτι που χρειάζεται εκτενώς στον κώδικά μας.
Για το λόγο αυτό, ενώ οι συναρτήσεις δύνονται ως symbolic expressions, εσωτερικά στις μεθόδους και όταν πρέπει να καλεστούν, μετατρέπονται σε MATLAB functions.
Έτσι έχουμε την ακριβή αναπαράσταση της παραγώγου ως συνάρτηση χωρίς να πληρώνουμε το κόστος της subs().

\section{Μέθοδος της διχοτόμου}
Η μέθοδος της διχοτόμου βρίσκει το τοπικό ελάχιστο μιας κυρτής συνάρτησης στο διάστημα $[a,b]$ \textbf{μειώνοντας διαδοχικά το εύρος του διαστήματος αναζήτησης}.
Αντί να διχοτομεί το διάστημα αυστηρά στο μέσο του, η μέθοδος αξιολογεί τη συνάρτηση σε δύο σημεία συμμετρικά γύρω από το μέσο και πολύ κοντά σε αυτό.
Με τον τρόπο αυτό \textbf{υπολογίζει έμμεσα την κλίση της συνάρτησης} κοντά στο μέσο.
Αν η κλίση είναι θετική, τότε το διάστημα αναζήτησης περιορίζεται στο αριστερό μισό.
Διαφορετικά περιορίζεται στο δεξί.
Αυτή η διαδικασία επαναλαμβάνεται μέχρι το μήκος του διαστήματος να γίνει μικρότερο από μια προκαθορισμένη ακρίβεια $\lambda$.
\par
Η μέθοδος στηρίζεται στην κυρτότητα της συνάρτησης, η οποία διασφαλίζει ότι το ελάχιστο βρίσκεται πάντα σε ένα από τη δύο μισά διαστήματα, καθώς οι κυρτές συναρτήσεις έχουν \textbf{μοναδικό τοπικό και ολικό ελάχιστο σε ένα κλειστό διάστημα}.
\par\textbf{Σύγκλιση}
\par
Η σύγκλιση της μεθόδου καθορίζεται από δύο βασικά κριτήρια:
\boldmath
\begin{enumerate}
    \item \textbf{Απαιτούμενη ακρίβεια ($\lambda$)}: Η διαδικασία σταματά όταν το μήκος του διαστήματος γίνει μικρότερο από $\lambda$.
    \item \textbf{Αριθμός επαναλήψεων και κλήσεις της αντικειμενικής συνάρτησης:} Ο μέγιστος αριθμός επαναλήψεων $k$ εξαρτάται από το αρχικό μήκος του διαστήματος $[a,b]$, την ακρίβεια $\lambda$ και την απόσταση των συμμετρικών σημείων από το μέσο $\epsilon$.
    Ο αριθμός των κλήσεων της αντικειμενικής συνάρτησης είναι πάντα $n = 2(k-1)$.
    Ο αριθμός ικανοποιεί την σχέση:
    \begin{equation} \label{eq:1}
        (\frac{1}{2})^\frac{n}{2} \geq \frac{b-a}{\lambda - 2\epsilon}
    \end{equation} \\[1ex]
    Από την παραπάνω σχέση επίσης μπορούμε να παρατηρήσουμε ότι για τιμές \textbf{$\epsilon \geq \frac{\lambda}{2}$} η μέθοδος \textbf{αποκλίνει} και κοντά στο $\frac{\lambda}{2}$ οι κλήσεις αυξάνονται σημαντικά.
\end{enumerate}
\unboldmath

\subsection{Υλοποίηση της μεθόδου της διχοτόμου}
Για τη μέθοδο της διχοτόμου υλοποιήσαμε την συνάρτηση \textbf{\emph{min\_bisection()}}.
Η συνάρτηση αυτή δέχεται τα ορίσματα που περιγράφονται παραπάνω στην παράγραφο \ref{subsec:polymorphic-calls}: \textbf{fun\_expr, alpha, beta, epsilon και lambda} και επιστρέφει τα διαστήματα αναζήτησης \textbf{a} και \textbf{b}, τον αριθμό των επαναλήψεων \textbf{k} καθώς και τον αριθμό των κλήσεων της αντικειμενικής συνάρτησης \textbf{n}.
Η συνάρτηση καλείται από τις:
\begin{itemize}
    \item \textbf{bisection\_over\_epsilon()}: \\
    Εδώ κρατάμε σταθερό το $\lambda = 0.01$ και καλούμε τη μέθοδο για διαφορετικές τιμές του $\epsilon \in [0.0001, \frac{\lambda}{2}-0.0001]$, για κάθε μία από τις συναρτήσεις $f_1, f_2, f_3$ μελετώντας τον αριθμό των κλήσεων.
    Παρατηρούμε πως κοντά στο $\frac{\lambda}{2}$ οι κλήσεις αυξάνονται κάτι που επιβεβαιώνει και τη σχέση \ref{eq:1}. \\
    \includegraphics[width=\textwidth]{../scripts/figures/iter_over_epsilon_min_bisection.png}
    \captionof{figure}{Κλήσεις της αντικειμενικής συνάρτησης για διάφορα $\epsilon$ [Μέθοδος Διχοτόμου].}
    \label{fig:iter_over_epsilon_bisection}

    \item \textbf{iterations\_over\_lambda()}: \\
    Εδώ κρατάμε σταθερό το $\epsilon = 0.001$ και καλούμε τη μέθοδο για διαφορετικές τιμές του $\lambda \in [2\epsilon+0.0001, 0.1]$, για κάθε μία από τις συναρτήσεις $f_1, f_2, f_3$ μελετώντας τον αριθμό των κλήσεων.
    Ομοίως οι κλήσεις αυξάνονται καθώς το $\lambda$ γίνεται μικρότερο επιβεβαιώνοντας τη σχέση \ref{eq:1}. \\
    Η αρχή του διαστήματος επιλέχθηκε ώστε να ικανοποιούνται τα κριτήρια σύγκλισης. \\
    \includegraphics[width=\textwidth]{../scripts/figures/iter_over_lambda_min_bisection.png}
    \captionof{figure}{Κλήσεις της αντικειμενικής συνάρτησης για διάφορα $\lambda$ [Μέθοδος Διχοτόμου].}
    \label{fig:iter_over_lambda_bisection}

    \item \textbf{interval\_over\_iterations()}: \\
    Εδώ κρατάμε σταθερό το $\epsilon = 0.001$ και καλούμε τη μέθοδο για τρεις διαφορετικές τιμές του $\lambda \in \{2\epsilon+0.0001, \frac{2\epsilon+0.0001}{2}, 0.1\}$, για κάθε μία από τις συναρτήσεις $f_1, f_2, f_3$ μελετώντας τη σύγκλιση του διαστήματος αναζήτησης σε σχέση με τον αριθμό των επαναλήψεων. \\
    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_bisection_fun1.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_1$ για 3 τιμές του $\lambda$ [Μέθοδος Διχοτόμου].}
    \label{fig:interval_over_iter_bisection_fun1}

    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_bisection_fun2.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_2$ για 3 τιμές του $\lambda$ [Μέθοδος Διχοτόμου].}
    \label{fig:interval_over_iter_bisection_fun2}

    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_bisection_fun3.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_3$ για 3 τιμές του $\lambda$ [Μέθοδος Διχοτόμου].}
    \label{fig:interval_over_iter_bisection_fun3}
\end{itemize}

\subsection{Παρατηρήσεις για τη μέθοδο της διχοτόμου}
Η μέθοδος της διχοτόμου έχει χαρακτηριστικά που την καθιστούν απλή και σταθερή για εύρεση του ελαχίστου.
Μερικές παρατηρήσεις που σχετίζονται με την μέθοδο:
\boldmath
\begin{itemize}
    \item \textbf{Ταχύτητα σύγκλησης - Αριθμός κλήσεων}:
    Η μέθοδος της διχοτόμου έχει λογαριθμική ταχύτητα σύγκλισης.
    Σε κάθε βήμα μειώνουμε το μήκος του διαστήματος κατά το μισό.
    Ειδικότερα, η \textbf{χρονική πολυπλοκότητα} της είναι $O(log_2(\frac{b-a}{\lambda}))$, κάτι που επιβεβαιώνεται από τα διαγράμματα και από την έξοδο του MATLAB script.
    Ο αριθμός των κλήσεων της συνάρτησης σχετίζεται με την απαιτούμενη ακρίβεια, καθώς η κάθε επανάληψη απαιτεί δύο αξιολογήσεις της συνάρτησης.
    Συνεπώς, ο συνολικός αριθμός των κλήσεων είναι σχεδόν \textbf{διπλάσιος} του αριθμού των επαναλήψεων.

    \item \textbf{Σταθερότητα}:
    Η μέθοδος της διχοτόμου είναι εξαιρετικά σταθερή για κυρτές συναρτήσεις.
    Εφόσον η συνάρτηση είναι συνεχής και κυρτή στο διάστημα $[a, b]$ η μέθοδος θα συγκλίνει πάντα προς ένα σημείο στο διάστημα αυτό, ανεξαρτήτως της μορφής της συνάρτησης.
    Αυτό φαίνεται τόσο από την εξίσωση \ref{eq:1} η οποία δείχνει εξάρτηση του αριθμού των κλήσεων μόνο από το διάστημα, αναζήτησης, το $\lambda$ και το $\epsilon$.
    Όσο και από τις μετρήσεις και τα διαγράμματα, όπου ο αριθμός κλήσεων για δεδομένα $\epsilon$ και $\lambda$ παραμένει αμετάβλητος για οποιαδήποτε συνάρτηση.
\end{itemize}
\unboldmath

\section{Μέθοδος του χρυσού τομέα}
Η μέθοδος του χρυσού τομέα βρίσκει το τοπικό ελάχιστο μιας κυρτής συνάρτησης στο διάστημα $[a,b]$.
Βασίζεται στη διαίρεση του διαστήματος αναζήτησης σε δύο εσωτερικά σημεία $x_1$ και $x_2$, έτσι ώστε να ακολουθούν τον χρυσό λόγο $\gamma = 0.618$.
Η ιδέα είναι η αποφυγή της επαναλαμβανόμενης υπολογιστικής δαπάνης, διαιρώντας το διάστημα με μία σταθερή αναλογία.
Χρησιμοποιώντας το χρυσό λόγο, μειώνουμε το διάστημα στο 61,8\% του αρχικού μήκους σε κάθε βήμα αντί του μισού που συμβαίνει στη μέθοδο τους διχοτόμου.
Αυτό καθιστά τη μέθοδο πιο αποδοτική.

\par\textbf{Σύγκλιση}
\par
Η σύγκλιση της μεθόδου καθορίζεται από δύο βασικά κριτήρια:
\boldmath
\begin{enumerate}
    \item \textbf{Απαιτούμενη ακρίβεια ($\lambda$)}: Η διαδικασία σταματά όταν το μήκος του διαστήματος γίνει μικρότερο από $\lambda$.
    \item \textbf{Αριθμός επαναλήψεων και κλήσεις της αντικειμενικής συνάρτησης:} Ο μέγιστος αριθμός επαναλήψεων $k$ εξαρτάται από το αρχικό μήκος του διαστήματος $[a,b]$ και την ακρίβεια $\lambda$.
    Ο αριθμός των κλήσεων της αντικειμενικής συνάρτησης είναι πάντα $n = k + 1$.
    Ο αριθμός ικανοποιεί την σχέση:
    \begin{equation} \label{eq:2}
        0.618^{n-1} \geq \frac{b-a}{\lambda} %\Leftrightarrow n \geq \frac{log_2(\frac{(b-a)}{\lambda})}{log_2{\gamma}}
    \end{equation} \\[1ex]
    Από την παραπάνω σχέση επίσης μπορούμε να παρατηρήσουμε ότι για μικρές τιμές του $\lambda$ ή μεγάλα διαστήματα οι κλήσεις αυξάνονται σημαντικά.
\end{enumerate}
\unboldmath

\subsection{Υλοποίηση της μεθόδου χρυσού τομέα}
Για τη μέθοδο του χρυσού τομέα υλοποιήσαμε την συνάρτηση \textbf{\emph{min\_golden\_section()}}.
Η συνάρτηση αυτή δέχεται τα ορίσματα που περιγράφονται παραπάνω στην παράγραφο \ref{subsec:polymorphic-calls}: \textbf{fun\_expr, alpha, beta, epsilon και lambda} και επιστρέφει τα διαστήματα αναζήτησης \textbf{a} και \textbf{b}, τον αριθμό των επαναλήψεων \textbf{k} καθώς και τον αριθμό των κλήσεων της αντικειμενικής συνάρτησης \textbf{n}.
Η συνάρτηση καλείται από τις:
\begin{itemize}
    \item \textbf{iterations\_over\_lambda()}: \\
    Όπου και καλούμε τη μέθοδο για διαφορετικές τιμές του $\lambda \in [2\epsilon+0.0001, 0.1]$
    \footnote{Όπου $\epsilon$, χρησιμοποιείται η τιμή από την μέθοδο της διχοτόμου, ώστε τα αποτελέσματα από όλες τις μεθόδους να είναι συγκρίσιμα.},
    για κάθε μία από τις συναρτήσεις $f_1, f_2, f_3$ μελετώντας τον αριθμό των κλήσεων.
    Ομοίως οι κλήσεις αυξάνονται καθώς το $\lambda$ γίνεται μικρότερο επιβεβαιώνοντας τη σχέση \ref{eq:2}. \\
    \includegraphics[width=\textwidth]{../scripts/figures/iter_over_lambda_min_golden_section.png}
    \captionof{figure}{Κλήσεις της αντικειμενικής συνάρτησης για διάφορα $\lambda$ [Μέθοδος Χρυσού Τομέα].}
    \label{fig:iter_over_lambda_golden_section}

    \item \textbf{interval\_over\_iterations()}: \\
    Όπου και καλούμε τη μέθοδο για τρεις διαφορετικές τιμές του $\lambda \in \{2\epsilon+0.0001, \frac{2\epsilon+0.0001}{2}, 0.1\}$, για κάθε μία από τις συναρτήσεις $f_1, f_2, f_3$ μελετώντας τη σύγκλιση του διαστήματος αναζήτησης σε σχέση με τον αριθμό των επαναλήψεων. \\
    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_golden_section_fun1.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_1$ για 3 τιμές του $\lambda$ [Μέθοδος Χρυσού Τομέα].}
    \label{fig:interval_over_iter_golden_section_fun1}

    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_golden_section_fun2.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_2$ για 3 τιμές του $\lambda$ [Μέθοδος Χρυσού Τομέα].}
    \label{fig:interval_over_iter_golden_section_fun2}

    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_golden_section_fun3.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_3$ για 3 τιμές του $\lambda$ [Μέθοδος Χρυσού Τομέα].}
    \label{fig:interval_over_iter_golden_section_fun3}
\end{itemize}

\subsection{Παρατηρήσεις για τη μέθοδο χρυσού τομέα}
Μερικές παρατηρήσεις που σχετίζονται με την μέθοδο:
\boldmath
\begin{itemize}
    \item \textbf{Ταχύτητα σύγκλησης - Αριθμός κλήσεων}:
    Η ταχύτητα σύγκλισης της μεθόδου του χρυσού τομέα είναι λογαριθμική (με ρυθμό περίπου 1.618 ανά επανάληψη), λόγω της αναλογίας με τον χρυσό λόγο.
    Σε σύγκριση με τη μέθοδο διχοτόμου, αυτή η μέθοδος είναι ταχύτερη σε θέματα σύγκλισης, καθώς κάθε βήμα μειώνει το διάστημα αναζήτησης με σταθερή αναλογία.
    Ειδικότερα, η \textbf{χρονική πολυπλοκότητα} της είναι $O(log_2(\frac{b-a}{\lambda}))$, κάτι που επιβεβαιώνεται από τα διαγράμματα και από την έξοδο του MATLAB script.
    Ο αριθμός των κλήσεων της συνάρτησης σχετίζεται με την απαιτούμενη ακρίβεια, καθώς η κάθε επανάληψη απαιτεί μόνο μία νέα αξιολόγηση της συνάρτησης, μιας και μπορεί να χρησιμοποιηθεί μια τιμή από την προηγούμενη επανάληψη.
    Συνεπώς, ο συνολικός αριθμός των κλήσεων είναι σχεδόν \textbf{ίσος} του αριθμού των επαναλήψεων.

    \item \textbf{Σταθερότητα}:
    Η μέθοδος του χρυσού τομέα είναι σταθερή και αξιόπιστη για κυρτές συναρτήσεις, δεδομένου ότι συρρικνώνει σταθερά το διάστημα αναζήτησης, διασφαλίζοντας ότι το ελάχιστο βρίσκεται εντός του τελικού διαστήματος.
    Ομοίως και εδώ βλέπουμε ότι δεν υπάρχει εξάρτηση στον αριθμό των επαναλήψεων από την αντικειμενική συνάρτηση, παρά μόνο από το εύρος του αρχικού διαστήματος και την ακρίβεια.
    Αυτό όντως επιβεβαιώνεται από τα διαγράμματα και την έξοδο του MATLAB script.
    Η ιδιότητα του χρυσού λόγου να διατηρεί τη συμμετρία στην αναζήτηση περιορίζει τις απαιτήσεις για επανυπολογισμούς των τιμών της συνάρτησης, αυξάνοντας παράλληλα και την αριθμητική σταθερότητα της μεθόδου καθιστώντας τη μέθοδο ιδανική για συναρτήσεις με ήπια κλίση ή θόρυβο.
\end{itemize}
\unboldmath

\section{Μέθοδος Fibonacci}
Η μέθοδος Fibonacci είναι μια αριθμητική μέθοδος που εφαρμόζεται για τον προσδιορισμό του ελαχίστου μιας κυρτής συνάρτησης σε ένα συγκεκριμένο διάστημα $[a, b]$.
Η μέθοδος αυτή χρησιμοποιεί αριθμούς Fibonacci για τον καθορισμό των σημείων δειγματοληψίας εντός του διαστήματος, επιτρέποντας τη θεωρητικά βέλτιστη συρρίκνωσή του.
Κατά τη διάρκεια της εκτέλεσης της μεθόδου, το διάστημα μειώνεται σε επαναληπτικά βήματα, έως ότου το ελάχιστο βρίσκεται εντός του μικρού διαστήματος που απομένει.

\par\textbf{Σύγκλιση}
\par
Η σύγκλιση της μεθόδου καθορίζεται από δύο βασικά κριτήρια:
\boldmath
\begin{enumerate}
    \item \textbf{Απαιτούμενη ακρίβεια ($\lambda$)}: Η διαδικασία σταματά όταν το μήκος του διαστήματος γίνει μικρότερο από μια προκαθορισμένη ακρίβεια $\lambda$.
    \item \textbf{Αριθμός επαναλήψεων και κλήσεις της αντικειμενικής συνάρτησης:} Ο μέγιστος αριθμός επαναλήψεων $k$ εξαρτάται από το αρχικό μήκος του διαστήματος $[a,b]$ και την ακρίβεια $\lambda$.
    Ο αριθμός των κλήσεων της αντικειμενικής συνάρτησης είναι $n = k + 1$.
    Ο αριθμός ικανοποιεί την σχέση:
    \begin{equation} \label{eq:3}
        F(n) \geq \frac{b-a}{\lambda}
    \end{equation}
    Όπου $F(n)$, ο n-οστός αριθμός Fibonacci.
    Από την παραπάνω σχέση επίσης μπορούμε να παρατηρήσουμε ότι για μικρές τιμές του $\lambda$ ή μεγάλα διαστήματα οι κλήσεις αυξάνονται σημαντικά.
\end{enumerate}
\unboldmath

\subsection{Υλοποίηση της μεθόδου Fibonacci}
Για τη μέθοδο Fibonacci υλοποιήσαμε την συνάρτηση \textbf{\emph{min\_fibonacci()}}.
Η συνάρτηση αυτή δέχεται τα ορίσματα που περιγράφονται παραπάνω στην παράγραφο \ref{subsec:polymorphic-calls}: \textbf{fun\_expr, alpha, beta, epsilon και lambda} και επιστρέφει τα διαστήματα αναζήτησης \textbf{a} και \textbf{b}, τον αριθμό των επαναλήψεων \textbf{k} καθώς και τον αριθμό των κλήσεων της αντικειμενικής συνάρτησης \textbf{n}.
Η συνάρτηση εσωτερικά καλεί τη συνάρτηση fibonacci(), της οποίας η υλοποίηση της MATLAB είναι αναδρομική.
Για το λόγο αυτό έγινε αντικατάστασή της από τον τύπο του \href{https://en.wikipedia.org/wiki/Fibonacci_sequence#Binet's_formula}{Binet} που υπολογίζει τον αριθμό fibonacci σε O(1).
Η συνάρτηση \textbf{\emph{min\_fibonacci()}} καλείται από τις:
\begin{itemize}
    \item \textbf{iterations\_over\_lambda()}: \\
    Όπου κρατάμε σταθερό το $\epsilon = 0.001$ και καλούμε τη μέθοδο για διαφορετικές τιμές του $\lambda \in [2\epsilon+0.0001, 0.1]$
    \footnote{Όπου $\epsilon$, χρησιμοποιείται η τιμή από την μέθοδο της διχοτόμου, ώστε τα αποτελέσματα από όλες τις μεθόδους να είναι συγκρίσιμα.},
    για κάθε μία από τις συναρτήσεις $f_1, f_2, f_3$ μελετώντας τον αριθμό των κλήσεων.
    Το $\epsilon$ εδώ αφορά στο εύρος του τελικού διαστήματος της μεθόδου.
    Ομοίως και εδώ οι κλήσεις αυξάνονται καθώς το $\lambda$ γίνεται μικρότερο επιβεβαιώνοντας τη σχέση \ref{eq:3}. \\
    \includegraphics[width=\textwidth]{../scripts/figures/iter_over_lambda_min_fibonacci.png}
    \captionof{figure}{Κλήσεις της αντικειμενικής συνάρτησης για διάφορα $\lambda$ [Μέθοδος Fibonacci].}
    \label{fig:iter_over_lambda_fibonacci}

    \item \textbf{interval\_over\_iterations()}: \\
    Όπου κρατάμε σταθερό το $\epsilon = 0.001$ και καλούμε τη μέθοδο για τρεις διαφορετικές τιμές του $\lambda \in \{2\epsilon+0.0001, \frac{2\epsilon+0.0001}{2}, 0.1\}$, για κάθε μία από τις συναρτήσεις $f_1, f_2, f_3$ μελετώντας τη σύγκλιση του διαστήματος αναζήτησης σε σχέση με τον αριθμό των επαναλήψεων. \\
    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_fibonacci_fun1.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_1$ για 3 τιμές του $\lambda$ [Μέθοδος Fibonacci].}
    \label{fig:interval_over_iter_fibonacci_fun1}

    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_fibonacci_fun2.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_2$ για 3 τιμές του $\lambda$ [Μέθοδος Fibonacci].}
    \label{fig:interval_over_iter_fibonacci_fun2}

    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_fibonacci_fun3.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_3$ για 3 τιμές του $\lambda$ [Μέθοδος Fibonacci].}
    \label{fig:interval_over_iter_fibonacci_fun3}
\end{itemize}

\subsection{Παρατηρήσεις για τη μέθοδο Fibonacci}
Μερικές παρατηρήσεις που σχετίζονται με την μέθοδο:
\boldmath
\begin{itemize}
    \item \textbf{Ταχύτητα σύγκλησης - Αριθμός κλήσεων}:
    Η μέθοδος Fibonacci έχει συγκλίνοντα ρυθμό παρόμοιο με τη μέθοδο του χρυσού τομέα, αλλά μπορεί να είναι πιο αποδοτική όταν ο αριθμός των επαναλήψεων είναι γνωστός εκ των προτέρων.
    Επειδή κάθε επαναληπτικό βήμα καθορίζεται από τους αριθμούς Fibonacci, η απόδοση της μεθόδου μπορεί να βελτιστοποιηθεί για συγκεκριμένες συνθήκες και απαιτήσεις ακρίβειας.
    Ο αριθμός των κλήσεων της συνάρτησης σχετίζεται με την απαιτούμενη ακρίβεια $\lambda$, καθώς η κάθε επανάληψη απαιτεί μόνο μία νέα αξιολόγηση της συνάρτησης, μιας και μπορεί να χρησιμοποιηθεί μια τιμή από την προηγούμενη επανάληψη.
    Συνεπώς, ο συνολικός αριθμός των κλήσεων είναι σχεδόν \textbf{ίσος} του αριθμού των επαναλήψεων.

    \item \textbf{Χρονική πολυπλοκότητα}:
    Η πολυπλοκότητα της μεθόδου είναι ομοίως λογαριθμική, δεδομένου ότι κάθε βήμα εξαρτάται από τη λογαριθμική σχέση με το επιθυμητό μήκος του διαστήματος.
    Ειδικότερα είναι $O(log_2(\frac{b-a}{\lambda}))$, κάτι που επιβεβαιώνεται από τα διαγράμματα και από την έξοδο του MATLAB script.
    Αυτό την καθιστά συγκρίσιμη με τη μέθοδο του χρυσού τομέα από πλευράς χρονικής πολυπλοκότητας.
    Μάλιστα για μεγάλα $n$, ο όρος $\frac{1}{F_n}$ τείνει ασυμπτωτικά στο $0.618^{n-1}$, καθιστώντας τις δύο μεθόδους σχεδόν ταυτόσημες.

    \item \textbf{Σταθερότητα}:
    Η μέθοδος είναι σταθερή και αξιόπιστη για την αναζήτηση ελαχίστων σε κυρτές συναρτήσεις.
    Η ιδιότητα του Fibonacci να προσδιορίζει συμμετρικά σημεία μέσα στο διάστημα συμβάλλει στη σταθερότητα της μεθόδου και στη μειωμένη εξάρτηση από αριθμητικά σφάλματα, ιδίως για μεγάλο αριθμό επαναλήψεων.
    Το γεγονός ότι η μέθοδος χρησιμοποιεί προκαθορισμένα σημεία αξιολόγησης επιβεβαιώνει επίσης την ανεξαρτησία της μεθόδου από την αντικειμενική συνάρτηση, όπως εξάλλου φαίνεται και από διαγράμματα παραπάνω.
\end{itemize}
\unboldmath

\section{Μέθοδος της διχοτόμου με χρήση παραγώγου}
\boldmath
Η μέθοδος της διχοτόμου με χρήση παραγώγου χρησιμοποιείται επίσης για τον υπολογισμό του τοπικού ελαχίστου.
Η βασική ιδέα της μεθόδου είναι να εκμεταλλευτεί το γεγονός ότι, για μια κυρτή συνάρτηση, η κλήση της παραγώγου φανερώνει το υποδιάστημα στο οποίο βρίσκεται το ελάχιστο.
Ξεκινώντας από ένα αρχικό διάστημα $[a, b]$, η μέθοδος υπολογίζει την παράγωγο στο μέσο.
Ανάλογα με την κλήση της παραγώγου, το διάστημα αναζήτησης περιορίζεται διαδοχικά μέχρι να φτάσει να είναι μικρότερο από την επιθυμητή ακρίβεια $\lambda$.
Η θεωρητική σχέση για τον αριθμό των επαναλήψεων $n$ που χρειάζονται, είναι:
\begin{equation} \label{eq:4}
    n = log_2(\frac{b-a}{\lambda})
\end{equation}
Επίσης, εφόσον σε κάθε επανάληψη η αντικειμενική συνάρτησης καλείται μόνο μία φορά, \textbf{αυτός ο αριθμός συμπίπτει και τον αριθμό των κλήσεων.}
\unboldmath

\subsection{Υλοποίηση της μεθόδου της διχοτόμου με χρήση παραγώγου}
Για τη μέθοδο της διχοτόμου με χρήση παραγώγου υλοποιήσαμε την συνάρτηση \textbf{\emph{min\_bisection\_der()}}.
Η συνάρτηση αυτή δέχεται τα ορίσματα που περιγράφονται παραπάνω στην παράγραφο \ref{subsec:polymorphic-calls}: \textbf{fun\_expr, alpha, beta, epsilon και lambda} και επιστρέφει τα διαστήματα αναζήτησης \textbf{a} και \textbf{b}, τον αριθμό των επαναλήψεων \textbf{k} καθώς και τον αριθμό των κλήσεων της αντικειμενικής συνάρτησης \textbf{n}.
Η συνάρτηση καλείται από τις:
\begin{itemize}
    \item \textbf{iterations\_over\_lambda()}: \\
    Όπου και καλούμε τη μέθοδο για διαφορετικές τιμές του $\lambda \in [2\epsilon+0.0001, 0.1]$
    \footnote{Όπου $\epsilon$, χρησιμοποιείται η τιμή από την μέθοδο της διχοτόμου, ώστε τα αποτελέσματα από όλες τις μεθόδους να είναι συγκρίσιμα.},
    για κάθε μία από τις συναρτήσεις $f_1, f_2, f_3$ μελετώντας τον αριθμό των κλήσεων.
    Ομοίως και εδώ οι κλήσεις αυξάνονται καθώς το $\lambda$ γίνεται μικρότερο επιβεβαιώνοντας τη σχέση \ref{eq:4}. \\
    \includegraphics[width=\textwidth]{../scripts/figures/iter_over_lambda_min_bisection_der.png}
    \captionof{figure}{Κλήσεις της αντικειμενικής συνάρτησης για διάφορα $\lambda$ [Μέθοδος Διχοτόμου με χρήση παραγώγου].}
    \label{fig:iter_over_lambda_bisection_der}

    \item \textbf{interval\_over\_iterations()}: \\
    Όπου και καλούμε τη μέθοδο για τρεις διαφορετικές τιμές του $\lambda \in \{2\epsilon+0.0001, \frac{2\epsilon+0.0001}{2}, 0.1\}$, για κάθε μία από τις συναρτήσεις $f_1, f_2, f_3$ μελετώντας τη σύγκλιση του διαστήματος αναζήτησης σε σχέση με τον αριθμό των επαναλήψεων. \\
    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_bisection_der_fun1.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_1$ για 3 τιμές του $\lambda$ [Μέθοδος Διχοτόμου με χρήση παραγώγου].}
    \label{fig:interval_over_iter_bisection_der_fun1}

    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_bisection_der_fun2.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_2$ για 3 τιμές του $\lambda$ [Μέθοδος Διχοτόμου με χρήση παραγώγου].}
    \label{fig:interval_over_iter_bisection_der_fun2}

    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_bisection_der_fun3.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_3$ για 3 τιμές του $\lambda$ [Μέθοδος Διχοτόμου με χρήση παραγώγου].}
    \label{fig:interval_over_iter_bisection_der_fun3}
\end{itemize}

\subsection{Παρατηρήσεις για τη μέθοδο της διχοτόμου με χρήση παραγώγου}
Μερικές παρατηρήσεις που σχετίζονται με την μέθοδο:
\boldmath
\begin{itemize}
    \item \textbf{Ταχύτητα σύγκλησης - Αριθμός κλήσεων}:
    Η μέθοδος διχοτόμου με χρήση παραγώγου έχει ομοίως λογαριθμικό συγκλίνοντα ρυθμό σε σχέση με το μήκος του διαστήματος, αλλά μπορεί να είναι πιο αποδοτική όταν ο αριθμός των επαναλήψεων είναι γνωστός εκ των προτέρων.
    Ο αριθμός των κλήσεων της συνάρτησης σχετίζεται με την απαιτούμενη ακρίβεια $\lambda$, καθώς η κάθε επανάληψη απαιτεί μόνο μία νέα αξιολόγηση της παραγώγου της αντικειμενικής συνάρτησης.
    Συνεπώς, ο συνολικός αριθμός των κλήσεων είναι \textbf{ίσος} του αριθμού των επαναλήψεων.

    \item \textbf{Χρονική πολυπλοκότητα}:
    Η πολυπλοκότητα της μεθόδου είναι ομοίως λογαριθμική, δεδομένου ότι κάθε βήμα εξαρτάται από τη λογαριθμική σχέση με την ζητούμενη ακρίβεια.
    Ειδικότερα είναι $O(log_2(\frac{1}{\lambda}))$, κάτι που επιβεβαιώνεται από τα διαγράμματα και από την έξοδο του MATLAB script.

    \item \textbf{Σταθερότητα}:
    Η μέθοδος είναι αρκετά σταθερή για κυρτές συναρτήσεις, καθώς η χρήση της παραγώγου διασφαλίζει ότι η αναζήτηση προσανατολίζεται πάντα προς τη σωστή κατεύθυνση.
    Ομοίως και εδώ βλέπουμε ότι δεν υπάρχει εξάρτηση στον αριθμό των επαναλήψεων από την αντικειμενική συνάρτηση, παρά μόνο από το εύρος του αρχικού διαστήματος και την ακρίβεια.
    Αυτό όντως επιβεβαιώνεται από τα διαγράμματα και την έξοδο του MATLAB script.
\end{itemize}
\unboldmath

% Μετρικές: Αρ. κλήσεων, code complexity, arythetic stability, ...
% Πίνακας σύγκρισης
% trade-off επιλογή με βάση κριτηρίων
\section{Σύγκριση των μεθόδων}
Εκτελώντας όλους του αλγόριθμους για τα ίδια δεδομένα, \textbf{για τον αριθμό επαναλήψεων} έχουμε: \\

% Table with full width, centered content, and column width based on content
\noindent
\renewcommand{\arraystretch}{1.2}
\begin{tabularx}{\textwidth}{%
        >{\raggedleft\arraybackslash}m{0.175\textwidth} |
        >{\centering\arraybackslash}m{0.175\textwidth} |
        >{\centering\arraybackslash}m{0.175\textwidth} |
        >{\centering\arraybackslash}m{0.175\textwidth} |
        >{\centering\arraybackslash}m{0.175\textwidth}
    }
    Εύρος αναζήτησης & Μέθ. Διχοτόμου & Μέθ. Χρυσού τομέα & Μέθ. Fibonacci & Μέθ. Διχοτόμου με Παρ. \\
    \hline
    0.00210 & 17 & 17 & 18 & 12 \\
    0.05105 &  8 & 11 & 11 &  8 \\
    0.1     &  7 &  9 & 10 &  7
\end{tabularx} \\ [3ex]

\par
Ενώ ομοίως για τα ίδια δεδομένα για τον \textbf{αριθμό κλήσεων των αντικειμενικών συναρτήσεων} έχουμε: \\
\begin{tabularx}{\textwidth}{%
        >{\raggedleft\arraybackslash}m{0.175\textwidth} |
        >{\centering\arraybackslash}m{0.175\textwidth} |
        >{\centering\arraybackslash}m{0.175\textwidth} |
        >{\centering\arraybackslash}m{0.175\textwidth} |
        >{\centering\arraybackslash}m{0.175\textwidth}
    }
    Εύρος αναζήτησης & Μέθ. Διχοτόμου & Μέθ. Χρυσού τομέα & Μέθ. Fibonacci & Μέθ. Διχοτόμου με Παρ. \\
    \hline
    0.00210 & 32 & 18 & 19 & 11 \\
    0.1     & 12 & 10 & 11 &  6
\end{tabularx} \\ [3ex]

\par
\underline{Παρατηρήσεις:}
\begin{itemize}
    \item H \textbf{αποδοτικότερη} μέθοδος τόσο στον αριθμό των επαναλήψεων όσο και στον αριθμό κλήσεων της αντικειμενικής συνάρτησης είναι η \textbf{μέθοδος της διχοτόμου με χρήση παραγώγου}.
    \item Αντίστοιχα η πιο \textbf{\emph{“αδύναμη”}} μέθοδος φαίνεται να είναι η μέθοδος της \textbf{διχοτόμου χωρίς τη χρήση παραγώγου}.
    \item Οι μέθοδοι του χρυσού τομέα και Fibonacci παρουσιάζουν \textbf{παρόμοια} συμπεριφορά τόσο \textbf{όσων αφορά τον αριθμό των επαναλήψεων όσο και στον αριθμό των κλήσεων} της αντικειμενικής συνάρτησης και τοποθετούνται στη μέση όσον αφορά τις επιδόσεις τους.
    \item Ένα ακόμη ενδιαφέρον στοιχείο είναι ότι ενώ οι δύο προαναφερθείσες μέθοδοι, θεωρητικά βελτιώνουν όχι μόνο τον αριθμό των κλήσεων των συναρτήσεων αλλά και τον αριθμό των επαναλήψεων.
    Αυτό όμως δεν το βλέπουμε να επιβεβαιώνεται.
    Βλέπουμε δηλαδή να βελτιώνεται \textbf{μόνο ο αριθμός κλήσεων} και όχι των επαναλήψεων.
    Τουλάχιστον αυτό συμβαίνει για το μικρό διάστημα αναζήτησης της εργασίας.
    \item Τέλος ενώ θεωρητικά η μέθοδος Fibonacci για μικρό αριθμό διάστημα αναζήτησης αναμένεται να έχει λιγότερες επαναλήψεις από την μέθοδο χρυσού τομέα, κάτι τέτοιο δεν φαίνεται να επιβεβαιώνεται.
\end{itemize}
Φυσικά, για τις τελευταίες δύο “παρεκκλίσεις” υπάρχει πάντα η περίπτωση του προβλήματος στην υλοποίηση, την οποία δεν μπορούμε να αποκλείσουμε.


\section{Συμπεράσματα}
Οι μέθοδοι της παρούσας εργασίας αποτελούν βασικές τεχνικές για την εύρεση του τοπικού ελαχίστου μιας κυρτής συνάρτησης σε ένα δοσμένο διάστημα.
Κάθε μέθοδος έχει τα δικά της πλεονεκτήματα και περιορισμούς.
Η μέθοδος διχοτόμου είναι απλή και σταθερή, αλλά απαιτεί έναν ικανοποιητικό αριθμό επαναλήψεων.
Η μέθοδος χρυσού τομέα είναι πιο αποδοτική όσον αφορά τη σύγκλιση με λιγότερες κλήσεις στη συνάρτηση, αλλά εξαρτάται από τον ακριβή υπολογισμό των σημείων του διαστήματος.
Η μέθοδος Fibonacci έχει σταθερή και προβλέψιμη αριθμητική συμπεριφορά, όμως η ταχύτητα σύγκλισης είναι σχετικά χαμηλότερη σε σχέση με άλλες.
Η μέθοδος διχοτόμου με παράγωγο, προσφέρει γραμμική σύγκλιση, παρέχοντας τη δυνατότητα γρηγορότερης αναγνώρισης του ελαχίστου, αν και εξαρτάται από την ύπαρξη της παραγώγου και απαιτεί έναν αξιόπιστο υπολογισμό αυτής.
Συνολικά, η επιλογή της κατάλληλης μεθόδου εξαρτάται από τη συγκεκριμένη εφαρμογή, την ακρίβεια και τις υπολογιστικές δυνατότητες, καθώς και την εγγύτητα της συνάρτησης στην κυρτότητα.

\end{document}
