ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών ΙI 06/04/2017 ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών ΙI Matlab Εαρινό εξάμηνο 2005 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.ucy.ac.cy/~petrosk
ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Περιεχόμενα Εισαγωγή στο Matlab Βασικές λειτουργίες Διανύσματα και μητρώα Γραφικές απεικονίσεις και παραστάσεις γραφικές απεικονίσεις σημείων και ευθύγραμμων τμημάτων γραφικές παραστάσεις συναρτήσεων γραφικές παραστάσεις πολλαπλών συναρτήσεων πολλαπλές γραφικές παραστάσεις πολλαπλά γραφικά σχήματα Αρχεία Μatlab Αρχεία Εντολών - Αρχεία Δεδομένων Προγραμματισμός με το Matlab Αρχεία συναρτήσεων Λογικά τεστ Βρόγχοι Η σειρά αυτή αποτελείται απο 4 διαλέξεις με τα εξής θέματα: Σήμερα, στην 1η διάλεξη θα: μετά από μια σύντομη εισαγωγή στους Η/Υ θα δούμε πολύ συνοπτικά κάποια βασικά προγράμματα Η/Υ τα οποία θα είναι απαραίτητα κατά την διάρκεια των σπουδών σας, αλλά και αργότερα χρήσιμα στην επαγγελματική σας καρίερα. Συγκεκριμένα θα δώσομε έμφαση στο Matlab, το οποίο είναι ένα ευκολόχρηστο μαθηματικό εργαλείο με δυνατότητες γραφικών απεικονήσεων και κάποιες δυνατοτήτες προγραμματισμού. Στην 2η διάλεξη θα: δούμε κάποια πολύ βασικές αρχές προγραμματισμού και ανάπτυξης λογισμικού και μια και ακόμη τώρα διδάσκεστε μια κανονική γλώσσα προγραμματισμού, την C, θα χρησιμοποιήσομε προς το παρόν, εναλλακτικά το Matlab το οποίο είναι πιο απλό στον προγραμματισμό αλλά με πολύ πιο περιορισμένες δυνατότητες. Στην 3η διάλεξη θα δούμε συνοπτικά: κάποιες απλές αριθμητικές μεθόδους και αλγόριθμους, χρησιμοποιόντας και πάλι το Matlab σαν γλώσσα προγραμματισμού, αν και στην πράξη είναι πιο λογικό να χρησιμοποιήσετε καποιά πραγματική γλώσσα προγραμματισμού, όπως C, C++, Java, κλπ. Τέλος, στην 4η διάλεξη θα δούμε : κάποια βασικά στοιχεία για το διαδίκτυο και αν μείνει χρόνος θα μιλήσομε για τρόπους χρήσης των Η/Υ στην Μηχανική
Πρόγραμμα αριθμητικών υπολογισμών: Matlab ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Πρόγραμμα αριθμητικών υπολογισμών: Matlab To Matlab είναι ενα ευκολόχρηστο και πολύ χρήσιμο λογισμικό πακέτο για αριθμητικούς υπολογισμούς και γραφικές παραστάσεις. Αν και παρέχει κάποια απλά στοιχεία προγραμματισμού είναι πολύ πιο εύκολο στην χρήση από τις παραδοσιακές γλώσσες προγραμματισμού, παρέχοντας την δυνατότητα να εκφραστούν αριθμητικά πλήθος μαθηματικών προβλημάτων και να χρησιμοποιηθούν προσφερόμενα εργαλεία αυτού του προγράμματος. Το Matlab έχει ένα μεγάλο αριθμό μαθηματικών συναρτήσεων και αλγορίθμων τους οποίους μπορείτε να χρησιμοποιήσετε χωρίς την ανάγκη προγραμματισμού τους, όπως θα έπρεπε να κάνετε χρησιμοποιόντας μια καθαρή γλώσσα προγραμματισμού, όπως την C. Επιπλέον, το Matlab παρέχει πολύ καλές δυνατότητες για σχεδίαση γραφικών παραστάσεων, δισδιάστατων η τρισδιάστατων γραφικών απεικονήσεων δεδομένων. Τέλος, είναι δυνατός ο συνδιασμός του Matlab με προγράμματα γραμμένα σε C και Fortran. Το Matlab βασίζεται πάνω στην χρήση πινάκων, από όπου πήρε και την ονομασία του, από το MATrix LABoratory. Το κύριο παράθυρο με τις εντολές του Matlab, μπορεί να ξεκινήσει από το εικονίδιο, ή από το μενού εκκίνησης. Μπορούμε να έχομε διαφορετικά στοιχεία του περιβάλλοντος ανοικτά κάνοντας την αντίστοιχη επιλογή από το View menu. Το πιο βασικό στοιχείο είναι το Command window, μπόρουμε να εκτελέσομε κατ’ευθείαν εντολές στο Matlab. Πέρα απο το κύριο παράθυρο εντολών, θα δούμε αργότερα ότι το περιβαλλόν τουMatlab διαθέτει και ένα συντάκτη, με τον οποίο μπορούμε να γράφομε τις εντολές μέσα σε κάποιο αρχείο αντί κατ’ευθείαν στο παράθυρο εντολών και ακολούθως δίνοντας το όνομα του αρχείου στο παράθυρο εντολών αυτό διαβάζετε σαν να είχαν γραφτεί οι εντολές κατέυθείαν εκεί. Για να δημιουργήσετε ένα τέτοιο αρχείο διαλέξετε File->New->M-file Τέλος, θα δούμε ότι χρησιμοποιόντας το Matlab μπορούμε εύκολα να κάνομε γραφικές παραστάσεις σε παράθυρα τα οποία ανοίγει το πρόγραμμα όποτε ζητηθεί η σχεδίαση κάποιας γραφικής παράστασης.
Πληροφορίες/βοήθεια για το Matlab ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Πληροφορίες/βοήθεια για το Matlab Εκκίνηση προγράμματος >> help ( >> more on) >> help matlab\general >> help beep >> demos Ιστοσελίδα κατασκευαστών: http://www.mathworks.com >> doc Χρήση σαν απλή υπολογιστική Μπορείτε να βρείτε βοήθεια για το MATLAB είτε επιλέγοντας από το μενού την επιλογή Help, ή εκτελόντας την εντολή help η οποία απαριθμεί όλες τις κύριες κατηγορίες βοήθειας >> help : help => Online help for MATLAB functions and M-files Με την εντολή more οn έχετε περισσοτερο έλεγχο του παρουσιαζόμενου κειμένου το οποίο παρουσιάζεται ανά σελίδα. >> more on MORE Control paged output in command window. MORE OFF disables paging of the output in the MATLAB command window. MORE ON enables paging of the output in the MATLAB command window. MORE(N) specifies the size of the page to be N lines. When MORE is enabled and output is being paged, advance to the next line of output by hitting the RETURN key; get the next page of output by hitting the spacebar. Press the "q" key to exit out of displaying the current item. Για να δείτε τα θέματα μιας συγκεκριμένης κατηγορίας, ή υποκατηγορίας, χρησιμοποιήστε το help με το όνομα της κατηγορίας ή υποκατηγορίας. Π.χ. >> help matlab\general , και ακολούθως το συγκεκριμένο θέμα που σας ενδιαφέρει, π.χ. Help beep. H εντολή demos σας δίνει την δυνατότητα να δείτε μια σειρά απο παραδειγμάτων που επιδεικνύουν τις δυνατότητες του MATLAB >> demos => will open a window a "MATLAB Demos" Window on your screen. Πολύ χρήσιμη είναι η ιστοσελίδα των κατασκευαστών του MATLAB: http://www.mathworks.com Παρόμοια, η εντολή doc σας παρουσιάζει την τεχνική τεκμηρίωση και τα σχετικά βιβλία περιγραφής του MATLAB >> doc: doc => Displays The MathWorks, Inc. HTML (Online) documentation.doc opens The MathWorks, Inc. Online Help Desk.doc function displays the HTML documentation for the MATLAB function named.doc toolbox/function displays the HTML documentation for the specified toolbox function. O καλύτερος τρόπος για να μάθετε το MATLAB είναι να παίξετε μαζί του, και είμαι σίγουρος ότι ο χρόνος που θα αφιερώσετε για να το μάθετε θα τον κερδίσετε πίσω όταν θα χρειαστείτε να χρησιμοποιήσετε κα΄ποιο μαθηματικό εργαλείο. Μπορείτε να ξεκινήστε αμέσως να εξερευνατε το MATLAB και να το χρησιμοποιείτε αφού μπορεί να χρησιμοποιηθεί και σαν απλή υπολογιστική.
Βασικές λειτουργίες Matlab ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Τελεστές: Προτεραιότητα τελεστών Αριθμητικές εκφράσεις Μεταβλητές: >> help ops >> help colon Βασικές λειτουργίες Matlab ( ) ^ * , / + , - < , <= , == , => , > & , | >> pi ans = 3.1416 >> r = 5 r =5 >> pi * r ^ 2 ans = 78.5398 >> a = ans; >> a a = 78.5398 >> a = pi * r ^ 2 (17+3)/2+6/3 17+3/2+6/3 Οπως φαίνεται στην προηγούμενη πράξη, χρησιμοποιόντας το Matlab σαν απλή υπολογιστική, γίνεται χρήση κάποιων τελεστών με αριθμούς. Για να δείτε ποιοί είναι οι βασικοί τελεστές μπορείτε να χρησιμοποιήσετε την εντολή 'help ops’, και ακολούθως την εντολή help με πιο συγκεκριμένο τελεστή για να μάθετε τι ακριβώς κάνει. Κατά τον υπολογισμό των αποτελέσματος ισχύουν καποιοι απλοί κανόνες προτεραιότητας. Συγκεκριμενα οι τελεστές χωρίζονται σε διάφορες κατηγορίες προτεραιοτήτων και αυτοί με την πιο ψηλη προτεραιότητα εκτελούνται πρώτα και σε περίπτωση ίσης προτεραιότητας εκτελούνται από αριστερά προς δεξιά. Στo Matlab μπορειτε να ορίσετε και να χρησιμοποιήσετε μεταβλητές πολύ απλά όπως φαίνεται στο παράδειγμα. Οι μεταβλητές είναι συγκεκριμένες θέσεις στην μνήμη του Η/Υ όπου αριθμοί, χαρακτήρες ή άλλα στοιχεία μπορούν να αποθηκευτούν. Το όνομα μιας μεταβλητής αποτελείται από συνδιασμό γραμμάτων και αριθμών και πρέπει να αρχίζει με γράμμα. Δεν χρειάζεται να ορίσετε, όπως κάνετε στην C, τι τύπος είναι μια μεταβλητή, το οποίο είναι όμως επικίνδυνο. Επίσης, κάποιες μεταβλητές είναι προκαθορισμένες στο Matlab , π.χ. Η μεταβλητη pi ειναι προκαθορισμενη και ισούται με το Π. Η εντολή r = 5 καθορίζει ότι η μεταβλητή r έχει τιμή 5 Η μεταβλητή ans αποθηκεύει το αποτέλεσμα της εκάστοτε τελευταίας πραξης., το οποίο μπορούμε να αποθηκεύσομε σε καποια αλλη μεταβλητη, π.χ. a = ans. Επίσης θα μπορούσαμε να αποθηκεύσομε κατευθείαν κατά την εκτέλεση της πράξης το αποτέλεσμα σε κάποια μεταβλητή, π.χ. a = pi * r ^2 Mε την προσθήκη ενός ερωτηματικού στο τέλος μιας πρότασης αποφεύγεται η εκτύπωση στην οθόνη του αποτελέσματος, ενώ η πράξη γίνεται κανονικά. Γραμμές που ξεκινούν με % είναι σχόλια και δεν εκτελούνται. Η εντολή who παρουσιάζει τις εκάστοτε ορισμένες μεταβλητές. Η εντολή clear καθαριζει απο την μνήμη όλες τις μεταβλητές και υπορουτίνες που όρισε ο χρήστης. Η εντολή whos παρουσιάζει πιο λεπτομερής πληροφορίες για τις εκάστοτε ορισμένες μεταβλητές, π.χ. δίνοντας και τις διαστάσεις των πινάκων. >> who Your variables are: a ans r >> clear >> whos
ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Διανύσματα και μητρώα >> a(2) >> a(1) = 6; >> a >> c(2,3) >> c(1,1:2) >> c(2,2) = -5; >> c 2 6 2 3 11 To Matlab είναι πολύ χρήσιμο για την επεξεργασία διανυσμάτων και πινάκων, από όπου πήρε αρχικά και το όνομα του, ως MATrix LABoratory. Ένας πίνακας είναι απλά μια μεταβλητή η οποία περιέχει ένα αριθμό πινακοποιημένων τιμών. Ο ορισμός ενός διανυσματος η μητρώου γίνεται με την χρήση τετράγωνων αγκύλων (παρενθέσεων) όπως πιο πάνω. Η κάθε νέα γραμμη ορίζεται με την χρήση του ερωτηματικού. Έτσι το a ειναι ένα διανυσμα 3X1, δηλαδη ένα διάνυσμα στήλη με 3 στοιχεία, το b είναι ένα διάνυσμα γραμμή με 2 στοιχεία, και το c είναι ενα μητρώο 2Χ3, δηλαδή 2 γραμμών και 3 στηλών. Το ερωτηματικό υποδηλώνει τέλος γραμμής ενός πίνακα. Για να πάρομε ένα στοιχείο ενός διανύσματος χρησιμοποιούμε το όνομα του διανύσματος ακολουθούμενο απο παρένθεση μέσα στο οποίο δίνεται η θέση του στοιχείου, ξεκινόντας με το 1 για το πρώτο στοιχείο, σε αντίθεση με την C όπου η αρίθμηση των πινάκων αρχίζει από το 0. Ο πρώτος αριθμός είναι ο αριθμός της γραμμής και ο 2ος ο αριθμός της στήλης. Παρομοίως, για να πάρομε ένα στοιχείο ενός πίνακα χρησιμοποιούμε το όνομα του πίνακα ακολουθούμενο από παρένθεση μέσα στο οποίο δίνεται η θέση του στοιχείου ως ζέυγος, ξεκινόντας πάλι με το 1. Έτσι C(2.3) είναι το στοιχείο 11. Επίσης χρησιμοποποιόντας άνω-κάτω τελεία μπορούμε να ορίσομε ένα εύρος τιμών ενός διανύσματος ή γενικά πίνακα, όπως στο C(1,1:2) που δίνει τα στοιχεία της 1ης γραμμής από την 1η έως την 2η στήλη. Με τον ίδιο τρόπο μπορούμε να αλλάξομε την τιμή ενός στοιχείου ενός πίνακα, π.χ. Εδώ το στοιχείο (2,2) του πίνακα c, δηλαδή το στοιχείο στην 2η γραμμή και ΄2η στήλη του πίνακα. Έτσι ο πίνακας c μετά απο αυτή την πραξη έχει τιμές. 6 7 6 7 8 9 -5 11
Διανύσματα και μητρώα (συνεχ.) ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Διανύσματα και μητρώα (συνεχ.) >> d = a * b >> e = c * a >> a’ >> c’ >> sum(a) >> sum(c,2) 4 5 8 10 12 15 44 62 1 2 3 6 9 7 10 8 11 Είναι εύθύνη του χρήστη η πράξεις που θα εκτελεστούν να είναι μαθηματικά ορθές, π.χ. να αποφεύγοντε ασύμβατες πράξεις όπως πολλαπλασιασμός μητρώων με μη επιτρεπτές διαστασεις. Όπως βλέπετε πιο πάνω ο πολλαπλασιασμός του διανύσματος a με το διάνυσμα b δίνει το μητρώο d. Kαι ο πολλαπλασιασμός του μητρώου c με το διανύσματος a δίνει το μητρώο e. Ο ανάστροφος ενός διανύσματος, ή ενός μητρώου (πίνακα), δίνεται απλά με την χρήση τόνου μετά το όνομα του διανύσματος, ή μητρώου. Το Matlab έχει πολλές διαθέσιμες συναρτήσεις τις οποίες μπορείτε να χρησιμοποιήσετε. Απλά πρέπει να δώσετε τις απαιτούμενες τιμές μέσα σε παρένθεση μετά το όνομα της συνάρτησης. Π.χ. το sum() υπολογίζει το άθροισμα των στοιχείων που δίνοντε σαν παράμετροι μέσα στην παρένθεση. Έτσι sum(a) ισούται με το άθροισμα των στοιχείων του διανύσματος α, ενώ sum(c,2) ισούται με το άθροισμα των στοιχέιων της 2ης γραμμής του πίνακα C. 6 30
Διανύσματα και μητρώα (συνεχ.) ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ Διανύσματα και μητρώα (συνεχ.) 06/04/2017 x = [ 1 2 3 4 1 1 ] y = [ 4 2 1 3 1 2 ] u = x * y v = x .* y = [ 4 4 3 12 1 2 ] >> w = x * y’ = [ 11 11 19 15 ] >> eye(3) = [ 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 ] >> inv(w) = [ -0.3409 0.2500 0.4318 -0.2500 ] Ας δούμε κάποιες ακόμη πράξεις με μητρώα. Το Χ και Υ είανι μητρώα διαστάσεων….. 2Χ3. Τι νομίζετε ειναι τα αποτελέσματα των πραξεων¨Χ*Υ και Χ*Υ’? Ο πολλαπλασιασμός του Χ, ο οποίος έχει διαστάσεις 2Χ3, με τον Υ, ο οποίος έχει διαστάσεις 2Χ3, δεν είναι δυνατό γιατί δεν συμφωνούν οι διαστάσεις, αφού πρέπει ο αριθμός στηλών του Χ να είναι ίσος με τον αριθμό γραμμών του Υ για να είναι δυνατός ο πολλαπλασιασμός. Αντιθέτως, ο πολλαπλασιασμός του Χ , ο οποίος έχει διαστάσεις 2Χ3, με τον ανάστροφο του Υ, ο οποίος έχει διαστάσεις 3Χ2 είναι δυνατός και το αποτέλεσμα είναι… Ας δούμε ακόμη 2-3 πράξεις με μητρώα. Το inv(W) μας δίνει τον αντίστροφο ενός πίνακα. Αν δεν γνωρίζετε τι είναι ο αντίστροφος ενός πίνακα μην ανησυχείτε. Σύντομα θα μάθετε και θα σας είναι ιδιαίτερα χρήσιμος.. Το Matlab μπορεί να σας κάνει τον υπολογισμό του αντιστρόφου, αν αυτός υπάρχει, ενός μητρώου πολυ εύκολα. Ο πολλαπλασιασμός ενός μητρώου με τον αντίστροφο του δίνει το μητρώο ταυτότητα. Μια αλλη βασική έννοια είναι η ορίζουσα ενός πινακα την οποία μπορείται να υπολογίσετε με το Μatlab με την εντολή det(). >> w * inv(w) = [ 1.0 0.0 0.0 1.0 ] >> zeros(2,3) = [ 0.0 0.0 0.0 0.0 0.0 0.0 ] >> det(w) = -44
Γραφικές απεικoνίσεις σημείων ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Γραφικές απεικoνίσεις σημείων >> x1 = 5; >> y1 = 7; >> plot(x1,y1,'*') % Σχεδιασμός σημείων (x1,y1) >> grid on % Προσθήκη κύριων γραμμών στο διάγραμμα >> title('Sxediash Shmeioy') % Προσθήκη τίτλου >> xlabel('X') >> ylabel('Y') % Προσθήκη τίτλων στους άξονες σχεδίασης
Γραφικές απεικόνισεις σημείων ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Γραφικές απεικόνισεις σημείων >> clf >> x1 = 5; >> y1 = 7; >> plot(x1,y1,'*') >> grid on >> title('Sxediash Shmeioy') >> xlabel('X') >> ylabel('Y') >> hold on >> axis equal >> myAxes = [ 1 10 4 9 ]; >> axis(myAxes) >> plot(7,6,'o')
Γραφικές απεικόνισεις σημείων και ευθειών ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Γραφικές απεικόνισεις σημείων και ευθειών >> clf ; clear; >> x1 = 5; y1 = 7; >> x2 = 7; y2 = 6; >> x3 = 4.2; y3 = 5.5; >> x = [x1 x2 x3]; >> y = [y1 y2 y3]; >> axis equal >> axis([ 1 10 4 9 ]); >> hold on >> plot(x,y,’*') >> x(4)=x1; y(4)=y1; >> plot(x,y) >> grid on >> title(’Sxediasmos shmeiwn kai trigwnoy') >> xlabel('X') >> ylabel('Y')
ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Γραφικές παραστάσεις >> x = 0:0.25:15; (αρχή:βήμα:τέλος) % Αυτόματος καθορισμός διανύσματος με τιμές γωνιών >> y = sin(x); % Αυτόματος υπολογισμός διανύσματος με τιμές ημιτόνων >> plot(x,y) % Σχεδιασμός σημείων (x,y) >> grid on % Προσθήκη κύριων γραμμών στο διάγραμμα >> title('Sxediash Hmitonoy') % Προσθήκη τίτλου >> xlabel('X') >> ylabel('Y') % Προσθήκη τίτλων στους άξονες σχεδίασης
ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Παράδειγμα Σχεδιάστε την γραφική παράσταση της εξίσωσης: όπου: 0 <= theta <= 100 >> clf >> clear >> theta = 0:0.5:100 >> z = 15*cos(theta/2) >> z = z + 7.5 * sin(theta/5); >> plot(theta,z) >> grid on >> title('Askhsh 2h') >> xlabel('Theta') >> ylabel('Z')
Πολλαπλές γραφικές παραστάσεις ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Πολλαπλές γραφικές παραστάσεις >> figure(1) >> clf >> x = 0:0.25:15; >> y = sin(x); >> plot(x,y,’r’) >> grid on >> title('Sxediash Hmitonoy') >> xlabel('X') >> ylabel(’Hmitono,Synhmitono‘) >> z = cos(x); >> hold on >> plot(x,z) >> plot(x,z,’or’) Eναλλακτικά: plot(x,y,'r',x,z, x,z,'or')
Πολλαπλά γραφικά σχήματα ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Πολλαπλά γραφικά σχήματα figure(2) subplot(3,2,1) plot(x,y,'-') title('X-Y Plot ') subplot(3,2,3) plot(x,y,'--') grid on title('X-Y Plot with grid') subplot(3,2,4) plot(x,z) title('X-Z Plot with grid') subplot(3,2,6) plot(x,z, 'o') title('X-Z Plot: o ') subplot(3,2,5) plot(x,z, '*') title('X-Z Plot: *')
Γραφικές παραστάσεις και απεικονίσεις: ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Γραφικές παραστάσεις και απεικονίσεις: Σχεδιάστε τα σημεία (-3,-2), (0,1), (2,2), (4,5) και (7,9) χρησιμοποιώντας το σύμβολα ‘ο’ και διακεκομμένη γραμμή στο 3ον τομέα ενός σχήματος αποτελούμενου από 2 γραμμές και 2 στήλες, όπως πιο κάτω: >> x = [ -3 0 2 4 7 ]; >> y = [ -2 1 2 5 9 ] >> subplot(2,2,3) >> plot(x,y,'o') >> grid on >> hold on >> plot(x,y,'--')
Αρχεία Matlab: αρχεία Μ (M-files) 06/04/2017 Αρχεία Matlab: αρχεία Μ (M-files) myMFile.m >> myMFile File Set Path Το Matlab σας παρέχει ένα πολύ καλό συντάκτη (editor) με τον οποίο μπορείτε να γράψετε τις εντολές που θέλετε να εκτελέσετε σε κάποιο αρχείο και δίνοντας το όνομα του αρχείου στο Matlab, θα διαβάσει μια προς μια τις γραμμές από το αρχείο και θα τις εκτελέσει ως να τις είχατε δακτυλογραφήσει κατευθείαν στο Matlab. Τέτοια αρχεία ονομάζονται M-Files, λόγω της κατάληξης της ονομασίας των που πρέπει να είναι πάντα ‘.m’, π.χ. myFile.m. Σε αυτό το παράδειγμα εδώ, έχομε γράψει, χρησιμοποιόντας τον συντάκτη του Matlab στο αρχείο myMFile.m τις εντολές που βλέπετε. Ακολούθως γράφοντας το όνομα του αρχείου στο Matlab θα εκτελέσει μια προς μια τις εντολές που περιέχονται εκεί όπως θα τις εκτελούσε αν τις είχατε δώσει κατευθείαν. Αυτή η δυνατότητα είναι πολύ σημαντική γιατί δεν χάνονται αυτά που γράφετε και μπορείτε εύκολα να κάνετε διορθώσεις και να ξαναδοκιμάσετε κάτι χωρίς να χρειάζεται να ξαναγράψετε όλες τις εντολές. Το μόνο που χρειάζεται είναι να κάνετε ότι αλλάγες και μικροδιορθώσεις απαιτούνται στο αρχείο σας και να δακτυλογραφήσετε το όνομα του, ώστε το Matlab να έκτελέσει ξανά από την αρχή όλες τις εντολές.
Αρχεία δεδομένων Matlab ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Αρχεία δεδομένων Matlab >> load w.dat >> w >> w(2,1) Με 4 5 6 7 8 9 7
Αρχεία Matlab: load/save ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Αρχεία Matlab: load/save >> x = 1:2:11; >> y = [4 7 -3 2]; >> save C:\mySaved1 x >> save C:\mySaved2 >> clear all >> load C:\mySaved1 >> x >> y >> load C:\mySaved2 1 3 5 7 9 11 Με ??? Undefined function or variable ’y'. 4 7 -3 2
Σχεδίαση με βάση αρχεία Matlab ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Σχεδίαση με βάση αρχεία Matlab temps.dat >> temperatures temperatures.m Με
Αρχεία συναρτήσεων Matlab ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Αρχεία συναρτήσεων Matlab Απλές εντολές σε M-file: myMFile1.m a = 2.5; e = pi * a ^ 2; >> myMFile1 >> e e = 19.634954 Συναρτήσεις: >> e = myFunction1(10) e = 314.1593 >> myFunction1(0.5) ans = 0.7854 >> x=myFunction1(17.5) x = 962.1128 myFunction1.m function embado=myFunction1(x) embado = pi * x ^2; return Κοιτόντας ένα απλό παράδειγμα αρχείου M, όπως αυτό εδώ, myMFile2.m, γράφοντας το όνομα του στο Μatlab βασικά εκτελεί μια προς μια τις εντολές μέσα στο αρχείο myMFile2.m. Στο συγκεκριμένο παράδειγμα εκτελείται η εντολή βάση της οποίας ορίζεται το a ίσο με 2.5 και ακολούθως η εντολή που εξισώνει το e με π* α^2, δηλαδή το εμβαδό ενός κύκλου με ακτίνα ίση με α. Αφού καλέσομε το αρχείο M τότε μπορούμε να ζητήσομε την τιμή του e. Όμως αυτό το αρχείο M τι μπορεί να κάνει? Τι μπορεί να υπολογίσει? Μπορεί να υπολογίσει μόνο το το εμβαδό ενός κύκλου με ακτίνα ίση με a το οποίο ισούται με 2.5. Και αν θέλομε να υπολογίσομε το εμβαδό ενός κύκλου με ακτίνα 10? Τότε θα πρεπει να ξαναγράψομε άλλο ένα αρχείο Μ. Και αν θέλομε να υπολογίσομε το εμβαδό 100 κύκλων με διαφορετικές διαμέτρους? Αυτή την δουλειά θα κάνομε? Είναι ακριβώς εδώ που οι συναρτήσεις είναι χρήσιμες αφού γράφοντας μια φορά μια συνάρτηση μπορούμε να την καλούμε κάθε φορά με διαφορετική τιμή της παραμέτρου. Μια συνάρτηση στο Μatlab είναι απλά μια σειρά από εντολές σε ένα m-αρχείο, όπως το παράδειγμα myFunction1.m εδώ, σε ένα αρχείο με το ίδιο όνομα με την συνάρτηση και με την λέξη function να προηγείται του ονόματος της συνάρτησης, ή του ονόματος της μεταβλητής της οποίας η τιμή επιστρέφεται εκεί απ’ όπου η συνάρτηση κλήθηκε. Μια συνάρτηση μπορεί να καλεστεί απ’ευθείας από το Μatlab ή από κάποια άλλη συνάρτηση του Μatlab. Αύτη η πρώτη γραμμή είναι ο ορισμός της συνάρτησης και αποτελείται από την λέξη function ακολουθούμενη, αν επιστρέφεται κάποια τιμή εκεί απ’ όπου η συνάρτηση κλήθηκε, από το ονόμα της μεταβλητής της οποίας η τιμή επιστρέφεται, και από το όνομα της συνάρτησης. Πέρα από το ότι μια συνάρτηση δέχεται παραμέτρους και μπορεί να επιστρέψει κάποια τιμή, μια συνάρτηση μεταγλωττίζεται την πρώτη φορά που θα κληθεί με αποτέλεσμα μεγαλύτερη ταχύτητα όταν θα ξανακληθεί. Μία συνάρτηση αν και έχει πρόσβαση στις μεταβλητές του χώρου από όπου κλήθηκε, αλλά οι μεταβλητές που δημιουργούνται μέσα στη συνάρτηση είναι τοπικές, δηλαδή δεν είναι προσβάσιμες έξω από την συνάρτηση. Αν διορθώνετε μία συνάρτηση κατά τη διάρκεια μίας προσπάθειας, χρησιμοποιείστε την εντολή clear myFunctionName για να σβήσετε τη μεταγλωττισμένη έκδοση, ώστε να διαβαστεί η καινούργια.
ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Συναρτήσεις Ορισμός συναρτήσεως: function apotelesma = synarthsh1(parametroi) >> clear all >> z=myFun1(8) >> y ??? Undefined function or variable 'y'. >> z z = 512 myFun1.m function y=myFun1(x) y = x*x*x; return Ορισμός συνάρτησης Άρα είδαμεότι το Matlab μας επιτρέπει να ορίσομε και να χρησιμοποιήσομε συναρτήσεις πέρα απο τις προκαθορισμένες συναρτήσεις του Matlab. Είναι πάντα καλή τακτική να διαιρείται ένα πρόγραμμα σε μικρές συναρτήσεις οι οποίες εύκολα μπορείτε να γράψετε, ελέγξετε, διορθώσετε και χρησιμοποιήσετε. Η πρώτη γραμμη ενός αρχείου μίας συνάρτησης αποτελεί τον ορισμό της και έχει την μορφή function embado=οnomaFunction(x), όπου το όνομα της συνάρτησης μπορεί να αποτελείται απο γράμματα και αριθμούς αλλά πρέπει να ξεκινά με γράμμα. Oι παράμετροι που παρέχοντε είναι μια λίστα παραμέτρων διαχωρισμένων με κόμματα. Μια συνάρτηση μπορεί να έχει μηδέν, ένα η περισσότερες παραμέτρους των οποίων οι τιμές δίνοναι όταν καλείται η συνάρτηση. Mετά τον ορισμό μπορεί να ακολουθήσει κάποιο σχόλιο το οποίο θα παρουσιαστεί αν χρησιμοποιηθεί το όνομα της συνάρτησης με την εντολή help. Το The body of your function will normally perform some computation based on the input arguments and end by assigning some values to the output arguments. When the function is called from another program, whatever values are supplied to the function are copied into the dummy input arguments, then the function is executed, then the values of the output dummy arguments are inserted into the calculation in the calling program. It is good practice to end each function with the return statement to remind you that execution returns to the calling program at this point. function y=cube(x) % cube(x) returns the cube of x y = x * x * x; return; a=10; b=cube(a); disp(b); % \ disp(cube(a)); % All display 1000 disp(cube(10)); % / It is good practice to pass all the information you need for a function through the list of input arguments. Although this requires a lot of copying, MATLAB does this quite efficiently. Sometimes however, you may have a number of functions that all require access to the same table of data, and you don’t want to keep copying the table into the function and then copying the changes back into your program. Imagine if the table had a million elements! Under these circumstances you can declare variables as ‘global’. This means that they can be accessed both inside your program and inside a function without having to pass the variable as a function argument. Here is an example: function initialisetable(num) % initialise global variable TAB to all the same value global TAB; TAB=num*ones(size(TAB)); % main program TAB=zeros(1,100); initialisetable(5); You can also write functions which take a variable number of arguments. In fact MATLAB allows any function to be called with fewer arguments than the definition, so it is a good idea to always check the number of arguments supplied. The built in variable ‘nargin’ contains the number of input arguments actually supplied, and ‘nargout’ contains the number of output arguments. You can use the built in function ‘error()’ to report an error if the number of arguments is incorrect. For example: function m=average(x,y) if (nargin!=2) error(’two arguments needed in average()’); end 2. Formatted console input-output You can control the exact way in which values are printed to the screen with the ‘fprintf()’ function (fprintf= “file print formatted”). This function takes one argument repesenting the formatting instructions, followed by a list of values to be printed. Embedded within the format string are ‘percent commands’ which control how the values are to be written. Here are some examples: fprintf('The answer is %g seconds.\n',nsec); fprintf('Day of the week = %s\n',dayofweek([7 12 1941])); fprintf('Mean=%.3f ± %.4f\n',mean,stddev); The command %g represents a general real number, %f means a fixed point number, %d a decimal integer, and %s a string. You can put numeric values between the ‘%’ and the letter to control the field width and the number of digits after the decimal point. For example (□=space): fprintf('%5g',10) □□□10 fprintf('%10.4f',123.456) □□123.456□ fprintf('%10s', 'fred') □□□□□□fred You can input a value or a string from the command line with the ‘input()’ function: yval=input('Enter a number: '); name=input('Enter your name: ', 's'); myFun2.m function myFun2(x,y) x + y return Σώμα συνάρτησης >> myFun2(8,7) ans = 15
ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Λογικά τέστς Τελεστές: > < > = < = = = ~ = & | ~ >> x = 5; >> y = 7; >> x < y >> x >= y - 3 >> x == y - 3 >> 0 < x & x+2 > y >> 0 < x | y > x >> ~ (x < 5) 1 1 Mε τα λογικά τεστς μπορούμε να ελέγξομε αν κάτι είναι αληθές ή όχι, το οποίο εκφράζεται με τις τιμές 1 και 0, αντίστοιχα. Οι σχετικοί τελεστές είναι οι τελεστές συγκρίσεως >, < , >=, <=, ==, ~=, και το λογικά ‘και’ (&), το λογικό ‘ή’ (|) και η λογική άρνηση (~). Κοιτόντας αυτό το παράδειγμα τι νομίζετε είναι οι απαντήσεις και γιατί? 1 1
ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Διακλαδώσεις if έκφραση1 εκτελείται μόνο αν η έκφραση1 είναι αληθής elseif έκφραση2 εκτελείται μόνο αν η έκφραση1 δεν είναι αληθής και η έκφραση2 είναι αληθής else εκτελείται αν καμία έκφραση δεν είναι αληθής end if έκφραση1 εκτελείται μόνο αν η έκφραση1 είναι αληθής end if έκφραση1 εκτελείται μόνο αν η έκφραση1 είναι αληθής else εκτελείται μόνο αν η έκφραση1 δεν είναι αληθής end
Παράδειγμα διακλαδώσεων ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Παράδειγμα διακλαδώσεων rand1.m
ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Βρόγχοι for μεταβλητή = αρχική τιμή : (προαιρετικό) βήμα : τελική τιμή εντολές end 1 4 9 16 25 for i=1:5 disp(i^2) end for i=5:-1:1 if i == 3 continue end disp(i^2) Matlab provides two types of loops, a for-loop (comparable to a Fortran do-loop or a C for-loop) and a while-loop. A for-loop repeats the statements in the loop as the loop index takes on the values in a given row vector: >> for i=[1,2,3,4] disp(i^2) end 1 4 9 16 (Note the use of the built-in function disp, which simply displays its argument.) The loop, like an if-block, must be terminated by end. This loop would more commonly be written as >> for i=1:4 (recall that 1:4 is the same as [1,2,3,4]). The while-loop repeats as long as the given expr is true (nonzero): >> x=1; >> while 1+x > 1 x = x/2; >> x x = 1.1102e-16 25 16 4 1
ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Βρόγχοι (συνεχ.) (μέσα στις οποίες πρέπει κάτι σχετικό με την λογική έκφραση να αλλάζει, ή να υπάρχει κάποιο break, ώστε να αποφεύγεται βρόγχος επ’άπειρον) while λογική έκφραση εντολές end i = 0; while 1 if i>=10 break end i = i + 2 disp(i) i = 2 i = 4 i = 6 i = 8 i = 10 10 i = 0; while i<10 i = i + 2 end disp(i) Matlab provides two types of loops, a for-loop (comparable to a Fortran do-loop or a C for-loop) and a while-loop. A for-loop repeats the statements in the loop as the loop index takes on the values in a given row vector: >> for i=[1,2,3,4] disp(i^2) end 1 4 9 16 (Note the use of the built-in function disp, which simply displays its argument.) The loop, like an if-block, must be terminated by end. This loop would more commonly be written as >> for i=1:4 (recall that 1:4 is the same as [1,2,3,4]). The while-loop repeats as long as the given expr is true (nonzero): >> x=1; >> while 1+x > 1 x = x/2; >> x x = 1.1102e-16 continue: συνέχεια με επόμενη εκτέλεση βρόγχου for ή while break: τερματισμός εκτέλεσης βρόγχων for και while
Σύγκριση Matlab και άλλων γλωσσών προγραμματισμού ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Σύγκριση Matlab και άλλων γλωσσών προγραμματισμού Matlab σε σύγκριση με: Fortran C/C++ Java Visual Basic/VB .net C#
Είσοδος δεδομένων/Έξοδος αποτελεσμάτων ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Είσοδος δεδομένων/Έξοδος αποτελεσμάτων io1.m a = input('Aktina kykloy: '); p = 2 * pi * a; e = pi * a ^ 2; fprintf(' Dokimh: %s ', 'Matlab') fprintf('\n Aktina = %f ', a) fprintf('\n Perimetros = %.3f ', p) fprintf(' \n Epifaneia = %f ', e) fprintf(' p = %f \t e = %f ', p, e) fprintf(' %s = %f ', 'a', a) fprintf(' %s = %f ', 97, a) >> io1 Aktina kykloy: 5 Dokimh: Matlab Aktina = 5.0000 Perimetros = 31.416 Epifaneia = 78.539816 p= 31.415927 e = 78.539816 a = 5 Το Matlab παρέχει την δυνατότητα να εισάγει ο χρήστης δεδομένα με την εντολή input η οποία σας επιτρέπει να καθορίσετε κάτι που θα παρουσιαστεί στην οθόνη για να υπενθυμίσει τον χρήστη ότι πρέπει να δωθεί κάτι. Eπιπλέον σας επιτρέπει να παρουσιάσετε τα αποτελέσματα με τον ίδιο ευέλικτο τρόπο όπως στην γλώσσα C χρησιμοποιόντας πολύ παρόμοιες εντολές. Αν δεν έχετε μάθει ακόμη αρκετά στην C και σας ακούγονται Όπως φαίνεται σε αυτό το παράδειγμα μπορε
Άλλες χρήσιμες εντολές ΠΠΜ 221: Στατική Ανάλυση των Κατασκευών IΙ 06/04/2017 Άλλες χρήσιμες εντολές >> format long ; pi ans = 3.14159265358979 ans = 3.1416 >> format short ; pi >> disp(pi) 3.1416 >> t= 'Testing' ; disp(t) Testing >> s='2*3-5+3/2’ >> eval(s) ans =2.5000 >> realMax ans =1.7977e+308 Με την εντολή format long το αποτέλεσμα παρουσιάζεται με 15 σημαντικά ψηφία, ενώ η εντολή format short που είναι δίνει μόνο 5 ψηφία, που είναι και ο προκαθορισμένος αριθμός. Για να εκτυπώσετε ένα σχήμα απλά μπορείτε να χρησιμοποιήσετε την εντολή print. Μπορείτε να ρίξετε μια ματιά στις πολλές επιλογές που έχει η εντολή print χρησιμοποιόντας την εντολή help print. Οι μεταβλητές στο Matlab μπορεί να είναι και λέξεις οι οποίες είναι ουσιατικά μονοδιάστατοι πίνακες χαρακτήρων. Ο τύπος μιας μεταβλητής καθορίζετε εμμεσα όταν η μεταβλητή πρωτο-χρησιμοποιηθεί και δεν απαιτείται η εκ των προτέρων δήλωση του τύπου της όπως στις περισσότερες γλώσσες προγραμματισμού. H εντολή ‘eval()’ μπορεί να χρησιμοποιηθεί για να υπολογίσει μια έκφραση αποθηκευμένη σαν λέξη. >> realMin ans =2.2251e-308 >> help InF >> help NaN >> print >> help print