Εισαγωγή στο Περιβάλλον Επιστημονικού Προγραμματισμού MATLAB-Simulink Δημήτριος Τζεράνης Λεωνίδας Αλεξόπουλος 1
Τι είναι τα Matlab και Simulink? Το Matlab (MATrix LABoratory) είναι ένα περιβάλλον επιστημονικού προγραμματισμού Περιέχει μια γλώσσα προγραμματισμού υψηλού επιπέδου Περιέχει εκτενείς βιβλιοθήκες από συναρτήσεις οργανωμένες σε εργαλειοθήκες (toolbox) για συγκεκριμένες εφαρμογές To Simulink είναι μια γραφική γλώσσα προγραμματισμού για μοντελοποίηση/προσομοίωση δυναμικών συστημάτων Μέρος του MATLAB
Γιατί Matlab? Θετικά Διευκολύνει την συγγραφή προγραμμάτων παρέχοντας στον χρήστη πλήθος έτοιμων συναρτήσεων γενικής χρήσης Επιτρέπει ταχύα δημιουργία και αξιολόγηση ενός αλγόριθμου (rapid prototyping) Αρνητικά Απαιτείται η αγορά του προϊόντος Matlab από την Mathworks Ένας κώδικας σε MATLAB είναι πολύ πιο αργός από ότι σε C/Fortran
Γιατί Matlab? Σε C Εύρεση max στοιχείου διδιάστατου πίνακα Σε Matlab max(a) Επίλυση μη-γραμμικης αλγεβρικής εξίσωσης fsolve(f) 4
Εργαλειοθήκες του Matlab 5
Μια Βασική Εισαγωγή στo Matlab Γραφικό Περιβάλλον Μεταβλητές Αριθμητική Πίνακες και Διανύσματα M files και συναρτήσεις Έλεγχος λογικής ροής 6
Γραφικό Περιβάλλον Χώρος εργασίας (command window) Τρέχων directory Workspace (Μεταβλητές στην μνήμη) 7
Γραφικό Περιβάλλον Χώρος εργασίας (command window) Περιβάλλον στο οποίο μπορούν να τρέξουν εντολές και να παρατηρηθούν τα αποτελέσματα των πράξεων Κάτι σαν high-end κομπιουτεράκι Τρέχων directory Ο φάκελος στον οποίο το MATLAB ψάχνει πρώτο για να βρει συναρτήσεις Ο φάκελος στον οποίο το MATLAB ψάχνει δεδομένα εισόδου Workspace To σύνολο των μεταβλητών που βρίσκονται στην μνήμη του Η/Υ
Command Window Ο χρήστης δίνει 2 εντολές όπου εισάγει τις μεταβλητές x (ίση με 2) και y (ίση με 3) αντίστοιχα. Το ; μετά κάθε εντολή αποτρέπει την προβολή του αποτελέσματος Το αποτέλεσμα της πρόσθεσης των μεταβλητών x και y αποθηκεύεται στην μεταβλητή z η οποία προβάλεται διότι λείπει το ; Μετά το >> είναι ο κέρσορας (αναμένει είσοδο από χρήστη) Εκτέλεση της συνάρτησης exp(x), η οποία υπολογίζει το e x. Tο αποτέλεσμα εμφανίζεται διότι λείπει το ; όμως δεν αποθηκεύεται σε κάποια μεταβλητή. Κείμενο μετά το % είναι σχόλιο και δεν λαμβάνεται υπόψην
Μεταβλητές στο MATLAB Κάθε μεταβλητή αντιστοιχεί σε δεδομένα αποθηκευμένα σε θέσεις μνήμης του Η/Υ Το όνομα μιας μεταβλητής ακολουθεί κανόνες Λατινικοί χαρακτήρες, ξεκινά με χαρακτήρα, case-sensitive http://www.mathworks.com/help/matlab/matlab_prog/variable-names.html Το είδος μιας μεταβλητής αντιστοιχεί στο είδος των δεδομένων που περιέχει
Είδη Μεταβλητών (Classes) http://www.mathworks.com/help/techdoc/matlab_prog/f2-12135.html#f2-101310
Είδη Μεταβλητών (Classes) Μια αριθμητική μεταβλητή είναι εξορισμού double (double precision) εκτός αν ο χρήστης την ορίσει διαφορετικά Η μεταβλητή x είναι τύπου «double» (double precission) εξ ορισμού. Η συνάρτηση class δίνει τον τύπο της μεταβλητής Η μεταβλητή y είναι τύπου «uint8» (unsigned integer 8-bit) επειδή έτσι ορίστηκε.
Είδη Μεταβλητών (Classes) Κάθε είδος αριθμητικής μεταβλητής Μπορεί να περιγράψει διαφορετικό εύρος αριθμών Καταλαμβάνει διαφορετικό χώρο μνήμης
Βασική Αριθμητική Αλγεβρικοί τελεστές Λογικοί τελεστές Μαθηματικές συναρτήσεις + Πρόσθεση - Αφαίρεση * Πολ/σμός == ίσο με ~= όχι ίσο με < μικρότερο > μεγαλύτερο sin(x) cos(x) tan(x) Ημίτονο Συνημίτονο Εφαπτομένη / Διαίρεση <= μικρότερο ή ίσο log(x) Φυσικός ^ Υψωση σε δύναμη >= μεγαλύτερο ή ίσο & λογικό ΚΑΙ (AND) λογικό Ή (OR) exp(x) λογάριθμος Εκθετική e x ~ λογικό όχι (ΝΟΤ)
Πίνακες και Διανύσματα Το Matlab είναι σχεδιασμένο να δουλεύει με πίνακες Πίνακας: σύνολο που περιέχει στοιχησμένα στοιχεία Κάθε πίνακας αντιστοιχεί σε μια μεταβλητή Τα στοιχεία ενός πίνακα είναι του ιδίου είδους Διδιάστατοι πίνακες έχουν διάσταση Μ Ν (Μ σειρές, Ν στήλες) Διάνυσμα: ένας πίνακας με 1 στήλη
Πίνακες και Διανύσματα: Δημιουργία Η μεταβλητή x είναι ένας πίνακας με 2 γραμμές και 3 στήλες. Τα [] δηλώνουν την δημιουργία πίνακα. Το, δηλώνει επόμενη στήλη. Το ; Δηλώνει επόμενη γραμμή Η μεταβλητή y είναι ένα διάνυσμα με 2 γραμμές. Το ; δηλώνει επόμενη γραμμή Δημιουργία ενός διανύσματοςσειράς (1 Μ) του οποίου το πρώτο στοιχείο είναι 1, και τα επόμενα διαφέρουν κατά 2 έως το πολύ το 8 Δημιουργία ενός 2 3 πίνακα w του οποίου τα στοιχεία είναι 1 Δημιουργία ενός 2 2 πίνακα k του οποίου τα στοιχεία είναι 0
Πίνακες και Διανύσματα: Διευθυνσιολόγηση Η συνάρτηση randn δημιουργεί ένα πίνακα x με 3 γραμμές και 4 στήλες, του οποίου τα στοιχεία προκύπτουν από την τυπική κανονική κατανομη Ν(0,1) Η μεταβλητή y δημιουργειται από το στοιχείο της 2 ης γραμμής και 3 ης στήλης του πίνακα x Η μεταβλητή z είναι ένας πίνακας που δημιουργειται από τα στοιχεία των γραμμών 1 έως 2 και των στηλών 2 έως 4 του πίνακα x Η μεταβλητή w είναι ένας πίνακας που δημιουργειται από τα στοιχεία των γραμμών 2 και μετά 1 της 4 ης στήλης του πίνακα x
Πίνακες και Διανύσματα: Αριθμητική Πράξεις πινάκων VS πράξεις στοιχείων πινάκων Δημιουργία δύο 2 3 πινάκων Α και Β Ο 2 3 πίνακας C προκύπτει από την πρόσθεση των πινάκων Α και Β με βάση νόμους γραμμικής άλγεβρας Οι πίνακες Α και Β όπως είναι δεν μπορούν να πολλαπλασιαστούν (στήλες Α πρέπει να είναι ίσες με γραμμές Β). Δίνει σφάλμα Ο 2 2 πίνακας D προκύπτει από τον πολλαπλασιασμό του πίνακα Α με τον ανάστροφο Β Τ (το δημιουργεί τον ανάστροφο) Λόγω της τελείας. πριν τον τελεστή * ο 2 3 πίνακας F προκύπτει από πολλαπλασιασμό στοιχείων: F(i,j) = A(i,j)*B(i,j)
Πίνακες και Διανύσματα: Αριθμητική Δημιουργία ενός 2 3 πίνακα από τυχαία νούμερα στο εύρος [0,1] Στοίχηση των στοιχείων του z κατά στήλες Υπολογισμός των μέγιστων στοιχείων κάθε γραμμής του πίνακα z
Πίνακες και Διανύσματα: Αριθμητική Πολλές συναρτήσεις όταν έχουν σαν είσοδο ένα πίνακα, εφαρμόζουν την συνάρτηση σε όλα τα στοιχεία του πίνακα Δημιουργία του 2 3 πίνακα x του οποίου τα στοιχεία είναί τυχαία στο εύρος [0,1] Κάθε στοιχείο του 2 3 πίνακα y προκύπτει ως y(i,j) = exp(x(i,j)) Πολλαπλασιάζοντας ένα πίνακα με ένα αριθμό ισοδυναμεί με πολλαπλασιασμό κάθε στοιχείου με τον αριθμό. Εδώ, ο πίνακας z έχει στοιχεία τυχαία στο διάστημα [0,180] Κάθε στοιχείο του 2 3 πίνακα w προκύπτει ως w(i,j) = cos(z(i,j)/180*π). Ουσιαστικά οι γωνίες z μετατρέπονται σε radians πριν εφαρμοστεί η συνάρτηση cos (συνημίτονο)
Πίνακες και Διανύσματα: Χρήσιμες Συναρτήσεις Δημιουργία 3 3 πίνακα Α Ορίζουσα του πίνακα Α Διαστάσεις του πίνακα Α. Στην μεταβλητή xa αποθηκεύεται ο αριθμός των γραμμών, στην ya ο αριθμός των στήλων Η μεταβλητή Αinv είναι ο αντίστροφος του Α
Πίνακες και Διανύσματα: Χρήσιμες Συναρτήσεις Συνάρτηση Χ = zeros(n,m) Δημιουργία ενός n m πίνακα Χ με στοιχεία 0 Χ = ones(n,m) Δημιουργία ενός n m πίνακα Χ με στοιχεία 1 Χ = eye(n) v = sum(x) v = prod(x) v = max(x) v = min(x) d = numel(x) [r,s] = size(x) x = A\b Δημιουργία ενός n n μοναδιαίου πίνακα Χ Υπολογισμός του αθροίσματος των στοιχείων κάθε στήλης του πίνακα Χ Υπολογισμός του γινομένου των στοιχείων κάθε στήλης του πίνακα Χ Υπολογισμός του μέγιστου στοιχείου κάθε στήλης του πίνακα Χ Υπολογισμός του ελάχιστου στοιχείου κάθε στήλης του πίνακα Χ Συνολικός αριθμός στοιχείων του πίνακα Χ Αριθμός σειρών (r) και στήλων (s) του πίνακα Χ Επίλυση του γραμμικού συστήματος Αx=b μέσω Gauss elimination
M-files (Scripts) & Συναρτήσεις (Functions) Το Matlab είναι κάτι πολύ παραπάνω από ένα κομπιουτεράκι για πράξεις στην command window Μ-file: μια ακολουθία από εντολές για εκτέλεση Έχουν άμεση πρόσβαση στις μεταβλητές του workspace Συνάρτηση: ένα «κουτί» που εκτελεί κάποια εργασία Δέχεται εισόδους (arguments) και παρέχει εξόδους (αποτέλεσμα) Δεν έχει άμεση πρόσβαση στις μεταβλητές του workspace. Αντίθετα χρησιμοποιεί δικές της μεταβλητές που σβήνονται μετά την εκτέλεση της συνάρτησης
Μ-Files Δημιουργία ενός m-file (script) από το μενού file Παράθυρο editor του MATLAB Εκτέλεση (run) του m-file Ακολουθία εντολών προς εκτέλεση
Συναρτήσεις: Δημιουργία Δημιουργία function m-file από το μενού file Δήλωση συνάρτησης Έξοδος Όνομα συνάρτησης Είσοδος συνάρτησης Τέλος συνάρτησης
Συναρτήσεις: Εκτέλεση Παράδειγμα File->save as->f.m
Συναρτήσεις σε Εργαλειοθήκες
Έλεγχος Λογικής Ροής: Διαγράμματα Ροής Αλγόριθμος: Μια ακριβής περιγραφή των βημάτων που απαιτούνται για να επιτευχθεί μία εργασία Διαγράμματα Ροής Γραφικός τρόπος περιγραφής ενός αλγόριθμου Διεργασία / Εντολή Είσοδος Έξοδος Απόφαση ΝΑΙ Αρχή / Τέλος ΟΧΙ
Έλεγχος Λογικής Ροής: Διαγράμματα Ροής Παράδειγμα: εύρεση μικρότερου στοιχείου 29
Έλεγχος Λογικής Ροής: If Statements if (Condition_1) Matlab Commands elseif (Condition_2) Matlab Commands elseif (Condition_3) Matlab Commands.. else Matlab Commands end
Έλεγχος Λογικής Ροής: For & While Loops for cti = a:b end Matlab Commands Υπολογισμός μιας αλυσίδας αριθμών Fibonacci x = zeros(1,15); x(1)=0; x(2)=1; for cti = 3:15 x(cti) = x(cti-1) + x(cti-2); end figure, bar(1:15,x); while (condition) end Matlab Commands Παράδειγμα: Υπολογισμός αθροίσματος των στοιχείων ενός 5 1 διανύσματος a = rand(5,1); suma = 0; cti = 1 while ct<=5 suma = suma + a(cti); ct = ct+1; end
Έλεγχος Λογικής Ροής: For & While Loops Γενικά καλό είναι να προτιμούνται οι πράξεις σε πίνακες αντί για πράξεις σε στοιχεία πινάκων μέσω for loops Παράδειγμα: Άθροισμα 2 διανυσμάτων Αργό! a = rand(5,1); b = rand(5,1); sumab = a; for cti = 1:5 sumab(cti) = sumab(cti) + b(cti); end Γρήγορο! a = rand(5,1); b = rand(5,1); sumab = a+b;
Simulink: Περιβάλλον εργασίας Άνοιγμα παραθύρου simulink Παράθυρο simulink Εργαλεία simulink Παράθυρο editor simulink Δυναμικό μοντέλο
Simulink: Περιβάλλον εργασίας Αριθμητική επίλυση της απόκρισης ενός m-c-k μηχανικού συστήματος σε βηματική είσοδο Εκτέλεση προσομοίωσης Βηματική είσοδος Παρουσίαση αποτέλέσματος x(t) Αλγόριθμος αριθμητικής ολοκλήρωσης
Βιβλιογραφία Υπάρχουν αρχεία pdf user guide & getting started για MATLAB, simulink, και όλα τα toolbox. Ψάξτε στο google Παράδειγμα αναζήτησης: matlab image processing toolbox user guide Νέα έκδοση MATLAB βγαίνει κάθε 6 μήνες (π.χ. 2013a, 2013b, κτλ). Τα βασικά του matlab/simulink είναι τα ίδια. Αρχεία που περιγράφουν τα βασικά (και όχι μόνο): MATLAB Primer: http://www.mathworks.com/help/pdf_doc/matlab/getstart.pdf Simulink Getting Started Guide http://www.mathworks.com/help/pdf_doc/simulink/sl_gs.pdf