i Π Ρ Ο Λ Ο Γ Ο Σ Το βιβλίο αυτό αποτελεί μια εισαγωγή στα βασικά προβλήματα των αριθμητικών μεθόδων της υπολογιστικής γραμμικής άλγεβρας (computational linear algebra) και της αριθμητικής ανάλυσης (numerical analysis) γενικότερα. Απευθύνεται κυρίως σε προπτυχιακούς και μεταπτυχιακούς φοιτητές Τμημάτων Πληροφορικής αλλά και Τμημάτων Σχολών Θετικών Επιστημών που έχουν το μαθηματικό υπόβαθρο της Μαθηματικής Ανάλυσης και της Γραμμικής Άλγεβρας. Το θεωρητικό μέρος του βιβλίου περιλαμβάνει την κατασκευή των αριθμητικών μεθόδων και την ανάλυση των σφαλμάτων τους. Το πρακτικό μέρος περιλαμβάνει την υλοποίηση των αλγορίθμων στον Η/Υ με έναν γρήγορο και οικονομικό τρόπο ανάπτυξης και κατασκευής τους. Αυτό επιτυγχάνεται κατά τη γνώμη μας με τη χρήση ενός κατάλληλου προγράμματος (software) όπως είναι το MATLAB. Το MATLAB είναι μια υψηλού επιπέδου γλώσσα προγραμματισμού στην οποία η κύρια δομή δεδομένων είναι ο πίνακας και όπου υπάρχουν εντολές για έλεγχο ροής δεδομένων, συναρτήσεις και στοιχεία αντικειμενοστραφή προγραμματισμού. Η φιλοσοφία ανάπτυξης του είναι να προσφέρει στους χρήστες μια γλώσσα έκφρασης των προβλημάτων και των λύσεων τους με απλό μαθηματικό τρόπο. Η επίλυση προβλημάτων και η υλοποίηση αλγορίθμων με τη χρήση του MATLAB είναι γενικά πιο γρήγορη από άποψη πολυπλοκότητας χρόνου (time complexity) από οποιαδήποτε άλλη γλώσσα προγραμματισμού υψηλού επιπέδου, όπως είναι η C και η FORTRAN. Στη βασική του έκδοση περιλαμβάνει εντολές και ενσωματωμένες (build-in)
ii συναρτήσεις για επεξεργασία μεθόδων αριθμητικής ανάλυσης, υπολογιστικής γραμμικής άλγεβρας, συμβολικών μαθηματικών και γραφικών. Με τις συναρτήσεις αυτές προσφέρει στο χρήστη άμεση πρόσβαση σε υψηλής απόδοσης αριθμητικούς υπολογισμούς. Περιλαμβάνει επίσης μια βιβλιοθήκη η οποία επιτρέπει παραγωγή κώδικα σε C και FORTRAN και την άμεση σύνδεσή τους με το MATLAB. Τέλος, περιέχει εργαλειοθήκες (toolboxes) που είναι συλλογές από συναρτήσεις (M-files) οι οποίες προεκτείνουν τις δυνατότητες του περιβάλλοντος εργασίας του για την επίλυση εξειδικευμένων κλάσεων προβλημάτων (π.χ. symbolic math, statistics, optimization, signal processing, financial, partial differential equations, fuzzy logic). Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα. Τα περισσότερα υπολογιστικά προγράμματα εξαρτώνται σε μεγάλο βαθμό από τη χρήση πολλών βρόχων προκειμένου να επιτευχθεί ο υπολογισμός αθροισμάτων ή να υλοποιηθεί στον Η/Υ μια επαναληπτική μέθοδος. Συχνά, ο αλγόριθμος που πρέπει να υλοποιηθεί περιέχει βρόχους με την ίδια ουσιαστικά δομή με μοναδικό αποτέλεσμα την πολύπλοκη γραφή του κώδικα. Ενώ σε άλλες γλώσσες προγραμματισμού, κάθε μεταβλητή αναπαριστά μία μόνο αριθμητική τιμή, στο MATLAB αναπαριστά έναν πίνακα αριθμών και οι στοιχειώδεις αριθμητικές πράξεις γενικεύονται έτσι ώστε να εφαρμόζονται εύκολα στην αριθμητική των πινάκων. Για παράδειγμα, ένα άθροισμα της μορφής x n i= 1 i y i, ενώ σε άλλες γλώσσες προγραμματισμού υλοποιείται μέσα σε βρόχο για την άθροιση των γινομένων x iy i, στο MATLAB το ίδιο αποτέλεσμα προκύπτει ως το εσωτερικό γινόμενο δύο διανυσμάτων χωρίς τη γραφή κώδικα για βρόχο. Αυτή η "διανυσματικοποίηση" των πράξεων έχει ως αποτέλεσμα την ταχύτερη εκτέλεση τους και έναν τρόπο γραφής του κώδικα απλούστερο από άποψη δομής και εμφάνισης.
iii Σε πολλά προβλήματα ο προγραμματιστής χρειάζεται να έχει στη διάθεσή του έτοιμες ρουτίνες προκειμένου να ελαχιστοποιήσει το χρόνο παραγωγής κώδικα. Για αυτό το λόγο το MATLAB περιλαμβάνει μια πλούσια συλλογή από έτοιμες συναρτήσεις τις οποίες ο χρήστης μπορεί εύκολα να καλεί. Στις περισσότερες από αυτές ο κώδικας είναι ανοικτός στο χρήστη για οποιαδήποτε αλλαγή και τροποποίηση. Συχνά ο καλύτερος τρόπος για την κατανόηση ενός προβλήματος είναι η γραφική αναπαράσταση των δεδομένων του. Ενώ οι άλλες γλώσσες προγραμματισμού δεν παρέχουν ένα φιλικό, στο χρήστη, τρόπο γραφικής αναπαράστασης, το εντυπωσιακότερο ίσως χαρακτηριστικό του MATLAB είναι η ευκολία στη δημιουργία και το χειρισμό των διδιάστατων (2D) και τρισδιάστατων (3D) γραφικών. Γιώργος Στεφανίδης - Νικόλαος Σαμαράς
v Π Ε Ρ Ι Ε Χ Ο Μ Ε Ν Α Κ Ε Φ Α Λ Α Ι Ο Ε Ν Α Πίνακες 1 1.1 Εισαγωγή 3 1.2 Πράξεις με πίνακες 3 1.2.1 Πρόσθεση πινάκων 3 1.2.2 Πολλαπλασιασμός αριθμού με πίνακα 8 1.2.3 Πολλαπλασιασμός πινάκων 9 1.3 Είδη πινάκων 18 1.4 Ορίζουσα - Ίχνος πίνακα 21 1.5 Ανηγμένος κλιμακωτός πίνακας 24 1.6 Βαθμός (rank) πίνακα 33 1.7 Εύρεση του αντίστροφου πίνακα 38 1.8 Διανύσματα 48 Ασκήσεις 53 Κ Ε Φ Α Λ Α Ι Ο Δ Υ Ο Σφάλματα και υπολογιστική αριθμητική 57 2.1 Είδη σφαλμάτων 59 2.2 Αριθμοί κινητού σημείου 60 2.2.1 Το δυαδικό σύστημα 61 2.2.2 Συστήματα αριθμών κινητού σημείου 71 2.3 Σφάλματα στρογγυλοποίησης 74 2.4 Νόμοι αριθμητικής κινητού σημείου 77 2.5 Πρόσθεση και πολλαπλασιασμός 81
vi 2.6 Διαγραφή και αναδρομικοί υπολογισμοί 86 2.6.1 Σφάλματα που οφείλονται σε διαγραφή 86 2.6.2 Αναδρομικοί υπολογισμοί 91 2.7 Ευστάθεια αλγορίθμων 92 2.8 Κατάσταση προβλήματος 95 Ασκήσεις 98 Κ Ε Φ Α Λ Α Ι Ο Τ Ρ Ι Α Γραμμικά συστήματα 103 3.1 Ορισμοί 105 3.2 Επίλυση γραμμικού συστήματος 106 3.2.1 Τριγωνικό κάτω σύστημα 107 3.2.2 Τριγωνικό άνω σύστημα 111 3.2.3 Μέθοδος απαλοιφής του Gauss 115 3.2.4 Απαλοιφή Gauss - Jordan 142 3.2.5 LU παραγοντοποίηση 144 3.2.6 Η συνάρτηση lu 157 3.3 O αντίστροφος πίνακας 162 3.4 Παραδείγματα - Σχόλια 168 3.5 Η ακρίβεια μιας λύσης 177 3.5.1 Νόρμ ενός πίνακα 183 3.5.2 Ο αριθμός κατάστασης ενός πίνακα 184 3.6 Επαναληπτικές μέθοδοι 188 Ασκήσεις 201 Κ Ε Φ Α Λ Α Ι Ο Τ Ε Σ Σ Ε Ρ Α Ιδιοτιμές - Ιδιοδιανύσματα 205 4.1 Ορισμοί 207 4.2 Λύση του προβλήματος ιδιοτιμών 208 4.2.1 Η χαρακτηριστική εξίσωση και το θεώρημα
vii Cayley - Hamilton 211 4.2.2 Διαγωνιοποίηση πίνακα 214 4.3 Συναρτήσεις του MATLAB για προβλήματα ιδιοτιμών 220 Ασκήσεις 222 Κ Ε Φ Α Λ Α Ι Ο Π Ε Ν Τ Ε Δυναμοσειρές - Παρεμβολή 225 5.1 Εισαγωγή 227 5.2 Σύγκλιση δυναμοσειράς 227 5.2.1 Η μέθοδος του Aitken 235 5.3 Σειρά Taylor 239 5.3.1 Προσδιορισμός πολυωνύμων 243 5.4 Παρεμβολή 249 5.5 Προσεγγίσεις Padé 257 Ασκήσεις 263 Κ Ε Φ Α Λ Α Ι Ο Ε Ξ Ι Ρίζες συναρτήσεων 267 6.1 Εισαγωγή 269 6.2 Ρίζες πολυωνύμων 269 6.3 Αναζήτηση ριζών 273 6.4 Μέθοδος Newton - Raphson 281 6.5 Η μέθοδος της τέμνουσας 287 Ασκήσεις 291 Κ Ε Φ Α Λ Α Ι Ο Ε Π Τ Α Αριθμητική Παραγώγιση - Ολοκλήρωση 293 7.1 Εισαγωγή 295
viii 7.2 Αριθμητική παραγώγιση 296 7.3 Αριθμητική ολοκλήρωση 301 7.3.1 Κανόνας τραπεζίου 302 7.3.2 Κανόνας του Simpson 306 7.3.3 Τύποι των Newton - Cotes 310 Ασκήσεις 312 Π Α Ρ Α Ρ Τ Η Μ Α Α Χρήση του MATLAB 315 Π.1 Εισαγωγή 317 Π.1.1 Χρήση βοήθειας 317 Π.1.2 Εισαγωγή πινάκων 322 Π.1.3 Ειδικοί πίνακες 323 Π.1.4 Χειρισμός πινάκων 327 Π.2 Τελεστές 330 Π.3 Συναρτήσεις για πίνακες 334 Π.4 Λογικές συναρτήσεις 347 Π.4.1 Ειδικές συναρτήσεις 348 Π.4.2 Αριθμητικές συναρτήσεις 353 Π.5 M-files 367 Π.6 Δομές ελέγχου 370 Π Α Ρ Α Ρ Τ Η Μ Α Β Σύντομη αναφορά συναρτήσεων 379 Β Ι Β Λ Ι Ο Γ Ρ Α Φ Ι Α 387 Π Α Ρ Α Ρ Τ Η Μ Α Γ Χρήσιμες διευθύνσεις στο διαδίκτυο 391