MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι...

28
Ε ΕΘΝΙΚΟ ΣΧΟΛΗ ΤΟΜΕΑΣ Πρόχ Μια Χρ Ο ΜΕΤΣ Η ΜΗΧΑΝ Σ ΜΗΧΑΝΟ ΑΥΤΟΜ χειρες Σημ σύντομη ρ. Προβατί ΑΘΗΝ ©All ΣΟΒΙΟ Π ΝΟΛΟΓΟΛΟΓΙΚΩΝ ΜΑΤΟΥ ΕΛ μειώσεις ξενάγηση δης, Καθηγ Α Οκτώβρι Rights Res ΠΟΛΥΤ Ν ΜΗΧΑ Ν ΚΑΤΑΣΚ ΛΕΓΧΟΥ στο MAT η σε αρχά γητής Ε.Μ ιος 2010 served ΕΧΝΕΙΟ ΑΝΙΚΩΝ ΚΕΥΩΝ & TLAB ριους Μ.Π. Ο

Transcript of MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι...

Page 1: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

ΕΕΘΝΙΚΟΣΧΟΛΗΤΟΜΕΑΣ

ΠρόχΜια

Χρ

Ο ΜΕΤΣΗ ΜΗΧΑΝΣ ΜΗΧΑΝΟ

ΑΥΤΟΜ

χειρες Σημσύντομη

ρ. ΠροβατίΑΘΗΝ

©All

ΣΟΒΙΟ ΠΝΟΛΟΓΩΟΛΟΓΙΚΩΝΜΑΤΟΥ ΕΛ

μειώσεις ξενάγηση

δης, ΚαθηγΑ Οκτώβρι Rights Res

ΠΟΛΥΤΩΝ ΜΗΧΑΝ ΚΑΤΑΣΚΛΕΓΧΟΥ

στο MATη σε αρχά

γητής Ε.Μιος 2010 served

ΕΧΝΕΙΟΑΝΙΚΩΝ ΚΕΥΩΝ &

TLAB ριους

Μ.Π.

Ο

Page 2: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

2

ΑΝΤΙ ΠΡΟΛΟΓΟΥ

Σκοπός του μικρού αυτού ‘πονήματος’ είναι να υπενθυμίσει στον σπουδαστή της

Σχολής Μηχανολόγων του Ε.Μ.Πολυτεχνείου τις απαραίτητες εκείνες στοιχειώδεις γνώσεις που θα του επιτρέψουν να ανταποκριθεί στις ανάγκες των μαθημάτων

«ΑΝΑΛΥΣΗ ΜΗΧΑΝΟΛΟΓΙΚΩΝ ΚΑΤΑΣΚΕΥΩΝ Ι & ΙΙ», «ΕΛΑΦΡΩΝ ΚΑΤΑΣΚΕΥΩΝ», «ΕΜΒΙΟΜΗΧΑΝΙΚΗ & ΒΙΟΪΑΤΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ» καθώς και άλλων συναφών μαθημάτων. Ο σύντομος αυτός οδηγός γράφτηκε πολύ βιαστικά

και ως εκ τούτου απέχει κατά πολύ από το σημείο της πληρότητας. Έτσι, προτρέπουμε τον σπουδαστή να κάνει επανάληψη στο αντίστοιχο εξειδικευμένο

εξαμηνιαίο μάθημα και επίσης να συμβουλευθεί και άλλα συγγράμματα όπως λ.χ. [1,2] στον κατάλογο αναφορών που παρατίθεται στο τέλος αυτού του κειμένου,

καθώς και μεταξύ πολλών άλλων που υπάρχουν στα ράφια της Κεντρικής Βιβλιοθήκης του Πολυτεχνείου.

Τέλος, θα ήθελα να ευχαριστήσω τους συνεργάτες μου, κ.κ. Ευάγγελο Κασελούρη και Άγγελο Φιλιππάτο, για τη διόρθωση του κειμένου.

28 Οκτωβρίου 2010

Χρ. Προβατίδης

Page 3: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

3

Περιεχόμενα 1 ΕΙΣΑΓΩΓΗ ............................................................................................................. 4

1.1 Γενικά Στοιχεία ............................................................................................... 4

1.2 Ιστορικά Στοιχεία ............................................................................................ 4

2 ΒΑΣΙΚΕΣ ΓΝΩΣΕΙΣ .............................................................................................. 7

2.1 Βασικοί Κανόνες ............................................................................................. 7

2.2 Βοήθεια στο MATLAB ................................................................................... 8

2.3 Τύποι αριθμών ................................................................................................. 8

2.4 Αριθμητικοί τελεστές ...................................................................................... 9

2.5 Εκφράσεις και μεταβλητές στο MATLAB ................................................... 10

2.6 Εμφάνιση των αριθμών στο MATLAB ........................................................ 11

2.7 Εισαγωγή αριθμητικών τιμών ....................................................................... 11

3 ΠΙΝΑΚΕΣ ΚΑΙ ΔΙΑΝΥΣΜΑΤΑ ......................................................................... 12

3.1 Διάνυσμα γραμμή και διάνυσμα στήλη ........................................................ 12

3.2 Κατασκευή πινάκων από υποπίνακες ........................................................... 12

3.3 Πράξεις Πινάκων και Διανυσμάτων ............................................................. 17

4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΤΟ MATLAB ........................................................... 19

4.1 Εντολή if........................................................................................................ 19

4.2 Εντολή if-else ................................................................................................ 19

4.3 Εντολή επανάληψης for ................................................................................ 20

4.4 Εντολή επανάληψης while ............................................................................ 20

5 ΓΡΑΦΙΚΕΣ ΠΑΡΑΣΤΑΣΕΙΣ ............................................................................... 21

6 ΑΡΧΕΙΑ SCRIPT ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ............................................................. 24

7 ΧΕΙΡΙΣΜΟΣ ΑΡΧΕΙΩΝ ΚΕΙΜΕΝΟΥ ................................................................ 26

Αναφορές ..................................................................................................................... 28

Page 4: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

4

1 ΕΙΣΑΓΩΓΗ

1.1 Γενικά Στοιχεία

Το MATLAB (matrix laboratory) είναι ένα περιβάλλον αριθμητικών υπολογισμών (numerical computing environment) και τέταρτης γενιάς γλώσσας (fourth-generation programming language). Αναπτυγμένη από την εταιρεία MathWorks, το MATLAB επιτρέπει πράξεις πινάκων (matrix manipulations), γραφήματα συναρτήσεων και δεδομένων, υλοποίηση αλγορίθμων, δημιουργία διεπεφάνειας χρηστών (user interfaces), και διεπιφάνειας με προγράμματα γραμμένα σε άλλες γλώσσες, συμπεριλαμβανομένων της C, C++, και Fortran.

Παρόλο που το MATLAB αποσκοπεί πρωταρχικά στον αριθμητικό υπολογισμό, ένα προαιρετικό toolbox χρησιμοποιεί το MuPAD symbolic engine, που επιτρέπει την πρόσβαση σε δυνατότητες συμβολικού προγραμματισμού (symbolic computing). Ένα επιπρόσθετο πακέτο, το Simulink, προσθέτει graphical multi-domain προσομοίωση και Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

Το 2004, το MATLAB είχε περί τους ένα εκατομμύριο χρήστες στη βιομηχανία και τα εκπαιδευτικά ιδρύματα. Οι χρήστες του MATLAB έχουν ποικίλα υπόβαθρα, όπως μηχανικοί, θεωρητικοί επιστήμονες και οικονομολόγοι. Μεταξύ αυτών των χρηστών είναι τα ακαδημαϊκά και ερευνητικά ινστιτούτα όπως το Massachusetts Institute of Technology, NASA, Max Planck Society, και RWTH Aachen University καθώς και βιομηχανικές/εμπορικές επιχειρήσεις όπως ABB Group, Boeing, Caterpillar Inc., Ford Motor, Halliburton, Lockheed Martin, Motorola, Novartis, Pfizer, Philips, Toyota, και UnitCredit Bank.

1.2 Ιστορικά Στοιχεία

Το MATLAB δημιουργήθηκε στα τέλη του 1970 από τον Cleve Moler, τότε Πρόεδρο του Τμήματος Επιστήμης των Υπολογιστών (computer science) του Πανεπιστημίου του New Mexico (πηγή: http://en.wikipedia.org/wiki/MATLAB). Το σχεδίασε έτσι ώστε να δώσει στους μαθητές του πρόσβαση στο LINPACK (λογισμικό γραμμικής άλγεβρας: επίλυση γραμμικών συστημάτων, κλπ) και EISPACK (λογισμικό εύρεσης ιδιοτιμών, ιδιοανυσμάτων, κλπ) χωρίς να έχουν την ανάγκη εκμάθησης της γλώσσας Fortran στην οποίαν είναι γραμμένα τα εν λόγω (ιστορικά) πακέτα. Σύντομα διαδόθηκε σε άλλα πανεπιστήμια και βρήκε πολλούς θιασώτες στην κοινότητα των εφαρμοσμένων μαθηματικών. Ο μηχανικός Jack Little μυήθηκε σε αυτό κατά τη διάρκεια μιας επίσκεψης του Moler στο Πανεπιστήμιο του Stanford το 1983. Αναγνωρίζοντας τον εμπορικό δυναμισμό του λογισμικού, συνενώθηκε με τον Moler και τον Steve Bangert. Αυτοί ξανάγραψαν το MATLAB σε γλώσσα C και ίδρυσαν

Page 5: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

5

την εταιρεία MathWorks το 1984 με σκοπό να συνεχίσουν την ανάπτυξή του. Αυτές οι ξαναγραμμένες βιβλιοθήκες είναι γνωστές με το όνομα JACKPAC. Το 2000, το MATLAB ξαναγράφτηκε έτσι ώστε να χρησιμοποιεί ένα νεώτερο σύνολο βιβλιοθηκών του πακέτου χειρισμού πινάκων, LAPACK (το οποίο σήμερα έχει πλέον αντικαταστήσει το LINPACK, εννοούμε στις βιβλιοθήκες Fortran).

Το MATLAB υιοθετήθηκε αρχικά από τους μηχανικούς που ασχολούνταν με τον Αυτόματο Έλεγχο, που ήταν η ειδικότητα του Jack Little, αλλά σύντομα επεκτάθηκε και σε άλλους τομείς. Σήμερα χρησιμοποιείται για την εκπαίδευση, ειδικότερα της Γραμμικής Άλγεβρας και της Αριθμητικής Ανάλυσης, και είναι δημοφιλές μεταξύ των επιστημόνων που ασχολούνται με την επεξεργασία εικόνων (π.χ. ακόμη και για την φύλαξη κτιρίων έναντι νυκτερινών εισβολέων).

Ο συγγραφέας του παρόντος πονήματος ήταν αρχικά αντίθετος με τη χρήση του MATLAB στην εκπαίδευση των πεπερασμένων στοιχείων καθώς και άλλων υπολογιστικών μεθόδων (π.χ. συνοριακά στοιχεία), μέχρις ότου κατά την επίσκεψή του στον Μόναχο το 1999, ‘ανακάλυψε’ το βιβλίο των Kwon & Bang [3] το οποίο προμηθεύτηκε το 2000 μέσω της Κεντρικής Βιβλιοθήκης του ΕΜΠ (σημειώνεται ότι δέκα χρόνια μετά, το 2010, το βιβλίο αυτό εκδόθηκε μεταφρασμένο στην Ελληνική γλώσσα). Η Αγγλική έκδοση του βιβλίου αυτού αποτέλεσε σημείο εκκίνησης για ορισμένους μεταπτυχιακούς και προπτυχιακούς φοιτητές μου από το 2000, οι οποίοι επηρεάστηκαν βαθύτατα και στη συνέχεια ανέπτυξαν τους δικούς τους κώδικες. Την ίδια εποχή (1999), το Σουηδικό Πανεπιστήμιο της Lund δημοσίευσε τον πηγαίο κώδικα CALFEM (Computer-Aided-Learning Finite Element Method) σε γλώσσα MATLAB. Η έκδοση αυτή επιγράφεται ως Version 3.3, με την έννοια ότι στην αρχή της δεκαετίας του 1990 οι πρώτοι κώδικες του CALFEM ήταν γραμμένοι σε γλώσσα Fortran [4].

Ο λόγος της παραπάνω αντίθεσης μου (και της μέχρι σήμερα προτίμησης της γλώσσας Fortran) έγκειται στο γεγονός ότι, από ότι γνωρίζω, το MATLAB δεν είναι πραγματική γλώσσα αλλά διερμηνευτής (interpreter), με αποτέλεσμα τη δεκαετία του 1990 να είναι πολύ αργός και να μην επιδέχεται τον χειρισμό μεγάλων πινάκων (απαίτηση της μεθόδου των πεπερασμένων στοιχείων). Επίσης, η αντίθεση έγκειται στο γεγονός ότι ο σπουδαστής δεν ασκείται στην σε βάθος κατανόηση των αλγορίθμων, κάτι που είναι περισσότερο απαραίτητο στη συγγραφή κωδίκων σε Fortran ή C. Ωστόσο, η βαθμιαία μετεξέλιξη του MATLAB, ο διαρκής εμπλουτισμός του με ότι πιο σύγχρονο παρουσιάζεται στη διεθνή βιβλιογραφία, η σημερινή δυνατότητά του να εξάγει εκτελέσιμο κώδικα καθώς και τον χειρισμό διαφορετικών μεταξύ τους γλωσσών προγραμματισμού, σε συνδυασμό με την ευχέρειά του στην παραγωγή γραφικών και το εύκολο debugging, το έχουν πλέον καταστήσει ισχυρό εργαλείο κυρίως στη φάση της ανάπτυξης ενός λογισμικού.

Σήμερα πλέον, στη διεθνή αγορά κυκλοφορούν τουλάχιστον δύο εμπορικά πακέτα πεπερασμένων στοιχείων σε γλώσσα MATLAB. Το πιο διαδεδομένο είναι ίσως το COMSOL (http://www.comsol.com) που είναι προορισμένο για αναλύσεις σε

Page 6: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

6

ολόκληρο το φάσμα της υπολογιστικής μηχανικής και φυσικής (Multiphysics: finite element analysis software environment for the modeling and simulation of any physics-based system, πρώην FEMLAB) αλλά επίσης υπάρχει και το Structural Dynamics Toolbox (http://www.sdtools.com/sdt) που περιορίζεται στην ελαστοστατική και ελαστοδυναμική ανάλυση κατασκευών.

Ο συγγραφέας διατηρεί επιφυλάξεις, τόσον ως προς τον μέγιστο αριθμό πεπερασμένων στοιχείων που μπορεί να χειριστεί ένα τέτοιο πακέτο όσον και ως προς τις δυνατότητες που μπορεί να έχει σε επίπεδο pre- & post-processing (εισαγωγή δεδομένων, παρουσίαση αποτελεσμάτων). Εάν τώρα επιστρέψουμε στο ζήτημα της πανεπιστημιακής έρευνας, κατά τη φάση της ανάπτυξης μιας νέας ιδέας/μεθοδολογίας ή ενός νέου πεπερασμένου στοιχείου οι προαναφερθείσες επιφυλάξεις είναι μάλλον δευτερεύουσες.

Τέλος, αναφορικά με τη Σύνθεση Κατασκευών, οι νέες εκδόσεις του MATLAB περιέχουν μεγάλη ποικιλία Αλγόριθμων Βελτιστοποίησης που αποτελεί τμήμα του μαθήματος της «Ανάλυσης Μηχανολογικών Κατασκευών ΙΙ», και ως εκ τούτου το σημερινό MATLAB αποτελεί ένα ισχυρό εργαλείο για έρευνα και ανάπτυξη.

Page 7: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

7

2 ΒΑΣΙΚΕΣ ΓΝΩΣΕΙΣ Το MATLAB είναι ένα αλληλεπιδρών (interactive) σύστημα.

Μπορείτε να πληκτρολογήσετε εντολές με τον υποβολέα (prompt), >>, στο παράθυρο εντολών (Command Window) και οι υπολογισμοί εκτελούνται

αμέσως μετά το πάτημα του πλήκτρου enter ( ) ή return.

Στο απλούστερο επίπεδο, το MATLAB μπορεί να χρησιμοποιηθεί σαν ένας υπολογιστής τσέπης.

Πάντως, σε κάθε περίπτωση, ο καλύτερος τρόπος για την εκμάθηση του MATLAB είναι η κατ’ ιδίαν εξάσκηση. Η πιο μεγάλη βοήθεια που μπορεί να σας δώσει κάποιος είναι η συμβουλή να ανατρέχετε συνέχεια στο HELP της MATLAB για όποια απορία δημιουργείται με τις εντολές που πρέπει να χρησιμοποιήσετε. Επίσης πρέπει να σημειωθεί ότι ο καλύτερος κώδικας είναι πάντα ο απλός κώδικας μαζί με τη χρήση comments (σχολίων) για την καλύτερη δική σας εποπτεία και οργάνωση της σκέψης σας.

2.1 Βασικοί Κανόνες

Πριν αρχίσει μια συνοπτική παρουσίαση της γλώσσας προγραμματισμού, φρόνιμο είναι να ληφθούν υπόψη μερικές χρήσιμες γενικές παρατηρήσεις:

Χαρακτήρες με κεφαλαία και πεζά γράμματα δεν είναι ισοδύναμοι.

Πληκτρολογώντας το όνομα μιας μεταβλητής στο παράθυρο εντολών (Command Window) αναγκάζει το MATLAB να εμφανίσει την τρέχουσα τιμή του.

Το ελληνικό ερωτηματικό (;) στο τέλος κάθε εντολής εμποδίζει την εμφάνιση στην οθόνη του αποτελέσματος. Χρησιμοποιείται στην περίπτωση που δεν επιθυμούμε να δούμε το αποτέλεσμα ενός ενδιάμεσου υπολογισμού. Σε μεγάλα προγράμματα συνίσταται καθώς μειώνει το υπολογιστικό κόστος.

Το MATLAB χρησιμοποιεί παρενθέσεις, (), αγκύλες, [], και άγκιστρα, . Αυτά δεν είναι εναλλάξιμα. Κάθε σύμβολο έχει τη δική του σημασία για τη MATLAB(βλ. HELP).

Page 8: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

8

Τα πλήκτρα του άνω και κάτω βέλους όταν χρησιμοποιούνται στο παράθυρο εντολών (Command Window) έχουν ως αποτέλεσμα το συνεχές ξετύλιγμα της οθόνης του Η/Υ (scroll) σε σχέση με τις προηγούμενες εντολές. Επίσης, μια παλαιά εντολή μπορεί να ανακτηθεί δακτυλογραφώντας του λίγους αρχικούς χαρακτήρες ακολουθούμενους από το άνω βέλος.

Μπορείτε να πληκτρολογήσετε help topic για να ανακτήσετε άμεση (online)

βοήθεια σχετικά με την εντολή, συνάρτηση, ή το σύμβολο topic. Σημειώστε

ότι οι υπερσυνδέσεις (hyperlinks), που εμφανίζονται με υπογράμμιση, αποσκοπούν στο να σας οδηγήσουν σε άμεσα συσχετιζόμενα αντικείμενα βοήθειας και στον Help browser.

Εάν πατήσετε το πλήκτρο tab μετά από μερική (ημιτελή) πληκτρολόγηση ονόματος μιας συνάρτησης ή μεταβλητής, το MATLAB θα αποπειραθεί να το συμπληρώσει, προσφέροντας σε σας μια ή περισσότερες (εάν υπάρχουν) επιλογές.

Γενικά, χρησιμοποιείται κυρίως το “workspace” για την επισκόπηση των μεταβλητών.

2.2 Βοήθεια στο MATLAB

Έχοντας ανοίξει την εφαρμογή MATLAB, εμφανίζεται το παράθυρο εντολών (Command Window) και το σύμβολο προτροπής, >>.

Η εντολή “help” προσφέρει στον χρήστη λεπτομερείς πληροφορίες για την

κατανόηση εντολών σε υπάρχοντα πηγαίο κώδικα, ενώ το εργαλείο “search” του MATLAB βοηθά στην εύρεση της κατάλληλης εντολής που επιτελεί ένα συγκεκριμένο σκοπό. Μια πληθώρα πληροφοριών τόσο για αρχάριους όσο και προχωρημένους είναι διαθέσιμη στην επίσημη ιστοσελίδα του MATLAB:

http://www.mathworks.com

2.3 Τύποι αριθμών Το MATLAB αναγνωρίζει τους επόμενους τύπους αριθμών:

Ακέραιος (Integer) π.χ. 1312, -2931, 0

Πραγματικός (Real) π.χ. 1.44, -11.9

Μιγαδικός (Complex) π.χ.1.2+3.1i, 2-5.7i,j (όπου i και j έχουν την τιμή √ 1 )

Άπειρο (Inf) π.χ. Διαίρεση με το 0 “INF Infinity”

Αόριστο (NaN) π.χ. 0/0 “NaN Not-a-Number” Το MATLAB εμφανίζει αριθμούς κινητής υποδιαστολής με 5 δεκαδικά ψηφία, εξ’ ορισμού, αλλά πάντα αποθηκεύει και υπολογίζει αριθμούς σε ισοδύναμους των 16 δεκαδικών ψηφίων.

Page 9: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

9

2.4 Αριθμητικοί τελεστές Οι βασικοί αριθμητικοί τελεστές είναι: +, -, *, /, \, ^ και χρησιμοποιούνται από κοινού με τις παρενθέσεις ( ). Οι τελεστές / και \ έχουν διαφορετική σημασία όταν εμφανίζονται στις πράξεις μεταξύ αριθμών. Ο πρώτος τελεστής εκτελεί τη διαίρεση ενός αριθμού a με τον αριθμό b, ενώ ο δεύτερος εκτελεί την αντιστροφή της προηγούμενης διαίρεσης. Οι αριθμητικοί τελεστές του MATLAB υπακούουν στους ίδιους κανόνες προτεραιότητας που γνωρίζουμε από τις συνήθεις γλώσσες προγραμματισμού. Οι κανόνες αυτοί δείχνονται στον Πίνακα 2 που ακολουθεί.

Προτεραιότητα Τελεστής 1 (υψηλότερος) Ύψωση σε δύναμη (^) 2 Unary plus (+), Unary minus (-) 3 Πολλαπλασιασμός (*), Διαίρεση (/) 4 (χαμηλότερος) Πρόσθεση (+), Αφαίρεση (-)

Πίνακας 1: Σειρά εκτέλεσης αριθμητικών πράξεων Οι πράξεις εκτελούνται από αριστερά προς τα δεξιά, με την ύψωση σε δύναμη να έχει την μεγαλύτερη προτεραιότητα, ακολουθούμενη από πολλαπλασιασμό και διαίρεση (που έχουν ίση μεταξύ τους προτεραιότητα), ακολουθούμενη από πρόσθεση και αφαίρεση (που έχουν ίση μεταξύ τους προτεραιότητα). To MATLAB περιέχει ένα μεγάλο σύνολο από μαθηματικές λειτουργίες. Πληκτρολογώντας help elfun και help specfun καλεί πλήρεις κατάλογους

στοιχειωδών και ειδικών λειτουργιών.

ΠΑΡΑΔΕΙΓΜΑΤΑ

1) >> 5+(3*2)^2/4 (όπου είναι το enter)

ans = 14

2) >> 2/3

ans = 0.6667

3) >> 2\3

ans = 1.5000

4) >> i*i

ans = -1

5) >> 2+4*i/4+5*i

ans = 2.0000+6.0000i

6) >> (2+3*i)/(3+4*i)

ans = 0.7200+0.0400i

Page 10: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

10

2.5 Εκφράσεις και μεταβλητές στο MATLAB Το MATLAB χρησιμοποιεί μεταβλητές και συναρτήσεις, όπως και κάθε άλλη γλώσσα προγραμματισμού. Το όνομα μιας μεταβλητής ή συνάρτησης μπορεί να είναι οποιοσδήποτε συνδυασμός γραμμάτων και αριθμών, με την προϋπόθεση ότι ο πρώτος χαρακτήρας είναι γράμμα. Είναι εύχρηστο για το χρήστη να χρησιμοποιεί κατάλληλα ονόματα για μεταβλητές ή συναρτήσεις που είναι εύκολο να τα θυμάται, χρησιμοποιώντας πεζά γράμματα. Το MATLAB αποτελεί μια γλώσσα εκφράσεων. Οι εκφράσεις πληκτρολογούνται μεταφράζονται και εκτελούνται. Οι εντολές του έχουν το παρακάτω γενικό συντακτικό:

>> μεταβλητή = σχέση ή >> σχέση

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

τελειώνει κανονικά με το πλήκτρο Enter ().

Για παράδειγμα παρατίθεται παρακάτω η εκχώρηση τιμών σε μεταβλητές.

ΠΑΡΑΔΕΙΓΜΑΤΑ

1) >> x = 4-2^4

x = -12

2) >> y = x*5

y = -60

3) >> z = y+imag(2-3*i)

(όπου imag(x) συνάρτηση που δίνει το φανταστικό μέρος μιγαδικού) z = -63

Είναι δυνατή η διαγραφή από τη μνήμη μίας ή περισσότερων μεταβλητών, ως εξής:

Εάν είναι επιθυμητό η διαγραφή μιας μεταβλητής, χρησιμοποιούμε την εντολή clear και το όνομα τη μεταβλητής.

Work>> CLEAR ALL, clear all: Για τη διαγραφή όλων των μεταβλητών,

συναρτήσεων και συνδέσμων.

Για να ¨καθαρίσει¨ το παράθυρο εντολών (Command Window) χρησιμοποιείται το Work>> clc

Work>> close all: κλείνει όλα τα διαγράμματα που έχουν δημιουργηθεί και επιτρέπει την πιο γρήγορη και σωστή δημιουργία των νέων διαγραμμάτων

Page 11: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

11

από τον κώδικα. Συνίσταται η εισαγωγή αυτής της εντολής μαζί με τις δύο (2) προηγούμενες στην αρχή κάθε κώδικα.

2.6 Εμφάνιση των αριθμών στο MATLAB

Ο τρόπος εμφάνισης ή εκτύπωσης των αριθμών καθορίζεται με διαφορές εντολές ‘’format’’. Mε την εντολή: >>help format εμφανίζεται στην οθόνη μια πλήρης λίστα των εντολών format. H μορφή των αποτελεσμάτων μπορεί να καθοριστεί χρησιμοποιώντας τις εντολές: >>format long ή >>format sort. Για πολύ μεγάλους ή πολύ μικρούς αριθμούς χρησιμοποιείται η επιστημονική γραφή, χρησιμοποιώντας το χαρακτήρα e, σε συνδυασμό με τις εντολές >>format long e ή >>format sort e.

ΠΑΡΑΔΕΙΓΜΑΤΑ >> c = 1+10/3+6^2

c = 40.3333 >> format long >>c

c = 40.33333333333334

>> format long e >>c

c = 4.033333333333334e+001

>> format sort e >>c

c = 4.0333e+001

>> format sort >>c

c = 40.3333.

2.7 Εισαγωγή αριθμητικών τιμών

Παραδείγματος χάριν, εάν ο χρήστης θέλει να αποδώσει μια αριθμητική τιμή στη μεταβλητή var1, μπορεί να γράψει: Work>> var1 = input(‘Enter value for VAR1> ‘) Είναι αξιοσημείωτο ότι κατά την παραπάνω πληκτρολόγηση το MATLAB επιτρέπει ακόμη και την εκτέλεση πράξεων, όπως λ.χ. sqrt(3)+1, χωρίς να χρειάζεται ο

αριθμητικός υπολογισμός (που σε αυτή την περίπτωση ισούται περίπου με 2.732).

Page 12: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

12

3 ΠΙΝΑΚΕΣ ΚΑΙ ΔΙΑΝΥΣΜΑΤΑ Ένας m n πίνακας είναι μία διάταξη αριθμών σε δύο διαστάσεις η οποία αποτελείται από m γραμμές και n στήλες. Ειδικές περιπτώσεις είναι το διάνυσμα στήλη ( 1)n και το διάνυσμα γραμμή ( 1)m . Οι πίνακες αποτελούν θεμελιώδες

συστατικό του MATLAB, ακόμη και αν δεν προτίθεται κάποιος να το χρησιμοποιήσει για την γραμμική άλγεβρα.

3.1 Διάνυσμα γραμμή και διάνυσμα στήλη

Ένα διάνυσμα-γραμμή ορίζεται από μια λίστα αριθμών (στοιχείων) τα οποία χωρίζονται μεταξύ τους με κενά ή κόμματα και τα οποία κλείνονται μέσα σε αγκύλες. Παράσταση διανύσματος-γραμμής:

>>x = [x1 x2 … xn] ή >>x = [x1,x2, … ,xn]

Ένα διάνυσμα-στήλη ορίζεται από μια λίστα αριθμών (στοιχείων) τα οποία χωρίζονται μεταξύ τους με το ελληνικό ερωτηματικό (;) αλλιώς, κάθε συντεταγμένη του διανύσματος-στήλη πληκτρολογείται σε νέα γραμμή και τα οποία κλείνονται μέσα σε αγκύλες. Παράσταση διανύσματος-στήλης:

>>x = [x1;x2; … ;xn]

3.2 Κατασκευή πινάκων από υποπίνακες Μπορείτε να κατασκευάζετε μεγάλους πίνακες από μικρότερους ακολουθώντας τις συμβάσεις ότι: (α) αγκύλες, [], περικλείουν ένα πίνακα, (β) κενά ή κόμμα διαχωρίζουν καταχωρήσεις σε μια γραμμή, και (γ) άνω τελείες, (;), διαχωρίζουν γραμμές

ΠΑΡΑΔΕΙΓΜΑ 1 Εάν >>Α = [4 8 12 5 10 15 6 12 18] και >>Β = [-3 0 -1 2 5 -7

Page 13: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

13

-1 4 8] και >>a = [1 2 3] τότε οι παραστάσεις: >>C = [A,[8;9;10]], D = [B;a] αντιστοιχούν στους πίνακες: C = [4 8 12 8 , D = [-3 0 -1 5 10 15 9 2 5 -7 6 12 18 10] -1 4 8 1 2 3 ] Το στοιχείο στη γραμμή ‘i’ και στη στήλη ‘j’ του πίνακα C (i, j), πάντοτε ξεκινούν από την τιμή (1), μπορούν να προσπελαστούν ως C(i,j). Γενικότερα, C(i1:i2, j1:j2) διαλέγει τον υποπίνακα που διαμορφώνεται από την διασταύρωση των γραμμών από i1 μέχρι i2 και των στηλών από j1 μέχρι j2.

ΠΑΡΑΔΕΙΓΜΑ 2

Εάν θεωρήσουμε τον παρακάτω πίνακα:

>>Α = [1 2 3;4 5 6;7 8 9] στο μητρώο:

7 8 9

4 5 6

1 2 3

A

Εάν θέλουμε να γράψουμε τις γραμμές του Α σε αντίστροφη διάταξη, τότε αυτό υλοποιείται εύκολα με την εντολή:

>> B = A(3:-1:1,1:3) στο μητρώο:

1 2 3

4 5 6

7 8 9

B

(από τη γραμμή Νο.3, με βήμα ‘-1’, μέχρι τη γραμμή Νο.1) Το ανωτέρω γράφεται ισοδύναμα και ως: >> B = A(3:-1:1,:) Εδώ, η τελική άνω-κάτω τελεία (single colon) σημαίνει ότι θα επιλέγουν όλες οι στήλες. Σημείωση: Το σύμβολο (:) είναι σύντμηση του 1:end

Page 14: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

14

ΠΑΡΑΔΕΙΓΜΑ 3

Με βάση τους πιο πάνω πίνακες Α και Β, να υπολογισθεί η παράσταση:

>>C = [A,B(:,[1,3])] στο μητρώο:

1 2 3 7 9

4 5 6 4 6

7 8 9 1 3

C . Προφανώς, από το

μητρώο Β έχει παραληφθεί η δεύτερη στήλη. ΕΙΔΙΚΟΙ ΠΙΝΑΚΕΣ

>> Ι3 = eye(3,3)

1 0 0

0 1 0

0 0 1

: (μοναδιαίος πίνακας διαστάσεων 3×3)

>> Y = zeros(3,5)

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

: (μηδενικός πίνακας διαστάσεων 3×5)

>> Z = ones(2) 1 1

1 1

: (Πίνακας «μονάδα» διάστασεων 2×2)

>> g = [1 2 3 4

5 6 7 8 9 10 11 12] >> size(g) [3 4] (αριθμός γραμμών, αριθμός στηλών του πίνακα g)

>> ones(size(g))

1 1 1 1

1 1 1 1

1 1 1 1

Γενικά, εάν το πλήθος των γραμμών ισούται με το πλήθος των στηλών, τότε η κοινή τους τιμή μπορεί να δοθεί μια φορά.

Έστω ότι εισάγω στη γραμμή εντολών ένα διάνυσμα x της μορφής: >> x = [x1 x2 xn]

Τότε, μπορώ αμέσως να υπολογίσω το ημίτονο καθενός από τις ποσότητες xi, με τη

χρήση μιας και μόνον εντολής:

Page 15: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

15

>> y = sinx

Η οποία μου δίνει το διάνυσμα sin 1 sin 2 siny x x xn .

Η ‘δύναμη’ του MATLAB είναι ότι μπορεί να αποφεύγει τη δημιουργία βρόχων (loops) με την κατάλληλη χρήση δεικτών. Εάν λοιπόν θέλουμε να απομονώσουμε από το διάνυσμα x το τμήμα από την έβδομη μέχρι την τελευταία στήλη, αυτό μπορεί να γραφτεί ως εξής: >> x(7:end) όπου η μεταβλητή end δείχνει το τελευταίο στοιχείο του διανύσματος, χωρίς να

γνωρίζουμε ή να θυμόμαστε την αληθή τιμή του. Γενικότερα, μπορούμε να εισάγουμε τις παρακάτω συντμήσεις

x = first : last Δημιουργεί διάνυσμα-γραμμή από το x που ξεκινά από το first, αυξάνει κατά ένα, και τελειώνει στο ή πριν το last

x = first : increment : last Το ίδιο με παραπάνω αλλά με βήμα increment x = linspace(first,last,n) Δημιουργεί διάνυσμα-γραμμή από το x που ξεκινά από το first,

τελειώνει στο last, και έχει n-το πλήθος στοιχεία

x = logspace(first,last,n) Δημιουργεί διάνυσμα-γραμμή από το x με λογαριθμική

διαβάθμιση που ξεκινά από το 10first, τελειώνει στο 10last, και έχει n-το πλήθος στοιχεία

Έχει ήδη αναφερθεί ότι ένα διάνυσμα-γραμμή παρίσταται με έναν από τους ακόλουθους τρόπους: >> c = [1,2,3,4,5] >> c = [1 2 3 4 5]

Με άλλα λόγια, σε αυτή την περίπτωση το ‘κενό’ και το ‘κόμμα’ είναι ισοδύναμα. Επίσης, ένα διάνυσμα-στήλη παριστάνεται ως: >> C = [1;2;3;4;5]

Με άλλα λόγια: Ο διαχωρισμός στοιχείων με κενά ή κόμμα καθορίζουν στοιχεία σε διαφορετικές στήλες, ενώ ο διαχωρισμός στοιχείων με το σύμβολο του ελληνικού ερωτηματικού (;) καθορίζουν στοιχεία σε διαφορετικές γραμμές.

ΑΝΑΣΤΡΟΦΟΣ ΠΙΝΑΚΑΣ

Ιδιαίτερη αξία έχει ο αντίστροφος πίνακας, που παριστάνεται με την εισαγωγή ‘τόνου’.

Page 16: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

16

ΠΑΡΑΔΕΙΓΜΑ Εάν >> a = [1 2 3 4 5] Τότε η εντολή >> b = a'

δίνει τον απλό ανάστροφο: 1 2 3 4 5T

, δηλαδή το διάνυσμα

1

2

3

4

5

, το οποίο σε

μορφή MATLAB γράφεται και ως [1;2;3;4;5]. ΑΝΑΣΤΡΟΦΟΙ ΔΙΑΝΥΣΜΑΤΩΝ ΜΕ ΜΙΓΑΔΙΚΟΥΣ ΑΡΙΘΜΟΥΣ Για λόγους πληρότητας, και επειδή μπορεί να αφορά εφαρμογές στην Ακουστική Ανάλυση Κατασκευών όπου υπεισέρχονται μιγαδικά μεγέθη, δίνονται σχετικά παραδείγματα. Εάν >>d = [1+1i, 2+2i, 3+3i, 4+4i, 5+5i] τότε το συζυγές ανάστροφο μιγαδικό διάνυσμα (complex conjugate transpose of d)

προκύπτει:

>>e = d'

1 1

2 2

3 3

4 4

5 5

i

i

i

i

i

Αντίθετα, το ανάστροφο (transpose of d), ονομάζεται στο MATLAB «dot-transpose

operator» και παριστάνεται ως:

>> f = d.'

1 1

2 2

3 3

4 4

5 5

i

i

i

i

i

Page 17: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

17

3.3 Πράξεις Πινάκων και Διανυσμάτων

Έστω ότι:

1 2 3 4 1 1 1 1

5 6 7 8 , 2 2 2 2

9 10 11 12 3 3 3 3

g h

Πράξεις όπως g+h, 2*g-h κλπ, είναι τετριμμένες, και εκτελούνται σε γραμμή εντολής όπως ακριβώς γράφονται. Κάτι αντίστοιχο έχει και η Fortran PowerStation. Εκτός όμως από τις απλές αυτές πράξεις, το MATLAB δίνει και άλλες δυνατότητες όπως οι πράξεις πολλαπλασιασμού και διαίρεσης στοιχείο-προς-στοιχείο (element-by-element). Για να διαχωρίσει το MATLAB τις πράξεις αυτές ως προς τις συνήθεις πράξεις του πολλαπλασιασμού πινάκων, εισάγει το σύμβολο (.) πριν από το σύμβολο της αντίστοιχης πράξης. Έτσι, διακρίνονται οι ακόλουθες περιπτώσεις: Πολλαπλασιασμό πινάκων στοιχείο-προς-στοιχείο:

>> g.*h

1*1 2*1 3*1 4*1 1 2 3 4

5*2 6*2 7*2 8*2 10 12 14 16

9*3 10*3 11*3 12*3 27 30 33 36

Διαίρεση πινάκων στοιχείο-προς-στοιχείο (dot division):

>> g./h

1:1 2 :1 3:1 4 :1 1 2 3 4

5 : 2 6 : 2 7 : 2 8 : 2 2.5 3 3.5 4

9 : 3 10 : 3 11: 3 12 : 3 3 3.3333 3.6667 4

(εδώ κάτω από το slash είναι ο πίνακας h, που είναι διαιρέτης, ενώ πάνω από το slash

είναι ο g, που είναι διαιρετέος).

>> h.\g

1:1 2 :1 3:1 4 :1 1 2 3 4

5 : 2 6 : 2 7 : 2 8 : 2 2.5 3 3.5 4

9 : 3 10 : 3 11: 3 12 : 3 3 3.3333 3.6667 4

(εδώ κάτω από το slash είναι και πάλι ο πίνακας h, που είναι διαιρέτης, ενώ πάνω από

το slash είναι ο g, που είναι διαιρετέος).

Κανόνας: Το σύμβολο κάτω από το slash διαιρεί τον πίνακα που είναι

πάνω από το slash, π.χ. g./h = h.\g.

Page 18: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

18

Ενδεικτικά δεδομένα: a=[a1,a2,…,an], b=[b1,b2,…,bn], c = βαθμωτή ποσότητα

Βαθμωτή άθροιση a+c = [a1+c,a2+c,…,an+c]

Βαθμωτός πολλαπλασιασμός a*c = [a1*c,a2*c,…,an*c]

Πρόσθεση διανυσμάτων a+b = [a1+b1,a2+b2,…,an+bn] Πολλαπλασιασμός διανυσμάτων a.*b = [a1*b1,a2*b2,…,an*bn] Διαίρεση διανυσμάτων εκ δεξιών a./b = [a1/b1,a2/b2,…,an/bn]

Διαίρεση διανυσμάτων εξ αριστερών a.\b = [a1\b1,a2\b2,…,an\bn]

Ύψωση διανυσμάτων σε δύναμη

a.^c = [a1^c,a2^c,…,an^c] c.^a = [c^a1, c^a2,…, c^an]

a.^b = [a1^b1,a2^b2,…,an^bn]

Πίνακας 2: Πράξεις επί διανυσμάτων στοιχείο-προς-στοιχείο

Σημείωση: 56/8 = 8\56 (και στις δυο περιπτώσεις, η πράξη δίνει σαν αποτέλεσμα τον αριθμό 7).

Διαίρεση πινάκων καθώς και Δυνάμεις πινάκων είναι σημαντικές διαδικασίες τις οποίες επί του παρόντος παραλείπουμε. Καλείται ο αναγνώστης να ανατρέξει τόσο στις βιβλιογραφικές αναφορές, όσο και στο HELP του MATLAB για να ενημερωθεί για αυτές τις πράξεις πινάκων. ΕΣΩΤΕΡΙΚΟ ΓΙΝΟΜΕΝΟ Το εσωτερικό γινόμενο στο MATLAB ορίζεται για δύο διανύσματα γραμμή και στήλη αντίστοιχα με το ίδιο πλήθος στοιχείων. Η πράξη προκύπτει αν εφαρμόσουμε τον τελεστή *, και το αποτέλεσμα θα είναι ένας αριθμός.

ΠΑΡΑΔΕΙΓΜΑ >>a=[1 2 3]; >>c=[4 5 6]; >> a*c [1 2 3].[4 5 6]’ = (1*4+2*5+3*6 =) 32

>>dot(a,c) 32

ΕΥΡΕΣΗ ΙΔΙΟΤΙΜΩΝ ΚΑΙ ΙΔΙΟΝΥΣΜΑΤΩΝ

Οι ιδιοτιμές και τα ιδιοδιανύσματα ενός πίνακα, έστω A (δηλ. οι αριθμοί λ και τα διανύσματα x τα οποία ικανοποιούν Ax = λx ) υπολογίζονται με την εντολή eig.

Η παρακάτω εντολή:

[V,D] = eig(A)

δίνει ένα διαγώνιο πίνακα D με τις ιδιοτιμές του Α στη κύρια διαγώνιο, και ένα πίνακα V του οποίου οι στήλες είναι τα ιδιοδιανύσματα που αντιστοιχούν στην κάθε ιδιοτιμή.

Page 19: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

19

4 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΤΟ MATLAB

4.1 Εντολή if Οι εντολές αυτής της κατηγορίας επιτρέπουν στο πρόγραμμα να εκτελέσει διαφορετικές εντολές ανάλογα αν η συνθήκη που έχει τεθεί είναι αληθής ή ψευδής. If συνθήκη

εντολές end

ΠΑΡΑΔΕΙΓΜΑ a=5; b=8; if a<b disp('a<b'); else disp('a>b'); end Το αποτέλεσμα στο παράθυρο εντολών θα είναι το παρακάτω: >> a<b

4.2 Εντολή if­else Με τη χρήση της λέξης else δίνεται η δυνατότητα εισαγωγής από τον χρήστη περισσότερες από μία συνθήκες που δύναται να εκπληρωθούν. if συνθήκη

εντολές elseif συνθήκη

εντολές else

εντολές end

ΠΑΡΑΔΕΙΓΜΑ a=5; b=8; if a<b disp('a<b'); elseif a>b disp('a>b'); else disp('a=b'); end

Page 20: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

20

Το αποτέλεσμα στο παράθυρο εντολών θα είναι το παρακάτω: >> a<b

4.3 Εντολή επανάληψης for Δίνεται η δυνατότητα της χρήσης βρόχου επανάληψης σε αναλογία με τις υπόλοιπες γλώσσες προγραμματισμού. for μεταβλητή = μετρητής

εντολές end

ΠΑΡΑΔΕΙΓΜΑ temp=1; for i=1:2:10 A(temp)=i; temp=temp+1; end disp(A) Η μεταβλητή temp είναι ένας μετρητής που αυξάνεται κατά μία μονάδα σε κάθε επανάληψη. Η επανάληψη διαβάζει τους αριθμούς από το 1 μέχρι το 10 με βήμα 2. Το αποτέλεσμα είναι ένας πίνακας όπως φαίνεται παρακάτω: >>A =[ 1 3 5 7 9 ]

4.4 Εντολή επανάληψης while Σε περιπτώσεις που χρειάζεται να επαναλαμβάνεται μία ομάδα εντολών όσο είναι αληθής μία συνθήκη τότε χρησιμοποιείται ο παρακάτω βρόγχος επανάληψης. while συνθήκη

εντολές end

ΠΑΡΑΔΕΙΓΜΑ a=5; b=8; while a<b a=a+1; disp(a) end Οι γραμμές του παραπάνω κώδικα μέσα στο βρόγχο επανάληψης θα εκτελεστούν 3 φορές μέχρις ότου δηλαδή εκπληρωθεί η δοθείσα συνθήκη. Ταυτόχρονα θα εμφανιστούν οι τιμές της μεταβλητής α στο παράθυρο εντολών.

Page 21: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

21

5 ΓΡΑΦΙΚΕΣ ΠΑΡΑΣΤΑΣΕΙΣ Πολύ συχνά είναι αναγκαία η κατασκευή γραφημάτων τα οποία θα απεικονίζουν τα ζητούμενα αποτελέσματα και θα εξυπηρετούν στην οπτική τους σύγκριση με παρεμφερή αποτελέσματα (π.χ. πειραματικές μετρήσεις). Γράφοντας help plot εμφανίζονται οι δυνατότητες της εντολής plot, η οποία είναι η βασική εντολή για την κατασκευή δυσδιάστατων γραφημάτων. Βασικά, αν x και y είναι δύο διανύσματα ίδιου μήκους, τότε η εντολή plot(x,y) δίνει τη γραφική παράσταση του y ως προς x.

ΠΑΡΑΔΕΙΓΜΑ

Για παράδειγμα, για να κατασκευάσουμε τη γραφική παράσταση της συνάρτησης y =

cos(x) στο διάστημα [– π, π], ορίζουμε το διάνυσμα x με τιμές ισαπέχοντα σημεία

από – π μέχρι π,με βήμα 0.01.

>> x=-pi:0.01:pi; Το ερωτηματικό ( ; ) στο τέλος της εντολής εξυπηρετεί στο να μην τυπωθούν οι αριθμοί στην οθόνη. Αξίζει να σημειωθεί ότι όσο πιο μικρό είναι το βήμα τόσο πιο “ομαλή” θα είναι η καμπύλη του γραφήματος. Ισοδύναμα, είναι δυνατό να ορίσουμε το x μέσω της εντολής linspace η οποία αντί για βήμα παίρνει τον αριθμό των σημείων για δεδομένο εισόδου, μετά το διάστημα:

>> x=linspace(-pi,pi,101); (Εδώ ορίσαμε το x σαν ένα διάνυσμα με 101 ισαπέχοντα σημεία στο διάστημα [– π,

π].)Μετά, ορίζουμε το y ως

>> y=cos(x); και εισάγεται η εντολή για την κατασκευή του γραφήματος:

>> plot(x,y) Σε αυτό το σημείο ανοίγει ένα καινούργιο παράθυρο το οποίο περιέχει το παρακάτω γράφημα:

Page 22: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

22

Είναι δυνατόν να εισαχθούν ετικέτες στους άξονες με τις εντολές xlabel και ylabel, όπως επίσης και τίτλος με την εντολή title. >> xlabel('x') >> ylabel('y=cos(x)') >> title('Graph of cosine from - pi to pi') Το κείμενο που θέλουμε να εμφανιστεί στο γράφημα γράφεται μέσα σε τόνους (' '). Το νέο διάγραμμα παρουσιάζεται παρακάτω:

-4 -3 -2 -1 0 1 2 3 4-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

-4 -3 -2 -1 0 1 2 3 4-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

x

y=co

s(x)

Graph of cosine from - pi to pi

Page 23: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

23

Υπάρχουν διάφορα είδη γραμμών και χρωμάτων που μπορούμε να χρησιμοποιήσουμε για γραφήματα, όπως φαίνεται πιο κάτω.

y yellow . point

m magenta o circle

c mark x x-mark

r red + plus

g green - solid

b blue * star

w white : dotted

k black -. dashdot

-- dashed

Άρα, για να εμφανιστεί το ίδιο γράφημα όπως παραπάνω, αλλά με χρώμα πράσινο, θα εισαχθεί η παρακάτω εντολή: >> plot(x,y,’g’)

-4 -3 -2 -1 0 1 2 3 4-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

x

y=co

s(x)

Graph of cosine from - pi to pi

Page 24: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

24

6 ΑΡΧΕΙΑ SCRIPT ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ Υπάρχουν δύο είδη m-files: τα αρχεία script (script files) και τα αρχεία συναρτήσεων (function files). Τα αρχεία script περιέχουν απλώς μια σειρά από εντολές που επεξεργάζονται από τη MATLAB όταν καλέσουμε το αρχείο με το όνομά του. Με άλλα λόγια, δεν υπάρχουν δεδομένα εισόδου ή εξόδου σε αυτά τα αρχεία, και η χρήση τους περιορίζεται στις περιπτώσεις που θα θέλαμε να εκτελέσουμε πολλές εντολές (τη μια μετά την άλλη) χωρίς να τις γράφουμε μία-μία. Η άλλη χρησιμότητα αυτών των αρχείων είναι όταν θέλουμε να εισαγάγουμε πολλές πληροφορίες στη MATLAB (π.χ. σαν στοιχεία ενός πίνακα).

Τα αρχεία συναρτήσεων, τα οποία πολλές φορές καλούνται απλώς m-files, έχουν δεδομένα εισόδου (και εξόδου) και λειτουργούν σαν μια καινούργια εντολή της MATLAB ή ακόμα και σαν ένα υπολογιστικό πρόγραμμα.

Για να εγγραφεί ένα m-file θα χρησιμοποιηθεί ο συντάκτης (editor) που περιέχει το MATLAB με την εντολή edit η οποία ανοίγει ένα καινούργιο παράθυρο όπου θα δημιουργηθεί το m-file. Η πρώτη γραμμή πρέπει πάντα να περιέχει τα εξής: Τη λέξη κλειδί function, τα (πιθανά) δεδομένα εξόδου (σε τετράγωνες παρενθέσεις), το όνομα του m-file, και τα (πιθανά) δεδομένα εισόδου (σε στρογγυλές παρενθέσεις), όπως φαίνεται πιο κάτω:

function [a] = log3(x) Η μεταβλητή a είναι το δεδομένο εξόδου, το log3 είναι το όνομα του m-file (δηλ. το αρχείο καλείται log3.m) και το x είναι το δεδομένο εισόδου. Κάτω από αυτή την επικεφαλίδα μπορούμε να γράψουμε σχόλια (που να επεξηγούν τι κάνει το m-file) και τις εντολές που θα επεξεργαστούν τα δεδομένα εισόδου έτσι ώστε να δώσουν το δεδομένο εξόδου που θα θέλαμε. Παρατίθεται παρακάτω ένα απλό παράδειγμα:

function [a] = log3(x) % [a] = log3(x) - Calculates the base 3 logarithm of x. a = log(abs(x))./log(3); % End of function Η χρήση του συμβόλου % εισάγεται στην αρχή της γραμμής για να δηλώσει την εισαγωγή σχόλιου το οποίο το MATLAB δεν θα προσπαθήσει να εκτελέσει . Το πιο πάνω m-file έχει μόνο μία γραμμή, αυτή που υπολογίζει το δεδομένο εξόδου a, συναρτήσει του δεδομένου εισόδου x – εδώ απλώς υπολογίζεται ο λογάριθμος του x στη βάση 3. Για να εκτελεστεί το πιο πάνω m-file εισάγεται στο παράθυρο εντολών η παρακάτω εντολή:

Page 25: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

25

>> log3(5) ans = 1.4650

Προτείνεται η χρήση script files ακόμα και για απλά προγράμματα καθώς

μπορεί να αποθηκευθεί το αρχείο και να επαναχρησιμοποιηθεί. Εξαιτίας της χρησιμότητας των script αρχείων, το MATLAB παρέχει αρκετές λειτουργίες που είναι ιδιαίτερα χρήσιμες όταν χρησιμοποιούνται σε M-files. Αυτές παρατίθενται στον Πίνακα 2. FUNCTION Explanation disp(ans) Display results without identifying variable names. echo Control the Command window echoing of script file commands. input Prompt user input. keyboard Give control to keyboard temporarily (type return to quit). pause Pause until user presses any keyboard key. pause(n) Pause for n seconds. waitforbuttonpress Pause until user presses mouse button or keyboard key.

Πίνακας 3. Λειτουργίες επιγραφικών αρχείων (M-file Functions) GLOBAL: Καθορισμός ολικών μεταβλητών.

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

ΠΑΡΑΔΕΙΓΜΑ clear all clc global v E plain global AB AD global nx ny Στο παραπάνω παράδειγμα ορίζονται στην αρχή του κώδικα 7 μεταβλητές ως ολικές με τη χρήση της εντολής global, (η επανάληψη της εντολής γίνεται καθαρά για λόγους καλύτερης εποπτείας και παρουσίασης του κώδικα). Οι δύο πρώτες εντολές clc και clear all συνιστάται να εισάγονται στην αρχή κάθε αρχείου κώδικα για την αποφυγή επαναχρησιμοποίησης προγενέστερων αποθηκευμένων μεταβλητών

Page 26: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

26

7 ΧΕΙΡΙΣΜΟΣ ΑΡΧΕΙΩΝ ΚΕΙΜΕΝΟΥ ΑΝΑΓΝΩΣΗ ΑΠΟ ΑΡΧΕΙΟ ΚΕΙΜΕΝΟΥ (TEXTFILE) Εάν ανοίξουμε το αρχείο “datafile” ώστε να “διαβάσουμε” τρεις ακέραιους αριθμούς όπου καθένας καταλαμβάνει πέντε θέσεις (formatted), μία δυνατότητα για να διαχειριστούμε σωστά το αρχείο είναι η ακόλουθη: >>fid = fopen(‘datafile’, ‘r’); >>[n,l,m] = fscanf(fid,’%5.0f,%5.0f,%5.0f\n’) >>fclose(fid); ΕΓΓΡΑΦΗ ΣΕ ΑΡΧΕΙΟ Ας υποθέσουμε τώρα ότι γνωρίζουμε την τιμή τριών ακέραιων αριθμών, (n, l, m), έκαστος των οποίων καταλαμβάνει πέντε θέσεις (formatted), και επιθυμούμε να τους αποθηκεύσουμε σε ένα αρχείο με το όνομα “outfile”. Μια δυνατότητα είναι η ακόλουθη: >>fid = fopen(‘outfile’, ‘w’); >>fprintf(fid,’%5.0f,%5.0f,%5.0f\n’, n, l, m); >>fclose(fid); Ο αναγνώστης ενδείκνυται να ανατρέξει στο HELP του fprintf για το format

που δίνεται μέσα στη παρένθεση της εντολής. DEBUGGING A SCRIPT-FILE. Στα δεξιά του παραθύρου editor εμφανίζονται τα λάθη και οι προειδοποιήσεις της MATLAB προς τον χρήστη, και συνίσταται να ακολουθούνται οι συμβουλές αυτές για καλύτερα και πιο γρήγορα αποτελέσματα. Ακόμα, χρησιμοποιώντας την εντολή echo παρέχεται η δυνατότητα στο χρήστη να

αποκτήσει καλύτερη επισκόπηση του εκτελέσιμου κώδικα καθώς εμφανίζει στο παράθυρο των εντολών όποια εντολή εκτελείται. Αυτό με τη σειρά του βοηθάει στον εντοπισμό λαθών και την ευκολότερη διόρθωσή τους. Echo on

… εντολές Echo off

ΠΑΡΑΔΕΙΓΜΑ Ο παρακάτω κώδικας είναι ένα παράδειγμα της παραπάνω εντολής:

echo on temp=1; for i=1:2:10 A(temp)=i; temp=temp+1;

Page 27: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

27

end echo off Εμφανίζει στο παράθυρο των εντολών την παρακάτω αλληλουχία: temp=1; for i=1:2:10 A(temp)=i; temp=temp+1; A(temp)=i; temp=temp+1; A(temp)=i; temp=temp+1; A(temp)=i; temp=temp+1; A(temp)=i; temp=temp+1; end echo off

Page 28: MATLAB Final Tutorial Provatidisusers.ntua.gr/cprovat/yliko/MATLAB_for_Beginners.pdfκαι Model-Based Design για δυναμικά και ενσωματωμένα (embedded) συστήματα.

28

Αναφορές [1] Duane Hanselman and Bruce Littlefield, The Student Edition of MATLAB:

The language of technical computing, Version 5 (και επόμενες εκδόσεις), User’s Guide, The MATHWORKS Inc., Prentice Hall, Upper Saddle River, NJ 07458, 1997.

[2] Desmond J. Higham and Nicholas J. Higham, MATLAB Guide, 2nd editions, SIAM, Philadelphia, 2005.

[3] Y.W. Kwon and H.C. Bang, The Finite Element Method using MATLAB, CRC

Press, Boca Raton, 1996. Ελληνική μετάφραση: Μέθοδος των Πεπερασμένων Στοιχείων, Θεωρία και Εφαρμογές με το MATLAB, Εκδόσεις ΦΟΥΝΤΑΣ, 2010.

[4] Ola Dahlblom, Anders Peterson, Hans Petersson, (1993) "CALFEM — a

program for computer-aided learning of the finite element method", Engineering Computations, Vol. 3 Iss: 2, pp.155 – 160.

[5] Σύγχρονο Μαθηματικό Λογισμικό MATLAB-MATHEMATICA, Εισαγωγή

και Εφαρμογές, Γ.Σ. ΠΑΠΑΓΕΩΡΓΙΟΥ, Χ.Γ. ΤΣΙΤΟΥΡΑΣ, Ι.Θ. ΦΑΜΕΛΗΣ, ΕΚΔΟΣΕΙΣ ΣΥΜΕΩΝ, ΑΘΗΝΑ 2004.

[6] http://www.siam.org/books/ot92 [7] http://www.comlab.ox.ac,uk/pseudospectra/eigtool [8] http://www2.ucy.ac.cy/~xenophon/pubs/matlab_intro.pdf

[9] http://www.bumatek.boun.edu.tr/orgnizasyon/download/MATLAB_GUIDE_www

.bumatek.boun.edu.tr.pdf