Πρόλογος#

Η Αριθμητική Ανάλυση είναι η μελέτη των αλγορίθμων οι οποίοι αξιοποιούν αριθμητικές προσεγγίσεις στην επίλυση προβλημάτων μαθηματικής ανάλυσης. Οι αλγόριθμοι αυτοί, γνωστοί ως αριθμητικές μέθοδοι, χρησιμοποιούνται εδώ και δεκαετίες σε συνδυασμό με την μαθηματική μοντελοποίηση για την επίλυση προβλημάτων όλων των θετικών επιστημών. Παρά την μακρόχρονη εξέλιξή τους, οι αριθμητικές μέθοδοι συνεχίζουν να εξελίσσονται και να δίνουν λύσεις σε όλο και πιο απαιτητικές εφαρμογές αξιοποιώντας νέες ψηφιακές τεχνολογίες. Ιδιαίτερο ενδιαφέρον παρουσιάζουν σήμερα οι μέθοδοι που εφαρμόζονται στην επιστήμη δεδομένων, την μηχανική μάθηση και την τεχνητή νοημοσύνη.

Η έκταση της βιβλιογραφίας και μάλιστα σύγχρονης μαρτυρά την σημασία των αριθμητικών μεθόδων. Ο ενδιαφερόμενος αναγνώστης μπορεί να εντρυφήσει στο θέμα μέσω συγγραμμάτων γραμμένων [1] ή μεταφρασμένων [2] στα ελληνικά. Από την ξενόγλωσση βιβλιογραφία ξεχωρίζουν τα ελεύθερα διαδικτυακά μαθήματα που διατίθενται σε μορφή σημειωματάριων jupyter [3, 4, 5] και συνοδεύονται από αντίστοιχα ηλεκτρονικά ή έντυπα βιβλία.

Αυτή είναι και η προσέγγιση που υιοθετεί το παρόν σύγγραμμα. Προσπαθεί να παρουσιάσει στον αναγνώστη τις ιδέες που κρύβονται πίσω από τις βασικές αριθμητικές μεθόδους και επιπλέον να τον βοηθήσει να τις εφαρμόσει προγραμματίζοντας σε διαδραστικό περιβάλλον σημειωματάριων jupyter. Έτσι ο αναγνώστης μπορεί να εξοικειωθεί με τον προγραμματισμό των αριθμητικών μεθόδων, την επιλογή της κατάλληλης τεχνικής και των παραμέτρων της αλλά και με την αξιοποίηση έτοιμων εργαλείων, αναπτύσσοντας συνολικά την ικανότητά του στην επίλυση πρακτικών προβλημάτων.

Εργαλεία αριθμητικής ανάλυσης#

Συνηθισμένα εργαλεία αριθμητικής ανάλυσης είναι τόσο γλώσσες προγραμματισμού όσο και εμπορικά πακέτα ανάλυσης δεδομένων. Η παρακάτω ενδεικτική αλλά όχι περιοριστική λίστα περιλαμβάνει τις πιο συνηθισμένες επιλογές κατά αλφαβητική σειρά:

  • C/C++

  • Excel

  • Fortran

  • Julia

  • Mathcad

  • Matlab/Octave

  • Python

  • R

Η λίστα περιλαμβάνει τόσο εργαλεία που έχουν αναπτυχθεί πρόσφατα, όσο και εργαλεία με μεγάλη ιστορία και διαρκή εξέλιξη. Σημαντικά χαρακτηριστικά για την επιλογή ενός εργαλείου αριθμητικής ανάλυσης είναι:

  • Η υποστήριξη πολυδιάστατων πινάκων

  • Οι υποστηριζόμενες αριθμητικές μέθοδοι

  • Οι απαιτήσεις σε υπολογιστικούς πόρους

  • Η ταχύτητα υπολογισμών και οι δυνατότητες παράλληλης επεξεργασίας

  • Η ευκολία χρήσης

  • Οι δυνατότητες γραφικής απεικόνισης των δεδομένων

  • Η διαλειτουργικότητα με άλλα εργαλεία (interoperability)

  • Η διαθεσιμότητα ανοιχτού κώδικα (όχι υποχρεωτικά)

  • Η μακροπρόθεσμη υποστήριξη και οι προοπτικές εξέλιξης

Για το μάθημα επιλέχθηκε η Python καθώς αποτελεί μια γλώσσα υψηλού επιπέδου και γενικής χρήσης, η οποία αποτελεί την δημοφιλέστερη επιλογή τα τελευταία χρόνια σύμφωνα με τον δείκτη TIOBE. Η Python υποστηρίζεται από τον διερμηνευτή (interpreter) και μεταγλωττιστή (compiler) CPython και συνοδεύεται από ένα πολύ ευρύ οικοσύστημα βιβλιοθηκών με εργαλεία γενικής χρήσης και εφαρμογών βασισμένες σε αυτά αυτά.

Στις βιβλιοθήκες της Python περιλαμβάνονται οι πιο σύγχρονες υλοποιήσεις της αριθμητικής ανάλυσης, της επιστήμης δεδομένων [6], της μηχανικής μάθησης, της αναγνώρισης εικόνας και της τεχνητής νοημοσύνης, ενώ οι εφαρμογές καλύπτουν κάθε τομέα της επιστήμης και της τεχνολογίας. Η Python και τα πακέτα του οικοσυστήματος της είναι κατά κανόνα ελεύθερα διαθέσιμα και συναγωνίζονται με αξιώσεις εμπορικά πακέτα.

Τέλος κατά την επιλογή ενός εργαλείου είναι σημαντικό να έχουμε υπόψη τις προοπτικές εξέλιξης. Η Python βρίσκεται στο επίκεντρο της εξέλιξης και συχνά αποτελεί την βάση ανάπτυξης καινούργιων εργαλείων που θεραπεύουν τις όποιες αδυναμίες της. Για παράδειγμα η υπό ανάπτυξη γλώσσα προγραμματισμού Mojo[7] έχει σχεδιαστεί για να παρέχει την εκφραστικότητα της Python σε συνδυασμό με την ταχύτητα της C.

Πώς να διαβάσετε το βιβλίο#

Στόχος του βιβλίου είναι να σας βοηθήσει να ανακαλύψετε την μαγεία των αριθμητικών μεθόδων αρχικά μέσω μιας σύντομης εισαγωγής και στην συνέχεια με την εφαρμογή τους σε πρακτικά προβλήματα. Στο κείμενο δίνονται παραδείγματα και έτοιμες λύσεις τις οποίες καλείστε να κατανοήσετε και να τις χρησιμοποιήσετε ως βάση για την επίλυση πιο σύνθετων προβλημάτων. Πολλές αριθμητικές μέθοδοι κρύβουν διεξοδική ερευνητική προσπάθεια δεκαετιών, η οποία δεν καλύπτεται διεξοδικά εδώ αλλά θα πρέπει να ανατρέχετε σε τρίτες πηγές. Το ίδιο ισχύει θα χρειαστεί να κάνετε για εξειδικευμένα θέματα της Python και των βιβλιοθηκών της.

Στο βιβλίο προτιμούνται πηγές που είναι ελεύθερα διαθέσιμες στο διαδίκτυο. Για θέματα προγραμματισμού χρησιμοποιείται εκτενώς η τεκμηρίωση της επίσημης Python [8]. Για εμβάθυνση σε συγκεκριμένες αριθμητικές μεθόδους, εκτός από άλλα βιβλία μπορείτε να χρησιμοποιήσετε την Wikipedia [9] στην αγγλική της έκδοση, που χαρακτηρίζεται από την μεγαλύτερη πληρότητα. Τέλος η εμβάθυνση στις αριθμητικές μεθόδους θα σας φανεί χρήσιμη, όταν θα ανατρέξετε στην τεκμηρίωση των βιβλιοθηκών της Python για να κατανοήσετε τις επιλογές που σας δίνει η υλοποίηση. Σε όλες τις παραπάνω περιπτώσεις θα σας φανεί χρήσιμη η καλή γνώση αγγλικών και η εξοικείωση με την αγγλική τεχνική ορολογία που δίνεται στο κείμενο. Για πιο γρήγορη προσπέλαση οι αναγνώστες της ψηφιακής έκδοσης μπορούν να χρησιμοποιήσουν τους ενεργούς συνδέσμους που παραπέμπουν σε συγκεκριμένα θέματα, αντί των γενικών βιβλιογραφικών παραπομπών που δίνονται στο τέλος του βιβλίου.

Τυπογραφικές συμβάσεις#

Ορισμός

Αυτός είναι ένα ορισμός.

Important

Αυτό είναι σημαντικό.

Tip

Αυτή είναι μία σύσταση.

Άσκηση

Αυτή είναι μία άσκηση.

Λύση της άσκησης

Αυτή είναι η λύση της άσκησης.

Μαθηματικές συμβάσεις#

Για λόγους συνοχής μεταξύ της αριθμητικής ανάλυσης και της υλοποίησης σε κώδικα έχουν υιοθετηθεί οι παρακάτω συμβάσεις κατά το πρότυπο της Python:

  • Χρησιμοποιείται το σύμβολο της τελείας για την υποδιαστολή.

  • Οι δείκτες των πινάκων και των βρόχων ξεκινάνε από το 0.

Ευχαριστίες#

Αφιερώνεται στην οικογένειά μου.