Κ. Π Α Π Α Ρ Ρ Ι Ζ Ο Σ M A T L A B 6. 5 Π Ε Ρ Ι Ε Χ Ο Μ Ε Ν Α Π Ρ Ο Λ Ο Γ Ο Σ............. v Κ Ε Φ Α Λ Α Ι Ο 1 Β Α Σ Ι Κ Ε Σ Λ Ε Ι Τ Ο Υ Ρ Γ Ι Ε Σ Τ Ο Υ M A T L A B 1 1.1 ΠΡΑΞΕΙΣ ΚΑΙ ΑΡΙΘΜΗΤΙΚΕΣ ΠΑΡΑΣΤΑΣΕΙΣ 2 1.1.1 Το Παράθυρο Εντολών... 2 1.1.2 Πράξεις δυο αριθµών... 4 1.1.3 Αριθµητικές παραστάσεις... 5 1.2 Η ΕΝΤΟΛΗ ΚΑΤΑΧΩΡΗΣΗΣ 7 1.2.1 Ονοµατολογία µεταβλητών... 9 1.2.2 Σχόλια και συνέχιση εντολών... 10 1.3 Ο ΧΩΡΟΣ ΕΡΓΑΣΙΑΣ 12 1.3.1 ιαγραφή και εµφάνιση µεταβλητών... 12 1.3.2 Επανεκτέλεση εντολών... 15 1.3.3 Οι εντολές save και load... 16 1.3.4 Εµφάνιση αριθµών στην οθόνη... 17 1.4 Η ΕΝΤΟΛΗ DIARY ΚΑΙ ΤΑ ΑΡΧΕΙΑ SCRIPT 19 1.4.1 Η εντολή diary... 19 1.4.2 Τα αρχεία script... 21 1.4.3 Οι εντολές disp, input, pause... 23 1.4.4 Ο τρέχον κατάλογος και ο πλοηγός δρόµων... 24 1.5 ΣΥΝΑΡΤΗΣΕΙΣ 28 1.5.1 Η υπηρεσία βοήθειας... 29 1.5.2 Η κατηγορία elfun... 34 1.5.3 Η γενική δοµή των συναρτήσεων... 36 1.5.4 Η κατηγορία specfun... 40 1.6 ΜΙΓΑ ΙΚΟΙ ΑΡΙΘΜΟΙ 44 1.6.1 Μορφή και πράξεις µιγαδικών αριθµών... 44 1.6.2 Συναρτήσεις µιγαδικών αριθµών... 47 Κ Ε Φ Α Λ Α Ι Ο 2 Π Ρ Α Ξ Ε Ι Σ Κ Α Ι Χ Ε Ι Ρ Ι Σ Μ Ο Σ Μ Η Τ Ρ Ω Ν 4 9 2.1 ΕΙΣΑΓΩΓΗ ΜΗΤΡΩΝ ΣΤΟ MATLAB 50 2.1.1 Εισαγωγή µητρών µε πληκτρολόγηση... 50 2.1.2 Κατασκευή διανυσµάτων... 52 2.1.3 Κατασκευή δισδιάστατων µητρών... 54 i
2.2 ΠΡΑΞΕΙΣ ΜΕ ΤΗ ΧΡΗΣΗ ΜΗΤΡΩΝ 57 2.2.1 Πράξεις µητρών... 58 2.2.2 Πράξεις στοιχείο µε στοιχείο... 62 2.2.3 Ειδικές πράξεις µητρών... 64 2.2.4 Πράξεις συνόλων... 67 2.2.5 Οι συναρτήσεις sum, prod και cumsum, cumprod... 70 2.2.6 Πράξεις πολυωνύµων... 72 2.3 ΑΝΑΦΟΡΕΣ ΚΑΙ ΣΥΝΘΕΣΗ ΜΗΤΡΩΝ 75 2.3.1 Αναφορές σε µήτρες... 75 2.3.2 Συνθέσεις µητρών... 78 2.4 ΓΕΝΙΚΕΣ ΣΥΝΑΡΤΗΣΕΙΣ ΜΗΤΡΩΝ 81 2.4.1 Συναρτήσεις των κατηγοριών elfun και specfun... 81 2.4.2 Άλλες συναρτήσεις εισαγωγής µητρών... 82 2.4.3 Συναρτήσεις χειρισµού µητρών... 86 2.4.4 Μερικές δηµοφιλείς συναρτήσεις µητρών... 89 Κ Ε Φ Α Λ Α Ι Ο 3 Π Ρ Ο Γ Ρ Α Μ Μ Α Τ Ι Σ Μ Ο Σ Σ Τ Ο M A T L A B 9 3 3.1 ΣΧΕΣΙΑΚΟΙ ΚΑΙ ΛΟΓΙΚΟΙ ΤΕΛΕΣΤΕΣ 94 3.1.1 Σχεσιακοί τελεστές... 94 3.1.2 Λογικοί τελεστές... 97 3.2 ΟΜΕΣ ΕΛΕΓΧΟΥ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ 102 3.2.1 Η δοµή for... 102 3.2.2 Η δοµή if... 105 3.2.3 Η δοµή while... 112 3.2.4 Η δοµή switch... 117 3.2.5 Μερικά σύνθετα παραδείγµατα... 119 3.3 ΓΡΑΦΟΝΤΑΣ ΟΛΟΚΛΗΡΩΜΕΝΕΣ ΣΥΝΑΡΤΗΣΕΙΣ 124 3.3.1 Οι συναρτήσεις nargin και nargout... 125 3.3.2 Μέτρηση αριθµητικών πράξεων και χρόνου... 128 Κ Ε Φ Α Λ Α Ι Ο 4 Α Ν Α Ρ Ο Μ Ι Κ Ο Σ Π Ρ Ο Γ Ρ Α Μ Μ Α Τ Ι Σ Μ Ο Σ Κ Α Ι Μ Ι Α Ε Φ Α Ρ Μ Ο Γ Η 1 3 3 4.1 ΤΟ MATLAB ΣΑΝ ΑΝΑ ΡΟΜΙΚΗ ΓΛΩΣΣΑ 134 4.1.1 Προγραµµατίζοντας αναδροµικά... 134 4.1.2 Η αρχή του διαίρει και βασίλευε... 138 4.2 ΜΙΑ ΕΦΑΡΜΟΓΗ ΣΤΟ ΓΡΑΜΜΙΚΟ ΠΡΟΒΛΗΜΑ 142 4.2.1 Η µαθηµατική µορφή του γραµµικού προβλήµατος... 142 4.2.2 Η στάνταρτ µορφή του γραµµικού προβλήµατος... 146 4.2.3 Ο αλγόριθµος Simplex... 148 4.2.4 Επίλυση γενικών γραµµικών προβληµάτων... 154 ii
Κ Ε Φ Α Λ Α Ι Ο 5 Γ Ρ Α Φ Ι Κ Α Σ Τ Ο Ε Π Ι Π Ε Ο 1 6 7 5.1 ΑΠΛΕΣ ΓΡΑΦΙΚΕΣ ΠΑΡΑΣΤΑΣΕΙΣ 168 5.1.1 Βασικά χαρακτηριστικά της συνάρτησης plot... 168 5.1.2 Σηµάδια µορφές γραµµών και χρώµατα... 173 5.1.3 Μορφοποίηση αξόνων... 179 5.1.4 Οι εντολές grid, text και legend... 185 5.1.5 Γραφικές παραστάσεις στο ίδιο παράθυρο... 191 5.1.6 Εκτύπωση και αποθήκευση εικόνων... 194 5.2 ΕΙ ΙΚΕΣ ΓΡΑΦΙΚΕΣ ΠΑΡΑΣΤΑΣΕΙΣ 196 5.2.1 Συναρτήσεις γραφικών στο καρτεσιανό επίπεδο... 197 5.2.2 Συναρτήσεις γραφικών σε πολικές συντεταγµένες... 203 5.2.3 Συναρτήσεις σε τόξα... 207 5.2.4 Χρωµατίζοντας περιοχές... 213 Κ Ε Φ Α Λ Α Ι Ο 6 Γ Ρ Α Φ Ι Κ Α Σ Τ Ο Χ Ω Ρ Ο 2 1 7 6.1 ΚΑΜΠΥΛΕΣ ΣΤΟ ΧΩΡΟ 218 6.1.1 Η συνάρτηση plot3... 218 6.1.2 Η συνάρτηση view... 220 6.2 ΠΑΡΑΣΤΑΣΕΙΣ ΕΠΙΦΑΝΕΙΩΝ 225 6.2.1 Η συνάρτηση mesh και οι παραλλαγές της... 225 6.2.2 Η συνάρτηση surf και οι παραλλαγές της... 231 6.3 ΕΜΦΑΝΙΣΗ ΙΣΟΒΑΡΩΝ ΚΑΜΠΥΛΩΝ 235 6.3.1 Συναρτήσεις τύπου contour... 235 6.3.2 Χρησιµοποιώντας χρώµατα... 241 6.3.3 Μήτρες χρωµάτων... 244 6.4 ΓΡΑΦΙΚΗ ΕΠΙΛΥΣΗ ΓΡΑΜΜΙΚΟΥ ΠΡΟΒΛΗΜΑΤΟΣ 250 6.4.1 Αλγεβρική επίλυση γραµµικού προβλήµατος... 251 6.4.2 Γραφική επίλυση γραµµικού προβλήµατος... 260 Κ Ε Φ Α Λ Α Ι Ο 7 Τ Υ Π Ο Ι Ε Ο Μ Ε Ν Ω Ν 2 6 9 7.1 ΧΑΡΑΚΤΗΡΕΣ ΚΑΙ ΣΥΜΒΟΛΟΣΕΙΡΕΣ 270 7.1.1 Κατασκευή και χειρισµός συµβολοσειρών... 270 7.1.2 Οι συναρτήσεις... 274 7.2 ΚΕΛΙΑ 278 7.2.1 Κατασκευή και αναφορά κελιών... 278 7.2.2 Συνάρτηση κελιών... 281 7.3 ΟΜΕΣ 284 7.3.1 Κατασκευή και αναφορά δοµών... 284 7.3.2 Συναρτήσεις δοµών... 286 7.4 ΠΟΛΥ ΙΑΣΤΑΤΕΣ ΟΜΕΣ Ε ΟΜΕΝΩΝ 287 iii
7.5 ΑΡΑΙΕΣ ΜΗΤΡΕΣ 290 7.5.1 Κατασκευή αραιών µητρών... 290 7.5.2 Πράξεις και συναρτήσεις αραιών µητρών... 294 7.5.3 Συναρτήσεις για γραφήµατα... 296 Κ Ε Φ Α Λ Α Ι Ο 8 Χ Ε Ι Ρ Ι Σ Μ Ο Σ Γ Ρ Α Φ Ι Κ Ω Ν 3 0 1 8.2 ΓΡΑΦΙΚΑ ΑΝΤΙΚΕΙΜΕΝΑ... 302 8.2.1 Ιεράρχηση αντικειµένων... 302 8.2.2 ιαβάζοντας και τροποποιώντας ιδιότητες αντικειµένων... 303 8.2.3 Μερικές δηµοφιλείς ιδιότητες... 306 8.2 ΛΕΙΤΟΥΡΓΙΕΣ ΚΙΝΗΣΗΣ... 319 8.2.1 Πρωτόγονες λειτουργίες κίνησης... 319 8.2.2 Προηγµένες µορφές κίνησης... 325 Κ Ε Φ Α Λ Α Ι Ο 9 Γ Ρ Α Φ Ι Κ Η Ι Ε Π Ι Φ Α Ν Ε Ι Α Χ Ρ Η Σ Τ Η 3 3 1 9.1 ΓΡΑΦΙΚΗ ΙΕΠΙΦΑΝΕΙΑ ΧΡΗΣΤΗ... 332 9.1.1 Εισαγωγή στο GUIDE... 332 9.2 ΜΕΡΙΚΕΣ ΕΦΑΡΜΟΓΕΣ G.U.I.... 336 9.2.1 Μια απλή εφαρµογή G.U.I... 337 9.2.2 Μια σύνθετη εφαρµογή G.U.I.... 347 Ε Υ Ρ Ε Τ Η Ρ Ι Ο Ο Ρ Ω Ν 3 5 5 Ε Υ Ρ Ε Τ Η Ρ Ι Ο Σ Υ Μ Β Ο Λ Ω Ν, Ε Ν Τ Ο Λ Ω Ν Κ Α Ι Σ Υ Ν Α Ρ Τ Η Σ Ε Ω Ν Τ Ο Υ M A T L A B 3 5 7 Ε Υ Ρ Ε Τ Η Ρ Ι Ο Μ Α Ρ Χ Ε Ι Ω Ν Τ Ο Υ Β Ι Β Λ Ι Ο Υ 3 6 0 Ε Υ Ρ Ε Τ Η Ρ Ι Ο Ε Ι Κ Ο Ν Ω Ν 3 6 1 Ε Υ Ρ Ε Τ Η Ρ Ι Ο Π Ι Ν Α Κ Ω Ν 3 6 5 Π Α Ρ Α Ρ Τ Η Μ Α Α : Ο Η Γ Ι Ε Σ Ε Γ Κ Α Τ Α Σ Τ Α Σ Η Σ Α - 1 Π Α Ρ Α Ρ Τ Η Μ Α Β : Μ Ε Τ Α Φ Ο Ρ Α Τ Ω Ν Μ Α Ρ Χ Ε Ι Ω Ν Β - 1 iv
ΠΡΟΛΟΓΟΣ 1ης Έκδοσης Το βιβλίο αυτό αποτελεί µια εισαγωγή στις βασικές λειτουργίες του MATLAB 6. Στις σελίδες του περιγράφονται διεξοδικά οι λειτουργίες, που είναι σχετικές µε την επιφάνεια εργασίας, οι δυνατότητές του για χειρισµό και σύνθεση µητρών, οι εντολές και συναρτήσεις, που καθιστούν το MATLAB µια από τις πιο εύχρηστες γλώσσες προγραµµατισµού και τέλος παρουσιάζονται οι εντυπωσιακές γραφικές λειτουργίες του στις δυο και τρεις διαστάσεις. Το βιβλίο γράφτηκε ώστε να είναι πλήρως κατανοητό από αναγνώστες µε ελάχιστες γνώσεις πληροφορικής. Οι µόνες γνώσεις που πρέπει να έχει ο αναγνώστης είναι µια µικρή εξοικείωση µε το λειτουργικό σύστηµα windows και ιδιαίτερα να γνωρίζει πως να ανοίγει, να αντιγράφει και να µεταφέρει αρχεία. Πρέπει επίσης να γνωρίζει πως ανοίγονται οι ιστοσελίδες µε ένα οποιοδήποτε πλοηγό ιστοσελίδων (web browser). Αν και δεν είναι απαραίτητο, καλό είναι ο αναγνώστης να γνωρίζει πως εγκαθίστανται λογισµικά εφαρµογών. Στο Παράρτηµα Α περιγράφεται αναλυτικά ο τρόπος εγκατάστασης του MATLAB 6. Τo MATLAB είναι ένα τεράστιο περιβάλλον ανάπτυξης εφαρµογών. Είναι αδύνατο να συµπεριληφθούν όλες οι βασικές του λειτουργίες σε ένα βιβλίο της έκτασης των 350 περίπου σελίδων. Εντυπωσιακές λειτουργίες του, όπως είναι το περιβάλλον GUI, ο αντικειµενοστραφής προγραµµατισµός και ο χειρισµός αρχείων αφέθηκαν εκτός ύλης µε το σκεπτικό να συµπεριληφθούν σε ένα δεύτερο τόµο, ο οποίος θα περιλαµβάνει και ειδικά θέµατα, όπως, για παράδειγµα, συναρτήσεις για γραµµική άλγεβρα και αριθµητική ανάλυση, συµβολικούς υπολογισµούς, θεωρία ελέγχου, ανάλυση σήµατος και βελτιστοποίηση. Με το σκεπτικό αυτό έχει επιλεγεί ένα θέµα, το οποίο στο τέλος των δύο βιβλίων θα αποτελέσει µια ολοκληρωµένη εφαρµογή. Το θέµα έχει επιλεγεί από το χώρο της βελτιστοποίησης. Περιλαµβάνει θέµατα προγραµµατισµού, γραφικών και κίνησης (animation). Θα αναπτυχθεί ένα λογισµικό για διδασκαλία και επαγγελµατική χρήση του γραµµικού προγραµµατισµού. Το θέµα αυτό διαπραγµατεύεται κυρίως στα τµήµατα 4.2 και 6.4, στα οποία δεν ενδείκνυνται για πρώτη ανάγνωση. Τα θέµατα που διαπραγµατεύονται στο βιβλίο αναπτύσσονται σε βάθος και έκταση. Γι αυτό το λόγο προτείνεται στον αναγνώστη να διαβάζει το βιβλίο από την αρχή προς το τέλος. Κάτι τέτοιο πιθανόν να είναι ανιαρό για µερικούς αναγνώστες, παρότι κατά την άποψή µας είναι το καλύτερο από πλευράς απόκτησης συµπυκνωµένης γνώσης. Οι ανυπόµονοι αναγνώστες µπορούν στην αρχή να κάνουν επιλογή ύλης. Σ αυτή την περίπτωση για πρώτη ανάγνωση ενδείκνυνται τα τµήµατα του πρώτου κεφαλαίου που διαπραγµατεύονται τα αρχεία script και τις συναρτήσεις (τµήµατα 1.4 και 1.5), τα τµήµατα του δευτέρου κεφαλαίου που διαπραγµατεύονται το χειρισµό, τις πράξεις και τις αναφορές σε µήτρες (τµήµατα 2.1, 2.2 και 2.3), όλο το κεφάλαιο 3, όπου περιγράφεται αναλυτικά ο v
προγραµµατισµός και τµήµατα των κεφαλαίων 5 και 6 που διαπραγµατεύονται γραφικά (τµήµατα 5.1, 6.1 και 6.2). Η εκµάθηση µιας γλώσσας προγραµµατισµού ή ενός λογισµικού εφαρµογών, όπως είναι το MATLAB, µοιάζει µε την εκµάθηση ενός µουσικού οργάνου. Αν κάποιος δεν παίζει µόνος του τις νότες, που διαβάζει, δεν πρόκειται ποτέ να µάθει το µουσικό όργανο. Παρόµοια, αν δεν πληκτρολογήσει µόνος του τις εντολές, αν δεν χρησιµοποιήσει ο ίδιος τις λειτουργίες που προσφέρει το λογισµικό, δεν πρόκειται να το µάθει. Όµως στην πορεία µάθησης του περιεχοµένου του βιβλίου αυτού πιθανόν να είναι κουραστικό στον αναγνώστη να προγραµµατίσει όλες τις συναρτήσεις και τα script αρχεία. Γι αυτό το λόγο όλα τα m αρχεία του βιβλίου διατίθενται δωρεάν στους αναγνώστες του βιβλίου στην ιστοσελίδα του συγγραφέα http://macedonia.uom.gr/~paparriz/. Στην ίδια ιστοσελίδα υπάρχουν σχεδόν όλες οι εντολές του βιβλίου αποθηκευµένες σε αρχεία script. Συστήνεται όµως στον αναγνώστη να πληκτρολογεί µόνος του τις εντολές. Στο παράρτηµα Β περιγράφεται ο τρόπος µεταφοράς των αρχείων από την ιστοσελίδα του συγγραφέα στον προσωπικό υπολογιστή του αναγνώστη. Για περαιτέρω διευκόλυνση του αναγνώστη υπάρχουν στο τέλος του βιβλίου ευρετήρια όρων του βιβλίου, συµβόλων, εντολών και συναρτήσεων του MATLAB, που περιγράφονται στο βιβλίο, ευρετήρια µε όλα τα m αρχεία και τις συναρτήσεις του βιβλίου. Υπάρχουν επίσης λίστες µε όλες τις εικόνες και όλους τους πίνακες του βιβλίου. Σε πολύ σπάνιες περιπτώσεις η συγγραφή ενός βιβλίου είναι αποκλειστικό έργο ενός ανθρώπου και το βιβλίο αυτό δεν αποτελεί εξαίρεση στον κανόνα αυτό. Εκφράζω από τις γραµµές αυτές την ευγνωµοσύνη µου στους συνεργάτες µου Γιώργο Στεφανίδη, Νίκο Σαµαρά, Κώστα όσιο και Αλέξανδρο Βουτσά, οι οποίοι διάβασαν προσεκτικά το βιβλίο και έκαναν ουσιαστικές προτάσεις για βελτίωσή του. Ευχαριστώ επίσης το Κέντρο Υποστήριξης Τεχνολογιών Πληροφορικής του Αριστοτελείου Πανεπιστηµίου Θεσσαλονίκης και τον επιστηµονικό υπεύθυνο καθηγητή Γεώργιο Πάγκαλο για την ευγενή καλοσύνη του να µου επιτρέψει να χρησιµοποιήσω το MATLAB 6 του κέντρου. Ευχαριστώ επίσης θερµά τον Εκδοτικό Οίκο «ΖΥΓΟΣ» για την αµέριστη συµπαράστασή του καθ όλη τη διάρκεια συγγραφής του βιβλίου. Τέλος, αξιοµνηµόνευτη είναι η προσπάθεια της δακτυλογράφου κ. Μαρίνας Κάγκα-Μισύρη, η οποία κατάφερε να µετατρέψει τα δυσανάγνωστα χειρόγραφά µου σε αναγνώσιµο κείµενο. Θεσσαλονίκη, 2001 vi
ΠΡΟΛΟΓΟΣ 2ης Έκδοσης Η µεγάλη επιτυχία της πρώτης έκδοσης µας οδήγησε στην ανανέωση του βιβλίου ώστε να αναφέρεται στην τελευταία έκδοση του MATLAB. Προτιµήθηκε η χρήση της τελευταίας έκδοσης του MATLAB, η έκδοση 6.5. Ο αναγνώστης δεν θα έχει καµία δυσκολία στη χρήση της επαγγελµατικής έκδοσης, αν εξοικειωθεί ικανοποιητικά µε χρήση της φοιτητικής έκδοσης. Εκτός της απαραίτητης αναπροσαρµογής της παλιάς έκδοσης η οποία διαπερνά κυρίως το πρώτο κεφάλαιο, προστέθηκε ένα νέο κεφάλαιο το οποίο διαπραγµατεύεται την ανάπτυξη παραθυρικών εφαρµογών επεκτείνοντας έτσι το περιεχόµενο σε ένα από τα πιο σύγχρονα θέµατα του αντικειµενοστραφούς προγραµµατισµού. Θέλω να ευχαριστήσω τους συνεργάτες µου Κώστα όσιο και Άγγελο Σιφαλέρα, οι οποίοι έκαναν όλες τις απαραίτητες διορθώσεις για την επανέκδοση του βιβλίου σύµφωνα µε τη νέα έκδοση του MATLAB. Επίσης θέλω να αναφερθώ ιδιαίτερα στον κ. Άγγελο Σιφαλέρα, για τη σηµαντική του βοήθεια µε τις υποδείξεις του κατά τη συγγραφή του κεφαλαίου 9 που προστέθηκε στη νέα έκδοση του βιβλίου. Θεσσαλονίκη, 2004 vii