Χρονικές σειρές 2 o μάθημα: Εισαγωγή στη MATLAB Εαρινό εξάμηνο 2018-2019 Τμήμα Μαθηματικών ΑΠΘ Διδάσκουσα: Αγγελική Παπάνα Μεταδιδακτορική Ερευνήτρια Πολυτεχνική σχολή, Α.Π.Θ. & Οικονομικό Τμήμα, Πανεπιστήμιο Μακεδονίας http://users.auth.gr/~agpapana/ 1
ΠΙΝΑΚΕΣ ΚΑΙ ΔΙΑΝΥΣΜΑΤΑ Οι πίνακες και τα διανύσματα αποτελούν τις κύριες μεταβλητές της MATLAB όπως δηλώνεται και από το όνομά της. Μάλιστα στις αρχικές εκδοχές της MATLAB, όλες οι μεταβλητές ήταν πίνακες, αφού οι αριθμοί αντιμετωπίζονται σαν 1 1 πίνακες και τα διανύσματα σαν 1 n πίνακες. Οι πίνακες στη MATLAB εισάγονται με βάση τους εξής κανόνες: 1. Τα στοιχεία του πίνακα γράφονται ανάμεσα σε αγκύλες [.. ]. 2. Τα στοιχεία μιας γραμμής του πίνακα χωρίζονται είτε με κόμματα είτε με κενό. 3. Η αλλαγής γραμμής στον πίνακα δηλώνεται είτε με ερωτηματικό (;) είτε με αλλαγή γραμμής στο παράθυρο εντολών της MATLAB. 2
Παράδειγμα Θα ορίσουμε και θα προσθέσουμε τα διανύσματα u = (4, 0, 1, 2) και v = (1, 2, 3, 1). >> u = [4 0 1 2]; >> v = [1, 2, 3, 1]; >> u+v 5 2-4 3 Προσέξτε ότι στο u χωρίσαμε τα στοιχεία με κενά ενώ στο v τα χωρίσαμε με κόμματα. Οι δύο τρόποι είναι ισοδύναμοι. 3
Παράδειγμα Θα υπολογίσουμε την παράσταση 3Α + 2B όπου Α και Β οι πίνακες A = 5 4 0 1 3 6 >> A = [-5 4 0 1-3 6] Α = -5 4 0 1-3 6 >> Β = [1 0 2; 0 3 1] Β = 1 0-2 0 3 1 και Β = 1 0 2 0 3 1 >> 3*Α+2*Β -13 12-4 3-3 20 Προσέξτε ότι στον A αλλάζαμε γραμμή σε κάθε νέα γραμμή του πίνακα ενώ στον B χωρίσαμε τις γραμμές με ερωτηματικό. Οι δύο τρόποι είναι ισοδύναμοι. 4
Παράδειγμα Nα υπολογίσετε τα γινόμενα uv και vu όπου u = [1 1 4] και v = >> u = [1 1 4]; >> v = [ 3; 0; 2]; >> u*v 5 >> v*u -3 3-12 0 0 0 2-2 8 3 0 2. 5
Η MATLAB χρησιμοποιεί επίσης αλφαριθμητικές μεταβλητές οι οποίες έχουν σαν τιμές ακολουθίες χαρακτήρων οι οποίες εισάγονται ανάμεσα σε τόνους όπως φαίνεται και στο παράδειγμα που ακολουθεί. Παράδειγμα >> stringvar1 = writing text stringvar1 = writing text >> stringvar2 = Lastname firstname stringvar2 = Lastname firstname 6
Τέλος η MATLAB χρησιμοποιεί λογικές μεταβλητές. Στην τιμή true (αληθής) η MATLAB αντιστοιχεί τη μονάδα 1 ενώ στην τιμή false (ψευδής) αντιστοιχεί το 0. Έτσι οι παραστάσεις true, logical(1) και logical(true) μας δίνουν την τιμή 1, ενώ οι παραστάσεις false, logical(0) και logical(false) μας δίνουν την τιμή 0. >> x=true x = 1 >> y=false y = 0 Παράδειγμα >> logical(true) 1 >> logical(false) 0 >> logical(0) 0 7
Βαθμωτές συναρτήσεις βιβλιοθήκης Η MATLAB είναι εφοδιασμένη με αρκετές συναρτήσεις βιβλιοθήκης οι οποίες περιλαμβάνουν τους λογαρίθμους, εκθετικές συναρτήσεις, τριγωνομετρικές συναρτήσεις, υπερβολικές συναρτήσεις, συναρτήσεις στατιστικής ανάλυσης κτλ. Με την εντολή >> help elfun εμφανίζεται μια λίστα στοιχειωδών μαθηματικών συναρτήσεων: Με την εντολή >> help specfun εμφανίζεται μια λίστα ειδικών μαθηματικών συναρτήσεων. 8
Λίστα βασικών μαθηματικών συναρτήσεων Συνάρτηση Ερμηνεία sin ημίτονο cos συνημίτονο tan εφαπτομένη asin τόξο ημιτόνου acos τόξο συνημιτόνου atan τόξο εφαπτομένης exp εκθετική συνάρτηση log φυσικός λογάριθμος log10 λογάριθμος με βάση το 10 abs απόλυτη τιμή sqrt τετραγωνική ρίζα mod προσημασμένο υπόλοιπο διαίρεσης Συνάρτηση rem round ceil floor fix Ερμηνεία υπόλοιπο διαίρεσης στρογγυλοποίηση στον πλησιέστερο ακέραιο στρογγυλοποίηση στον μεγαλύτερο ακέραιο στρογγυλοποίηση προς το μείον άπειρο στρογγυλοποίηση προς το μηδέν 9
Λίστα βασικών στατιστικών συναρτήσεων Συνάρτηση mean median var cov autocorr skewness kurtosis Ερμηνεία μέση τιμή διάμεσο διακύμανση πίνακας συνδιασπορών δειγματική αυτοσυσχέτιση λοξότητα κύρτωση 10
Μπορούμε να βρούμε πληροφορίες για τις πιο πάνω συναρτήσεις με την εντολή help και το όνομα της συνάρτησης. Για παράδειγμα: >> help mean 11
Ο αριθμός π Η MATLAB έχει προεπιλέξει το όνομα pi για τον αριθμό π. Στο παράδειγμα αυτό θα χρησιμοποιήσουμε πρώτα την εντολή format long για να βλέπουμε 15 και όχι 4 σημαντικά ψηφία μετά την υποδιαστολή. Θα βρούμε τώρα τα sin(π/3), cos(π/6) και tan(π/4): >> format long >> pi 3.14159265358979 >> sin(pi/3) 0.86602540378444 >> cos(pi/6) 0.86602540378444 >> tan(pi/4) 1.00000000000000 12
Παραδείγματα >> x=10.51 x = 10.5100 >> round(x) 11 >> floor(x) 10 >> ceil(x) 11 >> fix(x) 10 >> y=-10.51 y = -10.5100 >> round(y) -11 >> floor(y) -11 >> ceil(y) -10 >> fix(y) -10 13
Εντολές διαχείρισης του χώρου εργασίας Στον παρακάτω πίνακα αναγράφονται χρήσιμες εντολές για τη διαχείριση του παραθύρου εργασίας και των ενεργών μεταβλητών που έχουμε δημιουργήσει. Εντολή exit, quit clear clc diary help who, whos load save Ερμηνεία Έξοδος από το πρόγραμμα Διαγραφή ενεργών μεταβλητών Καθαρισμός παραθύρου εργασίας Αποθήκευση εργασίας σε αρχείο Βοήθεια Κατάλογος ενεργών μεταβλητών εργασίας Φόρτωση από αρχείο των μεταβλητών εργασίας Αποθήκευση σε αρχείο των μεταβλητών εργασίας 14
Βασικές οδηγίες για το παράθυρο εντολών Στην MATLAB υπάρχει διάκριση μεταξύ μικρών και κεφαλαίων γραμμάτων (οι μεταβλητές Α και a είναι διαφορετικές μεταξύ τους). Όταν γράψουμε το όνομα μιας μεταβλητής, η MATLAB τυπώνει στην οθόνη την τιμή της. Αν γράψουμε το σύμβολο ; στο τέλος μιας εντολής, το αποτέλεσμά της δεν τυπώνεται στην οθόνη. Μπορούμε να γράψουμε μια ακολουθία εντολών της MATLAB σε μια γραμμή χωρίζοντάς τις με κόμματα ή ερωτηματικά. Πατώντας τα πλήκτρα με τα πάνω και κάτω βέλη ([ ] και [ ]) μπορούμε να διατρέξουμε όλες τις προηγούμενες εντολές. Επίσης μια προηγούμενη εντολή μπορεί να επαναληφθεί αν γράψουμε τα πρώτα γράμματα και μετά πατήσουμε το πλήκτρο με το πάνω βέλος [ ]. 15
Οι εντολές quit και exit Με τις εντολές quit και exit τερματίζεται η τρέχουσα εργασία. Πολλές φορές είναι καλό να αποθηκεύσουμε την εργασία που κάναμε ή/και τις τιμές των μεταβλητών που δημιουργήσαμε στην εργασία. Το πώς γίνεται η αποθήκευση θα το συζητήσουμε στη συνέχεια. Οι εντολές clear και clc Η εντολή clear var διαγράφει τη μεταβλητή var του χώρου εργασίας. Η εντολή clear διαγράφει όλες τις ενεργές μεταβλητές. Το ίδιο κάνει και η εντολή clear variables. Αν θέλουμε να διαγράψουμε μόνο τις μεταβλητές var1, var2 και var3 μπορούμε να γράψουμε >> clear var1 var2 var3 16
>> clear var1 var2 var3 (οι var1, var2 και var3 χωρίζονται με κενά και όχι με κόμματα). Αν θέλουμε να διαγράψουμε όλες τις μεταβλητές που αρχίζουν από Z: >> clear Ζ* Αν τέλος το όνομα της προς διαγραφή μεταβλητής είναι αποθηκευμένο σε αλφαριθμητικό, για παράδειγμα τη name, μπορούμε να χρησιμοποιήσουμε τη συναρτησιακή μορφή της εντολής clear(name). >> name = text example'; >> clear(name) Η εντολή clc καθαρίζει απλώς το παράθυρο εργασίας, δεν διαγράφονται οι μεταβλητές. 17
Η εντολή help Έχουμε ήδη χρησιμοποιήσει την εντολή αυτή. Η MATLAB είναι εφοδιασμένη με ένα εκτεταμένο επιγραμμικό (on line) σύστημα βοήθειας. Η εντολή >> help topic μας δίνει βοήθεια για το θέμα topic. Παράδειγμα Θα δούμε τη βοήθεια που παίρνουμε για την εντολή clc που είδαμε πιο πάνω. >> help clc CLC Clear command window. CLC clears the command window and homes the cursor. 18
Κάποιος θα μπορούσε να αρχίσει με την εντολή help help η οποία εξηγεί πως λειτουργεί το σύστημα βοήθειας και αναφέρει επίσης κάποιες σχετικές εντολές. Γράφοντας απλά help παίρνουμε ένα κατάλογο θεμάτων για τα οποία υπάρχει διαθέσιμη βοήθεια. Σ αυτόν τον κατάλογο μπορούμε να βρούμε για παράδειγμα το θέμα «elfun - elementary math functions» (στοιχειώδεις μαθηματικές συναρτήσεις). Αν γράψουμε τώρα help elfun παίρνουμε τον κατάλογο των διαθέσιμων μαθηματικών συναρτήσεων. Για παράδειγμα, βλέπουμε ότι εκτός από το φυσικό λογάριθμο log, υπάρχει λογάριθμος με βάση το 10 και το 2: log - Natural logarithm. log10 - Common (base 10) logarithm. log2 - Base 2 logarithm and dissect floating point number. 19
Οι εντολές who και whos Η εντολή who μας δίνει απλώς κατάλογο των ενεργών μεταβλητών (χωρίς άλλες πληροφορίες). Η εντολή whos μαζί με τον κατάλογο μας δίνει πληροφορίες για όλες τις ενεργές μεταβλητές. Υπάρχει επίσης η δυνατότητα να χρησιμοποιήσουμε τις δύο εντολές για μεμονωμένες μεταβλητές, όπως φαίνεται πιο κάτω: who var1 var2 var3: κατάλογος των var1, var2 και var3 who ab*: κατάλογος των μεταβλητών με όνομα που αρχίζει από ab who *z: κατάλογος των μεταβλητών με όνομα που λήγει σε z. who file filename: κατάλογος των μεταβλητών που είναι αποθηκευμένες στο αρχείο filename.mat 20
>> whos Name Size Bytes Class A 2x2 64 double array (complex) varlog 1x1 1 logical array varstr 1x5 10 char array wvec 1x4 32 double array xreal 1x1 8 double array zcomp 1x1 16 double array (complex) Grand total is 16 elements using 131 bytes Παρατηρούμε ότι όλες οι μεταβλητές αντιμετωπίζονται σαν πίνακες (arrays). Στην πρώτη στήλη έχουμε το όνομα κάθε μεταβλητής, στη δεύτερη τη διάσταση κάθε πίνακα (size), στην τρίτη το πλήθος των bytes και στην τέταρτη την κλάση (class) της μεταβλητής. Η προεπιλογή για τους αριθμούς είναι η διπλή ακρίβεια (double precision). 21
Η MATLAB μας προσδιορίζει αν ένας πίνακας είναι μιγαδικός (complex) και κατά πόσο αυτός είναι λογικός (logical) ή αλφαριθμητικός (πίνακας χαρακτήρων, char array). Η διάσταση του κάθε πίνακα καθορίζει και τον τύπο της μεταβλητής. Έτσι ο αριθμός xreal είναι 1 1 πίνακας και το διάνυσμα wvec είναι 1 4 πίνακας. 22
Καθορισμός Directory Με την εντολή >> cd c:\.. choose path...\ αλλάζουμε το directory στο οποίο βρίσκεται το Matlab, και άρα μπορούμε και να σώσουμε την εργασία μας. π.χ. Δημιουργείστε πρώτα τον φάκελο temp στον δίσκο C. Έπειτα γράψτε την εντολή >> cd c:\temp\ ώστε να αλλάξετε directory. 23
Οι εντολές save, load και diary Η εντολή που αποθηκεύει όλες τις ενεργές μεταβλητές στο δυαδικό αρχείο filename.mat είναι: >> save filename Το αρχείο αυτό μπορούμε έπειτα να το φορτώσουμε με την εντολή >> load filename και να συνεχίσουμε την εργασία μας από το σημείο που διακόψαμε (αφού πρώτα μεταβούμε στο σωστό directory). 24
Άλλες επιλογές που έχουμε με τις δύο εντολές φαίνονται πιο κάτω: save: αποθήκευση όλων των μεταβλητών στο αρχείο matlab.mat load: φόρτωση όλων των μεταβλητών από το αρχείο matlab.mat save filename x y z: αποθήκευση στο αρχείο filename.mat μόνο των μεταβλητών x, y και z load filename x y z: φόρτωση από το αρχείο filename.mat μόνο των μεταβλητών x, y και z save filename A*: αποθήκευση στο αρχείο filename.mat μόνο των μεταβλητών με όνομα που αρχίζει από A* load filename A*: φόρτωση από το αρχείο filename.mat μόνο των μεταβλητών με όνομα που αρχίζει από A* 25
save filename -ascii: αποθήκευση όλων των μεταβλητών στο αρχείο filename σε μορφή ASCII με 8 σημαντικά ψηφία save filename ascii -double: αποθήκευση όλων των μεταβλητών στο αρχείο filename σε μορφή ASCII με 16 σημαντικά ψηφία save filename x y z ascii : αποθήκευση μόνο των μεταβλητών x, y και z στο αρχείο filename σε μορφή ASCII με 8 σημαντικά ψηφία 26
ΤΙ ΕΙΝΑΙ ΕΝΑ.ASCII ΑΡΧΕΙΟ Η επέκταση αρχείου είναι το σύνολο των τριών ή τεσσάρων χαρακτήρων στο τέλος του αρχείου (στην περίπτωση αυτή.ascii). Ένα αρχείο ASCII (American Standard Code for Information Interchange) είναι ένα αρχείο κειμένου που επιτρέπει σε ένα έγγραφο που πρέπει να αναγνωριστεί και να διαβάσετε εύκολα από οποιαδήποτε πλατφόρμα ή το λειτουργικό σύστημα. Χρησιμοποιείται για αναπαράσταση κειμένου στους υπολογιστές. σε συσκευές τηλεπικοινωνίας, καθώς και σε άλλες συσκευές που δουλεύουν με κείμενο. Οι περισσότερες σύγχρονες κωδικοποιήσεις χαρακτήρων βασίζονται στον ASCII, αν και υποστηρίζουν πολύ περισσότερους χαρακτήρες. Τα χαρακτηριστικά του περιλαμβάνουν ένα χαρακτήρα 7-bit σετ με 128 χαρακτήρες. 27
Βιβλιογραφία 1. Γ. Γεωργίου, Χ. Ξενοφώντος. Εισαγωγή στη MATLAB. Πανεπιστήμιο Κύπρου, Λευκωσία, 2007 (ISBN 978-9963-644-57-5). 2. Matlab, High-Performance Numeric Computation and Visualization Software. The Math Works Inc, 1992. 28