瀏覽代碼

A first version of the assignment

tags/v1.0
父節點
當前提交
1c8ec75399
共有 23 個檔案被更改,包括 345 行新增50 行删除
  1. 二進制
      Work 1/report/report.pdf
  2. +293
    -30
      Work 1/report/report.tex
  3. 二進制
      Work 1/scripts/figures/interval_over_iterations_min_bisection_der_fun1.png
  4. 二進制
      Work 1/scripts/figures/interval_over_iterations_min_bisection_der_fun2.png
  5. 二進制
      Work 1/scripts/figures/interval_over_iterations_min_bisection_der_fun3.png
  6. 二進制
      Work 1/scripts/figures/interval_over_iterations_min_bisection_fun1.png
  7. 二進制
      Work 1/scripts/figures/interval_over_iterations_min_bisection_fun2.png
  8. 二進制
      Work 1/scripts/figures/interval_over_iterations_min_bisection_fun3.png
  9. 二進制
      Work 1/scripts/figures/interval_over_iterations_min_fibonacci_fun1.png
  10. 二進制
      Work 1/scripts/figures/interval_over_iterations_min_fibonacci_fun2.png
  11. 二進制
      Work 1/scripts/figures/interval_over_iterations_min_fibonacci_fun3.png
  12. 二進制
      Work 1/scripts/figures/interval_over_iterations_min_golden_section_fun1.png
  13. 二進制
      Work 1/scripts/figures/interval_over_iterations_min_golden_section_fun2.png
  14. 二進制
      Work 1/scripts/figures/interval_over_iterations_min_golden_section_fun3.png
  15. 二進制
      Work 1/scripts/figures/iter_over_epsilon_min_bisection.png
  16. 二進制
      Work 1/scripts/figures/iter_over_lambda_min_bisection.png
  17. 二進制
      Work 1/scripts/figures/iter_over_lambda_min_bisection_der.png
  18. 二進制
      Work 1/scripts/figures/iter_over_lambda_min_fibonacci.png
  19. 二進制
      Work 1/scripts/figures/iter_over_lambda_min_golden_section.png
  20. +11
    -4
      Work 1/scripts/min_bisection.m
  21. +10
    -4
      Work 1/scripts/min_bisection_der.m
  22. +18
    -5
      Work 1/scripts/min_fibonacci.m
  23. +13
    -7
      Work 1/scripts/min_golden_section.m

二進制
Work 1/report/report.pdf 查看文件


+ 293
- 30
Work 1/report/report.tex 查看文件

@@ -31,7 +31,8 @@

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

\usepackage{tabularx}
\usepackage{array}

\begin{document}

@@ -39,10 +40,12 @@

\InsertTitle

%\tableofcontents

\sloppy

\section{Εισαγωγή}
Η παρούσα εργασία αφορά στις αριθμητικές μεθόδους ευρέσεως ελαχίστων σε πεπερασμένα διαστήματα, που χρησιμοποιούνται σε προβλήματα βελτιστοποίησης.
Η παρούσα εργασία αφορά σε αριθμητικές μεθόδους ευρέσεως ελαχίστων σε πεπερασμένα διαστήματα, που χρησιμοποιούνται σε προβλήματα βελτιστοποίησης.
Οι αριθμητικές μέθοδοι βελτιστοποίησης συναρτήσεων αναπτύχθηκαν ιδιαίτερα στα μέσα του 20ού αιώνα, καθώς η εύρεση ελαχίστων (ή και μεγίστων) άρχισε να έχει μεγάλη πρακτική σημασία, ειδικά σε τομείς όπως η οικονομία, η φυσική, ή η ανάλυση συστημάτων.
Η μέθοδος της \textbf{διχοτόμου} έχει ρίζες στον Νεύτωνα και τον Ντεκάρτ, με τη διχοτόμηση να χρησιμοποιείται αρχικά για τον υπολογισμό της ρίζας μιας συνάρτησης και αργότερα να εξελίσσεται σε τεχνική για βελτιστοποίηση σε κυρτές συναρτήσεις.
Η μέθοδος του \textbf{χρυσού τομέα} προτάθηκε στις αρχές του 20ού αιώνα και εφαρμόστηκε στην βελτιστοποίηση τη δεκαετία του 1950.
@@ -56,7 +59,7 @@
Τα παραδοτέα της εργασίας αποτελούνται από:
\begin{itemize}
\item Την παρούσα αναφορά.
\item Τον κατάλογο \textbf{scripts}, που περιέχει τον κώδικα της MATLAB.
\item Τον κατάλογο \textbf{scripts/}, που περιέχει τον κώδικα της MATLAB.
\item Το \href{https://git.hoo2.net/hoo2/OptimizationTechniques/src/branch/master/Work%201}{σύνδεσμο} με το αποθετήριο που περιέχει όλο το project με τον κώδικα της MATLAB, της αναφοράς και τα παραδοτέα.
\end{itemize}

@@ -70,20 +73,21 @@
Πιο συγκεκριμένα.

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

\section{Μέθοδος της διχοτόμου}
@@ -117,32 +121,32 @@
Αυτή η διαδικασία επαναλαμβάνεται μέχρι το μήκος του διαστήματος να γίνει μικρότερο από μια προκαθορισμένη ακρίβεια $\lambda$.
\par
Η μέθοδος στηρίζεται στην κυρτότητα της συνάρτησης, η οποία διασφαλίζει ότι το ελάχιστο βρίσκεται πάντα σε ένα από τη δύο μισά διαστήματα, καθώς οι κυρτές συναρτήσεις έχουν \textbf{μοναδικό τοπικό και ολικό ελάχιστο σε ένα κλειστό διάστημα}.
\par\textbf{\underline{Κριτήρια Σύγκλισης}}
\par\textbf{Σύγκλιση}
\par
Η σύγκλιση της μεθόδου καθορίζεται από δύο βασικά κριτήρια:
\boldmath
\begin{enumerate}
\item \textbf{Απαιτούμενη ακρίβεια ($\lambda$)}: Η διαδικασία σταματά όταν το μήκος του διαστήματος γίνει μικρότερο από $\lambda$.
\item \textbf{Αριθμός επαναλήψεων/κλήσεων της αντικειμενικής συνάρτησης:} Ο μέγιστος αριθμός επαναλήψεων $k$ εξαρτάται από το αρχικό μήκος του διαστήματος $[a,b]$, την ακρίβεια $\lambda$ και την απόσταση των συμμετρικών σημείων από το μέσο $\epsilon$.
Ο αριθμός των κλήσεων της αντικειμενικής συνάρτησης είναι πάντα $n = 2k$.
\item \textbf{Αριθμός επαναλήψεων και κλήσεις της αντικειμενικής συνάρτησης:} Ο μέγιστος αριθμός επαναλήψεων $k$ εξαρτάται από το αρχικό μήκος του διαστήματος $[a,b]$, την ακρίβεια $\lambda$ και την απόσταση των συμμετρικών σημείων από το μέσο $\epsilon$.
Ο αριθμός των κλήσεων της αντικειμενικής συνάρτησης είναι πάντα $n = 2(k-1)$.
Ο αριθμός ικανοποιεί την σχέση:
\begin{equation} \label{eq:1}
n \geq 2 \cdot log_2{\frac{b-a}{\lambda - 2\epsilon}}
(\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{Υλοποίηση}
Για τη μέθοδο της διχοτόμου υλοποιήσαμε την συνάρτηση min\_bisection().
Η συνάρτηση αυτή δέχεται τα ορίσματα που περιγράφονται παραπάνω: \textbf{fun\_expr, alpha, beta, epsilon και lambda} και επιστρέφει τα διαστήματα αναζήτησης \textbf{a} και \textbf{b}, τον αριθμό των επαναλήψεων \textbf{k} καθώς και τον αριθμό των κλήσεων της αντικειμενικής συνάρτησης \textbf{n}.
\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$.}
\captionof{figure}{Κλήσεις της αντικειμενικής συνάρτησης για διάφορα $\epsilon$ [Μέθοδος Διχοτόμου].}
\label{fig:iter_over_epsilon_bisection}

\item \textbf{iterations\_over\_lambda()}: \\
@@ -150,36 +154,35 @@
Ομοίως οι κλήσεις αυξάνονται καθώς το $\lambda$ γίνεται μικρότερο επιβεβαιώνοντας τη σχέση \ref{eq:1}. \\
Η αρχή του διαστήματος επιλέχθηκε ώστε να ικανοποιούνται τα κριτήρια σύγκλισης. \\
\includegraphics[width=\textwidth]{../scripts/figures/iter_over_lambda_min_bisection.png}
\captionof{figure}{Κλήσεις της αντικειμενικής συνάρτησης για διάφορα $\lambda$.}
\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$.}
\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$.}
\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$.}
\captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_3$ για 3 τιμές του $\lambda$ [Μέθοδος Διχοτόμου].}
\label{fig:interval_over_iter_bisection_fun3}
\end{itemize}

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

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

\item \textbf{Σταθερότητα}:
Η μέθοδος της διχοτόμου είναι εξαιρετικά σταθερή για κυρτές συναρτήσεις.
@@ -187,18 +190,278 @@
Αυτό φαίνεται τόσο από την εξίσωση \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]

%
\section{Συμπεράσματα}
\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}

二進制
Work 1/scripts/figures/interval_over_iterations_min_bisection_der_fun1.png 查看文件

Before After
Width: 4000  |  Height: 2250  |  Size: 115 KiB Width: 4000  |  Height: 2250  |  Size: 115 KiB

二進制
Work 1/scripts/figures/interval_over_iterations_min_bisection_der_fun2.png 查看文件

Before After
Width: 4000  |  Height: 2250  |  Size: 114 KiB Width: 4000  |  Height: 2250  |  Size: 114 KiB

二進制
Work 1/scripts/figures/interval_over_iterations_min_bisection_der_fun3.png 查看文件

Before After
Width: 4000  |  Height: 2250  |  Size: 117 KiB Width: 4000  |  Height: 2250  |  Size: 117 KiB

二進制
Work 1/scripts/figures/interval_over_iterations_min_bisection_fun1.png 查看文件

Before After
Width: 4000  |  Height: 2250  |  Size: 115 KiB Width: 4000  |  Height: 2250  |  Size: 115 KiB

二進制
Work 1/scripts/figures/interval_over_iterations_min_bisection_fun2.png 查看文件

Before After
Width: 4000  |  Height: 2250  |  Size: 115 KiB Width: 4000  |  Height: 2250  |  Size: 115 KiB

二進制
Work 1/scripts/figures/interval_over_iterations_min_bisection_fun3.png 查看文件

Before After
Width: 4000  |  Height: 2250  |  Size: 118 KiB Width: 4000  |  Height: 2250  |  Size: 118 KiB

二進制
Work 1/scripts/figures/interval_over_iterations_min_fibonacci_fun1.png 查看文件

Before After
Width: 4000  |  Height: 2250  |  Size: 123 KiB Width: 4000  |  Height: 2250  |  Size: 122 KiB

二進制
Work 1/scripts/figures/interval_over_iterations_min_fibonacci_fun2.png 查看文件

Before After
Width: 4000  |  Height: 2250  |  Size: 122 KiB Width: 4000  |  Height: 2250  |  Size: 122 KiB

二進制
Work 1/scripts/figures/interval_over_iterations_min_fibonacci_fun3.png 查看文件

Before After
Width: 4000  |  Height: 2250  |  Size: 124 KiB Width: 4000  |  Height: 2250  |  Size: 124 KiB

二進制
Work 1/scripts/figures/interval_over_iterations_min_golden_section_fun1.png 查看文件

Before After
Width: 4000  |  Height: 2250  |  Size: 121 KiB Width: 4000  |  Height: 2250  |  Size: 121 KiB

二進制
Work 1/scripts/figures/interval_over_iterations_min_golden_section_fun2.png 查看文件

Before After
Width: 4000  |  Height: 2250  |  Size: 121 KiB Width: 4000  |  Height: 2250  |  Size: 121 KiB

二進制
Work 1/scripts/figures/interval_over_iterations_min_golden_section_fun3.png 查看文件

Before After
Width: 4000  |  Height: 2250  |  Size: 123 KiB Width: 4000  |  Height: 2250  |  Size: 123 KiB

二進制
Work 1/scripts/figures/iter_over_epsilon_min_bisection.png 查看文件

Before After
Width: 4000  |  Height: 1875  |  Size: 81 KiB Width: 4000  |  Height: 1875  |  Size: 81 KiB

二進制
Work 1/scripts/figures/iter_over_lambda_min_bisection.png 查看文件

Before After
Width: 4000  |  Height: 1875  |  Size: 86 KiB Width: 4000  |  Height: 1875  |  Size: 86 KiB

二進制
Work 1/scripts/figures/iter_over_lambda_min_bisection_der.png 查看文件

Before After
Width: 4031  |  Height: 1853  |  Size: 83 KiB Width: 4000  |  Height: 1875  |  Size: 84 KiB

二進制
Work 1/scripts/figures/iter_over_lambda_min_fibonacci.png 查看文件

Before After
Width: 4000  |  Height: 1875  |  Size: 84 KiB Width: 4000  |  Height: 1875  |  Size: 78 KiB

二進制
Work 1/scripts/figures/iter_over_lambda_min_golden_section.png 查看文件

Before After
Width: 4031  |  Height: 1853  |  Size: 79 KiB Width: 4000  |  Height: 1875  |  Size: 78 KiB

+ 11
- 4
Work 1/scripts/min_bisection.m 查看文件

@@ -17,6 +17,8 @@ function [a, b, k, n] = min_bisection(fun_expr, alpha, beta, epsilon, lambda)
% n: (number) The calls of objective function fun_expr
%
% Error checking
if alpha > beta || 2*epsilon >= lambda || lambda <= 0
error ('Input criteria not met')
@@ -25,10 +27,16 @@ end
% Init
a = alpha;
b = beta;
n = 0;
fun = matlabFunction(fun_expr);
k=1;
% wrapper call count function
function r = count_fun(x)
n = n + 1;
r = fun(x);
end
k=1;
while b(k) - a(k) > lambda
% bisect [a,b]
mid = (a(k) + b(k)) / 2;
@@ -37,7 +45,7 @@ while b(k) - a(k) > lambda
% set new search interval
k = k + 1;
if fun(x_1) < fun(x_2)
if count_fun(x_1) < count_fun(x_2)
a(k) = a(k-1);
b(k) = x_2;
else
@@ -46,5 +54,4 @@ while b(k) - a(k) > lambda
end
end
% Set objective function calls
n = 2*k;
end

+ 10
- 4
Work 1/scripts/min_bisection_der.m 查看文件

@@ -29,8 +29,16 @@ end
% Init output vectors
a = alpha;
b = beta;
n = 0;
dfun = matlabFunction(diff(fun_expression));

% wrapper call count function
% In this case the derivative of the objective function
function r = count_dfun(x)
n = n + 1;
r = dfun(x);
end

k=1;
while b(k) - a(k) > lambda
% bisect [a,b]
@@ -38,7 +46,7 @@ while b(k) - a(k) > lambda
% set new search interval
k = k + 1;
df = dfun(x_mid);
df = count_dfun(x_mid);
if df < 0
a(k) = x_mid;
b(k) = b(k-1);
@@ -52,6 +60,4 @@ while b(k) - a(k) > lambda
end
end

% Update the objctive function calls. In this case the derivative of the
% function ;)
n = k;
end

+ 18
- 5
Work 1/scripts/min_fibonacci.m 查看文件

@@ -1,4 +1,4 @@
function [a, b, N, nn] = min_fibonacci(fun_expression, alpha, beta, epsilon, lambda)
function [a, b, N, n] = min_fibonacci(fun_expression, alpha, beta, epsilon, lambda)
% Fibonacci method for finding the local minimum of a function.
%
% fun_expr: (symbolic expression over x) The symbolic expression of the
@@ -29,8 +29,15 @@ fibonacci = @(n) ( ((1 + sqrt(5))^n - (1 - sqrt(5))^n) / (2^n * sqrt(5)) );
% Init variables
a = alpha;
b = beta;
n = 0;
fun = matlabFunction(fun_expression);
% wrapper call count function
function r = count_fun(x)
n = n + 1;
r = fun(x);
end
% calculate number of iterations
N = 0;
while fibonacci(N) < (b(1) - a(1)) / lambda
@@ -42,26 +49,33 @@ end
% will not require to calculate both
x_1 = a(1) + (fibonacci(N-2) / fibonacci(N)) * (b(1) - a(1));
x_2 = a(1) + (fibonacci(N-1) / fibonacci(N)) * (b(1) - a(1));
f1 = count_fun(x_1);
f2 = count_fun(x_2);
% All but the last calculation
for k = 1:N-2
% set new search interval
if fun(x_1) < fun(x_2)
if f1 <= f2
a(k+1) = a(k);
b(k+1) = x_2;
x_2 = x_1;
f2 = f1;
x_1 = a(k+1) + (fibonacci(N-k-2) / fibonacci(N-k)) * (b(k+1) - a(k+1));
f1 = count_fun(x_1);
else
a(k+1) = x_1;
b(k+1) = b(k);
x_1 = x_2;
f1 = f2;
x_2 = a(k+1) + (fibonacci(N-k-1) / fibonacci(N-k)) * (b(k+1) - a(k+1));
f2 = count_fun(x_2);
end
end
% Last calculation
x_2 = x_1 + epsilon;
if fun(x_1) < fun(x_2)
f2 = count_fun(x_2);
if f1 <= f2
a(N) = a(N-1);
b(N) = x_1;
else
@@ -69,6 +83,5 @@ else
b(N) = b(N-1);
end
% Set objective function calls
nn = 2*N -2;
end

+ 13
- 7
Work 1/scripts/min_golden_section.m 查看文件

@@ -29,36 +29,42 @@ end
gamma = 0.618;
a = alpha;
b = beta;
n = 0;
fun = matlabFunction(fun_expression);
% wrapper call count function
function r = count_fun(x)
n = n + 1;
r = fun(x);
end
% calculate x1, x2 of the first iteration, since the following iteration
% will not require to calculate both
k=1;
x_1 = a(k) + (1 - gamma)*(b(k) - a(k));
x_2 = a(k) + gamma*(b(k) - a(k));
f1 = fun(x_1);
f2 = fun(x_2);
f1 = count_fun(x_1);
f2 = count_fun(x_2);
while b(k) - a(k) > lambda
% set new search interval
k = k + 1;
if f1 < f2
if f1 <= f2
a(k) = a(k-1);
b(k) = x_2;
x_2 = x_1;
f2 = f1;
x_1 = a(k) + (1 - gamma)*(b(k) - a(k));
f1 = fun(x_1);
f1 = count_fun(x_1);
else
a(k) = x_1;
b(k) = b(k-1);
x_1 = x_2;
f1 = f2;
x_2 = a(k) + gamma*(b(k) - a(k));
f2 = fun(x_2);
f2 = count_fun(x_2);
end
end
% Set objective function calls
n = k+1;
end

Loading…
取消
儲存