ΗΜΥ 100 Εισαγωγή στην Τεχνολογία 7 Νοεμβρίου 2008 Στυλιανή Πετρούδη ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ
ΤΑ ΘΕΜΑΤΑ ΜΑΣ ΣΗΜΕΡΑ Εισαγωγή στην MATLAB (2) -- Αρχεία MATLAB -- Βρόγχοι και εκφράσεις συνθήκης -- Συναρτήσεις
Ενότητα 3: Αρχεία MATLAB Αρχεία M (M-files) Δημιουργούνται σε ξεχωριστό παράθυρο (edit window). Τρόπος γραφής όπως σε κάθε επεξεργαστή κειμένου. Πολύ πιο εύκολος τρόπος γραφής κωδικού και εκτέλεσης προγραμμάτων αφού μπορούν να φυλαχτούν και να διαμορφωθούν αργότερα ή να καλεστούν από άλλα M-files ή από το κυρίως παράθυρο.
Δημιουργία αρχείου MATLAB 1.Στο κυρίως παράθυρο επιλέξτε File → New → M-file (θα ανοίξει το MATLAB editor) 2. Πληκτρολογήστε τις εντολές που φαίνονται στο σχήμα Ενότητα 3: Αρχεία MATLAB
3. Για να μπορεί να τρέξει κάποιο πρόγραμμα, πρέπει να βρίσκεται σε ένα από τους φακέλους (directories) οι οποίοι έχουν εξουσιοδότηση να τρέχουν αρχεία της MATLAB. Αν ο φάκελος στον οποίο φυλάξουμε το αρχείο δεν υπάρχει σε αυτή τη λίστα, τότε δεν μπορεί να τρέξει το πρόγραμμα. -- Για να το προσθέσουμε στη λίστα: από το κυρίως παράθυρο επιλέγουμε το File → Set Path → Add Folder και επιλέγουμε το folder στο οποίο βρίσκεται το αρχείο. Επιλέγουμε το Save και ακολούθως Close. 4. Για να τρέξουμε το πρόγραμμα πληκτρολογούμε το όνομα του αρχείου στο κυρίως παράθυρο (μην ξεχάσετε να κάνετε Save το πρόγραμμα κάθε φορά που αλλάζετε κάτι). Ενότητα 3: Αρχεία MATLAB
Γενικά To σύμβολο % χρησιμοποιείται μπροστά από τα σχόλια (comments) (ότι ακολουθεί στην ίδια γραμμή αγνοείται). Τα σχόλια είναι πολύ σημαντικά για να μπορούν και άλλοι να καταλαβαίνουν τον κώδικα μας, αλλά και να θυμούμαστε τι έχουμε κάνει όταν περάσει αρκετός χρόνος από τότε που γράψαμε το πρόγραμμα. Ο αριθμός των δεκαδικών σημείων που εμφανίζονται στην οθόνη εξαρτάται από το πως ζητούμε να εμφανίζονται και όχι από την ακρίβεια του λογισμικού. Όλες οι πράξεις γίνονται με 15 δεκαδικά. -- Για να αλλάξετε τον αριθμό των δεκαδικών που παρουσιάζονται στην οθόνη χρησιμοποιείστε την εντολή ‘format’. π.χ. ‘format long e’ παρουσιάζει τους αριθμούς με 15 δεκαδικά και σε εκθετική μορφή. -- Πληκτρολόγησε ‘help format’ για περισσότερες πληροφορίες. Ενότητα 3: Αρχεία MATLAB
Ενότητα 4: Γραφικές παραστάσεις >> t = 0:0.01:3; >> x = 2*sin(4*t); >> plot(t,x) % Προσθήκη πλέγματος >> grid on % Προσδιορισμός ορίων αξόνων >> axis([ ]) % Προσθήκη τίτλου και ονομασία αξόνων >> xlabel('t (s)') >> ylabel('x (V)') >> title('Example for plotting a sine function')
Παράδειγμα: Σχεδιάστε ένα μοναδιαίο κύκλο (με ακτίνα μια μονάδα) Ενότητα 4: Γραφικές παραστάσεις >> theta = linspace(0, 2*pi, 100); >> x = cos(theta); >> y = sin(theta); >> plot(x,y) >> axis('equal') >> xlabel('x') >> ylabel('y') >> title('Circle of unit radius')
Σχεδιασμός πολλαπλών γραφικών παραστάσεων στους ίδιους άξονες Ενότητα 4: Γραφικές παραστάσεις >> figure(1) >> t=linspace(0, 2*pi, 100); >> x = 2*sin(t); >> y = cos(t); >> z = x+y; >> plot(t,x,'r-.', t,y,'b:', t,z,'m+') >> axis([ ]) >> legend('x', 'y', 'z') >> xlabel('t (s)') >> ylabel('Signal value (V)') >> title('Demonstration of plotting three graphs on the same axes') Εναλλακτικός τρόπος: >> figure(1) >> hold on >> plot(t,x) >> plot(t,y) >> plot(t,z) >> hold off Χωρίς την εντολή hold on και hold off, θα δημιουργούνταν 3 ξεχωριστές γραφικές παραστάσεις
Ενότητα 4: Γραφικές παραστάσεις Σχεδιασμός πολλαπλών γραφικών παραστάσεων στο ίδιο παράθυρο >> figure(1) >> subplot(3,2,1) >> plot(t,x,'r') >> grid on >> title('Plot of x with grid') >> subplot(3,2,4) >> plot(t,y,'+') >> title('Plot of y with no grid') >> subplot(3,2,5) >> plot(t,y) >> grid on >> title('Plot of y with grid') >> subplot(3,2,6) >> plot(t,z) >> title('Plot of z with no grid') Στην πρώτη αναφορά δημιουργεί ένα γραφικό παράθυρο με m σειρές και n στήλες, ενώ ο τρίτος αριθμός αναφέρεται στη θέση που θα τοποθετηθεί η συγκεκριμένη παράσταση.
Τρισδιάστατες γραφικές παραστάσεις Ενότητα 4: Γραφικές παραστάσεις >> u = -5:0.2:5; >> [X,Y] = meshgrid(u,u); >> Z = cos(X).*cos(Y).*exp(-sqrt(X.^2+Y.^2)/4); >> surfc(Z)
Χρήσιμες πληροφορίες: -- Για τη διόρθωση κάποιων στοιχείων στη γραφική παράσταση (αλλαγή γραμματοσειρών, αλλαγή κλίμακας αξόνων, αλλαγή πάχους ή χρώματος του γραφήματος) πρέπει (α) να πατήσετε το τόξο στην γραμμή εργαλείων (toolbar) της γραφικής παράστασης και (β) να κάνετε right-click μέσα στους άξονες της γραφικής παράστασης και να επιλέξετε “Properties”. -- help plot (επίσης axis, xlabel, ylabel, title, legend, grid) -- demos → MATLAB → Graphics → Plotting and printing (or 2-D plots or 3-D plots) Ενότητα 4: Γραφικές παραστάσεις
Ενότητα 5: Βρόγχοι και εκφράσεις συνθήκης ‘for’ loop Χρησιμοποιείται όταν θέλουμε να επαναλάβουμε κάποια εντολή ή μια ομάδα από εντολές. Τρόπος σύνταξης: for i = m:k:n statement 1; statement 2; end Οι εντολές που εσωκλείονται στον βρόγχο εκτελούνται για όλες τις τιμές του i από την τιμή m ως την τιμή n αυξανόμενο κατά k κάθε φορά. (Αν το k απουσιάζει, τότε η τιμή του i αυξάνετε κατά ένα κάθε φορά).
‘while’ loop Χρησιμοποιείται όταν επιθυμούμε να εκτελέσουμε μια εντολή ή μια ομάδα από εντολές ένα απεριόριστο αριθμό φορών, μέχρις ότου η συνθήκη η οποία αναφέρεται αμέσως μετά την λέξη ‘while’ πάψει να ισχύει. Τρόπος σύνταξης: while (λογική έκφραση) statement; end Ενότητα 5: Βρόγχοι και εκφράσεις συνθήκης Πρέπει οπωσδήποτε μέσα στο βρόγχο κάτι σχετικό με την λογική έκφραση να αλλάζει ώστε να μην εκτελείται ο βρόγχος επ’ άπειρον. Παράδειγμα: j = 1; while (j <= 4) j = j+1; end disp(j) j = 5
‘if’ statement Χρησιμοποιείται όταν επιθυμούμε να εκτελέσουμε κάποια εντολή ή κάποια ομάδα εντολών μόνο αν κάποια έκφραση είναι αληθής. Μπορούν να γίνουν διάφοροι συνδυασμοί χρησιμοποιώντας και τις κωδικές λέξεις ‘else’ και ‘elseif’. Ενότητα 5: Βρόγχοι και εκφράσεις συνθήκης if (expression1) statement1; εκτελείται μόνο αν το expression1 είναι αληθές end if (expression1) statement1; εκτελείται μόνο αν το expression1 είναι αληθές else statement2; εκτελείται μόνο αν το expression1 δεν είναι αληθές end if (expression1) statement1; εκτελείται μόνο αν το expression1 είναι αληθές elseif (expression2) statement2; εκτελείται μόνο αν το expression1 δεν είναι αληθές και το expression2 είναι αληθές else statement3; εκτελείται μόνο αν κανένα expression δεν είναι αληθές end
Παράδειγμα: Ενότητα 5: Βρόγχοι και εκφράσεις συνθήκης k = 1 while (k <= 5) if (k <= 3) j = k^3 elseif (k == 4) j = k^2 else j = k end k = k+1 end Βρόγχος μέσα σε βρόγχο (nested loop) k = 1 j = 1 k = 2 j = 8 k = 3 j = 27 k = 4 j = 16 k = 5 j = 5 k = 6
Ενότητα 5: Χρήσιμες εντολές break: -- Τερματίζει την εκτέλεση ενός βρόγχου ‘for’ ή ‘while’. -- Οι εντολές που ακολουθούν στον βρόγχο δεν εκτελούνται. -- Στους βρόγχους μέσα σε βρόγχο (nested loops) η εντολή break τερματίζει μόνο τον βρόγχο μέσα στον οποίο βρίσκεται. Οι εξωτερικοί βρόγχοι δεν επηρεάζονται. continue: -- Συνεχίζει με την επόμενη επανάληψη του βρόγχου ‘for’ ή ‘while’ και παραλείπει τις εντολές που ακολουθούν μέσα στο βρόγχο που βρίσκεται.
Παράδειγμα Για τους πιο κάτω κώδικες, υπολογίστε το αποτέλεσμα της εξόδου για κάθε περίπτωση που δίνεται: if n>1 m = n+1 else m = n-1 end (α) n = 7 m = (β) n = 0 m = (γ) n = -10 m = if (0 < x < 10) y = 4*x elseif (10 < x < 40) y = 10*x else y = 500 end (α) x = -1 y = (β) x = 5 y = (γ) x = 30 y = (δ) x = 100 y =
Η συνάρτηση είναι ένα αρχείο Μ με τη μόνη διαφορά ότι οι μεταβλητές είναι τοπικές (local) και όχι σφαιρικές (global). Ένα αρχείο συνάρτησης ξεκινά με τον ορισμό της συνάρτησης ο οποίος καθορίζει τις μεταβλητές εισόδου και εξόδου. (Χωρίς τον ορισμό θα ήταν απλά ένα αρχείο Μ). Οι συναρτήσεις χωρίζονται σε ενσωματωμένες συναρτήσεις (built-in) και οριζόμενες από το χρήστη (user-defined). Στην πραγματικότητα, οι περισσότερες εντολές στη MATLAB είναι συναρτήσεις. Ενότητα 6: Συναρτήσεις (functions)
Τρόπος σύνταξης: function [out1, out2, …] = function_name(in1, in2, …); Ενότητα 6: Συναρτήσεις (functions) Κωδική λέξη (απαραίτητη) Μεταβλητές εξόδου (αν δεν υπάρχουν, τότε μπορεί να μην χρησιμοποιηθούν οι αγκύλες) Το όνομα της συνάρτησης (πρέπει απαραιτήτως το αρχείο να ονομαστεί με το ίδιο ακριβώς όνομα) Μεταβλητές εισόδου
Παράδειγμα: Ενότητα 6: Συναρτήσεις (functions) >> [determinantA, z] = solvex(1) determinantA = 3 z = >> who Your variables are: determinantA z Μπορούμε να αλλάξουμε τα ονόματα των μεταβλητών Αφού τελειώσει η συνάρτηση, τότε οι μεταβλητές της δεν υπάρχουν πια αφού είναι τοπικές. Υπάρχουν μόνο οι μεταβλητές εξόδου. Προσέξτε ότι μπορούμε να καλέσουμε μια συνάρτηση μέσα από μια άλλη
clc Καθαρίζει την οθόνη (δε σβήνει όμως τις μεταβλητές) Ctrl-C Διακόπτει την εκτέλεση του προγράμματος fprintf Γράφει δεδομένα σε αρχείο … Επιτρέπει τη γραφή μιας εντολής και στην επόμενη γραμμή keyboard Διακόπτει προσωρινά την εκτέλεση του προγράμματος στο σημείο που τοποθετούμε αυτή τη λέξη. Επαναρχίζει αφού πληκτρολογήσουμε ‘return’ Για όλες τις πιο πάνω εντολές πληκτρολογήστε ‘help keyword’ για περαιτέρω πληροφορίες. Χρήσιμες εντολές