MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf ·...

224
ΓΕΩΡΓΙΟΣ ΘΕΟ∆ΩΡΟΥ Καθηγητής ΑΠΘ ΝΙΚΗ ΘΕΟ∆ΩΡΟΥ Πληροφορικός ΠΡΑΚΤΙΚΟΣ Ο∆ΗΓΟΣ ΣΤΟ MATLAB ® ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ Θεσσαλονίκη 2007

Transcript of MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf ·...

Page 1: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

ΓΕΩΡΓΙΟΣ ΘΕΟ∆ΩΡΟΥ Καθηγητής ΑΠΘ

ΝΙΚΗ ΘΕΟ∆ΩΡΟΥ Πληροφορικός

ΠΡΑΚΤΙΚΟΣ Ο∆ΗΓΟΣ ΣΤΟ

MATLAB®

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ Θεσσαλονίκη 2007

Page 2: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Πρακτικός Οδηγός στο MATLAB

2

Κάθε γνήσιο αντίτυπο φέρει την υπογραφή των συγγραφέων

Copyright © 2007, Γ. Θεοδώρου, Ν. Θεοδώρου

Page 3: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

3

Πρακτικός Οδηγός στο MATLAB

Πρόλογος

Η ανάπτυξη των τεχνολογιών της πληροφορικής έχει επιφέρει

δραµατικές αλλαγές στην εκπαίδευση, και ο τρόπος διδασκαλίας των µαθηµάτων έχει επηρεασθεί σηµαντικά απ’ αυτές. Ο παραδοσιακός π.χ. τρόπος διδασκαλίας της φυσικής, στον οποίο αντιµετωπίζονται προβλήµατα που µπορούν να επιλυθούν µε αυστηρά µαθηµατικό τρόπο, έχει συµπληρωθεί έτσι ώστε να αντιµετωπίζονται και προβλήµατα των οποίων η λύση µπορεί να προσεγγιστεί µόνο αριθµητικά µε τη χρήση ηλεκτρονικών υπολογιστών. Επίσης, µε τα υπάρχοντα προγράµµατα υπάρχει η δυνατότητα γραφικής αναπαράστασης των αποτελεσµάτων, παρέχοντας έτσι µια εποπτική εικόνα που βοηθά στη σύνδεση της λύσης µε τη φυσική πραγµατικότητα. Κατά συνέπεια, η εξοικείωση του σύγχρονου εκπαιδευτικού µε τεχνολογίες χρήσης της πληροφορικής στην εκπαιδευτική διαδικασία αποτελεί απαίτηση µιας ήδη διαµορφωµένης πραγµατικότητας.

Βασικό συστατικό των απαιτούµενων δεξιοτήτων πληροφορικής, είναι η γνώση σύγχρονων γλωσσών προγραµµατισµού. Σε γενικές γραµµές, η σύγχρονη προσέγγιση στο θέµα αυτό είναι να επιλέγονται γλώσσες που να είναι φιλικές στο χρήστη, και έτσι να γίνονται ελκυστικές στο σύνολο σχεδόν των φοιτητών του κλάδου, και όχι µόνο σε µια µικρή µειονότητα απ’ αυτούς που τυχαίνει να έχουν ιδιαίτερο ενδιαφέρον σε υπολογιστές. Οι γλώσσες προγραµµατισµού που ικανοποιούν το παραπάνω κριτήριο, µπορούν σε γενικές γραµµές να χωριστούν σε δύο κατηγορίες, σ’ αυτές που κατά βάση είναι γλώσσες αριθµητικού προγραµµατισµού, και σε αυτές που είναι αλγεβρικού. Ο στόχος των δύο αυτών γλωσσών είναι διαφορετικός, γεγονός

Page 4: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Πρακτικός Οδηγός στο MATLAB

4

που καθιστά αναγκαία την εκµάθηση τουλάχιστον µιας εξ αυτών. Στόχος των γλωσσών αλγεβρικού προγραµµατισµού είναι κυρίως οι αναλυτικές πράξεις, ενώ των γλωσσών του αριθµητικού οι αριθµητικές. Από τις πιο διαδεδοµένες γλώσσες αριθµητικού κατά βάση προγραµµατισµού είναι το πρόγραµµα MATLAB, ενώ κυρίως αλγεβρικού η Mathematica. Στο παρόν βιβλίο γίνεται µια εισαγωγή στα βασικά στοιχεία του προγράµµατος MATLAB.

Στο πρώτο κεφάλαιο του βιβλίου παρουσιάζονται τα εισαγωγικά βήµατα για τη λειτουργία του MATLAB. Επίσης παρουσιάζονται οι τρόποι εκτέλεσης των βασικών αριθµητικών πράξεων, ο τρόπος χρήσεως των εσωτερικών συναρτήσεων του προγράµµατος, και ο τρόπος δηµιουργίας και χρήσης των Μ-αρχείων εντολών, που είναι ένας από τους βασικούς τρόπους σύνταξης προγραµµάτων στο MATLAB.

Στο δεύτερο κεφάλαιο εισάγεται η έννοια της λίστας, που είναι ένα από τα βασικότερα εργαλεία του προγράµµατος. Παρουσιάζεται ο τρόπος σύνταξης και διαχείρισης µιας λίστας, καθώς και µερικές εντολές για τη δηµιουργία ειδικών λιστών. Τέλος παρουσιάζονται οι πράξεις µε λίστες.

Στο τρίτο κεφάλαιο γίνεται µια εισαγωγή στις συµβολοσειρές, και στο τρόπο διαχείρισης τους.

Στο τέταρτο και πέµπτο κεφάλαιο παρουσιάζονται τα βασικά σηµεία των µεθόδων προγραµµατισµού µε το MATLAB, που αφορούν τη σύνταξη διαδικαστικών εντολών, όσο και τη σύνταξη και χρήση εξωτερικών συναρτήσεων.

Στο έκτο κεφάλαιο γίνεται µια εισαγωγή στις δισδιάστατες γραφικές παραστάσεις δεδοµένων και συναρτήσεων, και παρουσιάζονται οι βασικές εντολές διαµόρφωσης τους.

Στο έβδοµο κεφάλαιο παρουσιάζονται βασικά µέρη του προγράµ-µατος και του τρόπου διαχείρισης τους. Παρουσιάζονται, επίσης, τρόποι εισαγωγής και εξαγωγής δεδοµένων, και τέλος παρουσιάζονται εντολές ελέγχου της λειτουργίας και της απόδοσης του προγράµµατος. Στο όγδοο κεφάλαιο γίνεται µια εισαγωγή στις τρισδιάστατες γραφικές παραστάσεις, και τις βασικές εντολές διαµόρφωσης τους.

Στο ένατο κεφάλαιο γίνεται µια εισαγωγή στην εκτέλεση πράξεων της γραµµικής άλγεβρας µε το MATLAB, δηλαδή πράξεων µε ανύσµατα και

Page 5: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Πρόλογος

5

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

Τέλος, στο δέκατο κεφάλαιο παρουσιάζονται εφαρµογές του MATLAB στη µαθηµατική ανάλυση συναρτήσεων µιας µεταβλητής, δηλαδή στην εκτέλεση πράξεων µε πολυώνυµα, τον υπολογισµό ριζών τους και τη χρήση τους σε διαδικασίες προσαρµογής καθώς και τον υπολογισµό ριζών και ακρότατων συναρτήσεων οποιασδήποτε µορφής. Παρουσιάζονται επίσης εφαρµογές που αφορούν τον υπολογισµό ολοκληρωµάτων, την παρεµβολή δεδοµένων, και τον υπολογισµό του διακριτού µετασχηµατισµού Fourier.

Θεσσαλονίκη, Ιούλιος 2007 Γεώργιος Θεοδώρου Νίκη Θεοδώρου

Page 6: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Πρακτικός Οδηγός στο MATLAB

6

Page 7: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

7

Περιεχόµενα

Πρακτικός Οδηγός στο MATLAB............................................................... 3 Πρόλογος ............................................................................................ 3 Περιεχόµενα ....................................................................................... 7

ΚΕΦΑΛΑΙΟ 1........................................................................................... 13 Εισαγωγικές Έννοιες ................................................................................ 13

1.1 Εισαγωγή ................................................................................... 13 1.2 Βασικές πράξεις......................................................................... 15

1.2.1 Αριθµητικές πράξεις ............................................................ 15 1.2.2 Πράξεις σύγκρισης- Λογικές εντολές .................................. 18 1.2.3 Εντολή απόκρυψης............................................................... 19

1.3 Μαθηµατικές σταθερές και παράµετροι.................................... 20 1.3.1 Εισαγωγή νέων παραµέτρων - Εντολή ανάθεσης ................ 21

1.4 Εσωτερικές συναρτήσεις ........................................................... 23 1.4.1 Γενικές παρατηρήσεις .......................................................... 26

1.5 ∆ιαγραφή παραµέτρων .............................................................. 27 1.6 Σύνθετες εντολές ....................................................................... 28 1.7 Μ - Αρχεία Εντολών ................................................................. 29

1.7.1 Εντολή echo ......................................................................... 31 1.7.2 Κυψελική δοµή αρχείου ....................................................... 31

1.8 Προσέγγιση αριθµητικών τιµών................................................ 32 1.9 Εντολές διαχείρισης................................................................... 33

ΚΕΦΑΛΑΙΟ 2........................................................................................... 36 Λίστες......................................................................................................... 36

2.1 Ορισµός λίστας.......................................................................... 36

Page 8: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Πρακτικός Οδηγός στο MATLAB

8

2.1.1 Τροποποίηση στοιχείων λίστας ............................................37 2.1.2 Χαρακτηριστικά λίστας ........................................................38

2.2 Ειδικές εντολές δηµιουργίας λίστας ..........................................39 2.2.1 Εντολή a_initial:a_step:a_final.............................................40 2.2.2 Εντολή linspace(a1, a2, a3) ..................................................40 2.2.3 Εντολές zeros(n, m) και zeros(n)..........................................41 2.2.4 Εντολές ones(n, m) και ones(n) ............................................41 2.2.5 Εντολή eye(n) .......................................................................42 2.2.6 Εντολή diag(a) ......................................................................42 2.2.7 Εντολή magic(n) ...................................................................43 2.2.8 Εντολές rand(n, m) και rand(n) ............................................43 2.2.9 Εντολές randn(n, m) και randn(n) ........................................44

2.3 ∆ιαχείριση λίστας ......................................................................45 2.3.1 Πολλαπλή αναφορά σε στοιχεία λίστας ...............................45 2.3.2 Αναγωγή λίστας σε µονοδιάστατη λίστα-στήλη ..................47 2.3.3 Αναφορά σε στοιχεία λίστας µε λογική εντολή ...................48 2.3.4 Πολλαπλή τροποποίηση στοιχείων λίστας ...........................48

2.4 Συνενώνοντας λίστες .................................................................50 2.5 Πράξεις µε λίστες.......................................................................52

2.5.1 Επίδραση συνάρτησης σε λίστα ...........................................58 2.6 Ειδικές συναρτήσεις...................................................................59

ΚΕΦΑΛΑΙΟ 3 ...........................................................................................64 Συµβολοσειρές ...........................................................................................64

3.1 ∆ηµιουργία συµβολοσειράς .......................................................64 3.2 ∆ιαχείριση συµβολοσειράς ........................................................65

ΚΕΦΑΛΑΙΟ 4 ...........................................................................................68 Προγραµµατισµός .....................................................................................68

4.1 Εντολή ελέγχου ροής: if.............................................................68 4.2 Επαναληπτικές διαδικασίες - Βρόχοι.........................................71

4.2.1 Εντολή For............................................................................71 4.2.2 Εντολή While........................................................................75

4.3 Συµπληρωµατικές εντολές ελέγχου ...........................................78

Page 9: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Περιεχόµενα

9

4.3.1 Εντολή continue ................................................................... 79 4.3.2 Εντολή break ........................................................................ 80

4.4 Λογικοί τελεστές ....................................................................... 81 4.4.1 Λογικός τελεστής «και»....................................................... 82 4.4.2 Λογικός τελεστής «ή» .......................................................... 83 4.4.3 Λογικός τελεστής «οχι» ....................................................... 84

ΚΕΦΑΛΑΙΟ 5........................................................................................... 86 Συναρτήσεις .............................................................................................. 86

5.1 Μ – Συναρτήσεις ....................................................................... 86 5.1.1 Παράµετροι εισόδου και εξόδου .......................................... 87 5.1.2 Τερµατισµός συνάρτησης .................................................... 91

5.2 Οδηγός συνάρτησης .................................................................. 94 5.2.1 Οδηγός εσωτερικής συνάρτησης ......................................... 95 5.2.2 Οδηγός Μ-συνάρτησης ........................................................ 95 5.2.3 Οδηγός ανώνυµης έκφρασης ............................................... 96 5.2.4 Ανώνυµος oδηγός................................................................. 97

5.3 Εφαρµογές ................................................................................. 98 5.3.1 Αριθµητικός υπολογισµός ολοκληρώµατος......................... 98 5.3.2 Στατιστική περιγραφή δεδοµένων...................................... 100 5.3.3 Εσωτερικές συναρτήσεις για στατιστικά µεγέθη ............... 102

ΚΕΦΑΛΑΙΟ 6......................................................................................... 105 Γραφικά στο Επίπεδο ............................................................................. 105

6.1 Γραφική παράσταση δεδοµένων - Εντολή plot ....................... 105 6.1.1 ∆ιαµόρφωση γραφικής παράστασης .................................. 107 6.1.2 Εντολή scatter .................................................................... 116 6.1.3 Εντολή stem ....................................................................... 117

6.2 Πολλαπλές καµπύλες............................................................... 118 6.2.1 Εντολή hold on................................................................... 120

6.3 Πολλαπλές εικόνες .................................................................. 122 6.4 Γραφική παράσταση συνάρτησης – Εντολή ezplot................. 123 6.5 Αποτύπωση πειραµατικών σφαλµάτων................................... 126 6.6 Ιστογράµµατα .......................................................................... 127

Page 10: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Πρακτικός Οδηγός στο MATLAB

10

6.7 Ηµιλογαριθµικές και λογαριθµικές κλίµακες ..........................129 6.8 Πολικά διαγράµµατα................................................................132

6.8.1 Πολικό διάγραµµα δεδοµένων – εντολή polar ...................132 6.8.2 Πολικό διάγραµµα συνάρτησης – εντολή ezpolar..............133

6.9 Παραµετρικές καµπύλες - Πεπλεγµένες συναρτήσεις .............134 6.9.1 Γραφική παράσταση παραµετρικής καµπύλης...................134 6.9.2 Γραφική παράσταση πεπλεγµένης συνάρτησης .................135

ΚΕΦΑΛΑΙΟ 7 .........................................................................................138 ∆ιαχείριση του MATLAB.......................................................................138

7.1 Βασικά µέρη του προγράµµατος..............................................138 7.1.1 Παράθυρο διαχείρισης (Command Window).....................138 7.1.2 Βασικός χώρος λειτουργίας (Workspace) ..........................139 7.1.3 Ενεργός διεύθυνση αποθήκευσης (Current directory) .......139 7.1.4 Αρχείο καταχώρησης εντολών (Command History) ..........140

7.2 ∆ιαµόρφωση της εµφάνισης των αποτελεσµάτων...................141 7.3 ∆ιαχείριση χώρου λειτουργίας (workspace) ............................142 7.4 Αποθήκευση παραµέτρων σε αρχεία ASCII............................144 7.5 Εντολές input και pause ...........................................................145 7.6 Ηµερολόγιο κίνησης ................................................................147 7.7 Εντολές ελέγχου του προγράµµατος........................................148

ΚΕΦΑΛΑΙΟ 8 .........................................................................................150 Γραφικά στο Χώρο..................................................................................150

8.1 Γραφικές παραστάσεις καµπυλών ...........................................150 8.1.1 Πολλαπλές καµπύλες..........................................................151

8.2 Γραφικές παραστάσεις επιφανειών..........................................153 8.3 Γραφικές παραστάσεις µε την εντολή mesh ............................153

8.3.1 Εντολή meshc .....................................................................155 8.4 Γραφικές παραστάσεις µε την εντολή surf ..............................156

8.4.1 Εντολή surfc .......................................................................158 8.4.2 Εντολή surfl ........................................................................159

8.5 Γραφήµατα µε ισοϋψείς ...........................................................160 8.5.1 Γράφηµα µε ισοϋψείς στο επίπεδο .....................................160

Page 11: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Περιεχόµενα

11

8.5.2 Τρισδιάστατο γράφηµα µε ισοϋψείς .................................. 161 8.6 Γραφική αναπαράσταση λίστας .............................................. 162

8.6.1 Χρωµατική αναπαράσταση ................................................ 163 8.6.2 Αναπαράσταση στις τρεις διαστάσεις ................................ 164

8.7 Γραφική αναπαράσταση διανυσµατικών πεδίων .................... 165 8.8 Γραφική παράσταση συνάρτησης ........................................... 166

8.8.1 Εντολή ezplot3 ................................................................... 166 8.8.2 Εντολή ezmesh................................................................... 167 8.8.3 Εντολή ezsurf ..................................................................... 168 8.8.4 Εντολή ezcontour ............................................................... 169

ΚΕΦΑΛΑΙΟ 9......................................................................................... 172 Γραµµική Άλγεβρα - Μήτρες ................................................................ 172

9.1 Πράξεις µε ανύσµατα στο καρτεσιανό σύστηµα..................... 173 9.2 Πράξεις µε µήτρες ................................................................... 175 9.3 Λύση γραµµικών συστηµάτων ................................................ 185 9.4 Ιδιοτιµές και Ιδιοανύσµατα µητρών ........................................ 188

ΚΕΦΑΛΑΙΟ 10....................................................................................... 191 Ανάλυση µε το MATLAB ...................................................................... 191

10.1 Πολυώνυµα............................................................................ 191 10.1.1 Συµβολισµός πολυωνύµων .............................................. 191 10.1.2 Άθροισµα πολυωνύµων.................................................... 192 10.1.3 Γινόµενο πολυωνύµων ..................................................... 193 10.1.4 Ρίζες πολυωνύµου ............................................................ 193 10.1.5 Υπολογισµός τιµών πολυωνύµου .................................... 195 10.1.6 Παράγωγοι και ολοκληρώµατα πολυωνύµων.................. 195 10.1.7 Προσαρµογή δεδοµένων µε πολυώνυµο.......................... 196

10.2 Εντοπισµός ρίζας συνάρτησης .............................................. 198 10.3 Τοπικά ακρότατα συναρτήσεων ............................................ 200

10.3.1 Τοπικό ελάχιστο ............................................................... 200 10.3.2 Τοπικό µέγιστο................................................................. 201

10.4 Αριθµητική ολοκλήρωση ...................................................... 202 10.4.1 Υπολογισµός ολοκληρώµατος από δεδοµένα .................. 202

Page 12: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Πρακτικός Οδηγός στο MATLAB

12

10.4.2 Υπολογισµός ολοκληρώµατος συνάρτησης .....................203 10.5 Παρεµβολή σε µία διάσταση (Interpolation) .........................204

10.5.1 Τµηµατικά πολυώνυµα παρεµβολής ................................208 10.5.2 Υπολογισµός παραγώγων και ολοκληρωµάτων...............209

10.6 ∆ιακριτός µετασχηµατισµός Fourier .....................................211 10.6.1 ∆ιεκπεραίωση του µετασχηµατισµού...............................213 10.6.2 Εφαρµογή .........................................................................214

10.7 Αριθµητικές λύσεις διαφορικών εξισώσεων..........................216 Βιβλιογραφία ...........................................................................................217 Ευρετήριο ................................................................................................219

Ευρετήριο........................................................................................219

Page 13: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

13

ΚΕΦΑΛΑΙΟ 1

Εισαγωγικές Έννοιες

1.1 Εισαγωγή Μετά από την αλµατώδη ανάπτυξη των ηλεκτρονικών υπολογιστών, και την ευρεία χρήση τους σε όλα σχεδόν τα πεδία, καθίσταται πλέον επιτακτική η γνώση βασικών γλωσσών προγραµµατισµού. Η επιλογή τους είναι µια διαδικασία για την οποία υπάρχουν πολλές και αντικρουόµενες απόψεις, και η απάντηση στο ερώτηµα αυτό εξαρτάται σε µεγάλο βαθµό και από το επιστηµονικό πεδίο στο οποίο αυτές θα χρησιµοποιηθούν. Σε γενικές γραµµές, η σύγχρονη προσέγγιση στο θέµα είναι να επιλέγονται γλώσσες που να είναι φιλικές στο χρήστη, και έτσι να γίνονται ελκυστικές στο σύνολο σχεδόν των φοιτητών του κλάδου, και όχι µόνο σε µια µικρή µειονότητα απ’ αυτούς που τυχαίνει να έχουν ιδιαίτερο ενδιαφέρον για τους υπολογιστές. Οι γλώσσες προγραµµατισµού που ικανοποιούν το παραπάνω κριτήριο µπορούν να χωριστούν γενικά σε δύο κατηγορίες, σ’ αυτές που στη βάση τους είναι γλώσσες αριθµητικού προγραµµατισµού, και σ’ αυτές που είναι αλγεβρικού. Ο στόχος των δύο αυτών κατηγοριών είναι διαφορετικός, πράγµα που καθιστά αναγκαία την εκµάθηση τουλάχιστον µιας γλώσσας από την κάθε µια κατηγορία. Κύριος στόχος των γλωσσών αλγεβρικού προγραµ-µατισµού είναι οι αναλυτικές πράξεις, ενώ του αριθµητικού οι αριθµητικές. Από τις πιο διαδεδοµένες γλώσσες αριθµητικού προγραµµατισµού είναι το πρόγραµµα MATLAB, ενώ αλγεβρικού η Mathematica.

Τέλος πρέπει να αναφερθεί ότι στα προγράµµατα MATLAB και Mathematica υπάρχει µια πολύ µεγάλη ποικιλία εσωτερικών συναρτήσεων

Page 14: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Εισαγωγικές Έννοιες

14

που προσφέρονται για άµεση χρήση προς εκτέλεση συγκεκριµένων υπολο-γισµών. Πρέπει όµως να τονισθεί, ότι τα προγράµµατα αυτά δεν είναι απλώς συλλογές έτοιµων συναρτήσεων, αλλά πλήρεις γλώσσες προγραµµατισµού, στις οποίες υπάρχει η δυνατότητα ανάπτυξης νέων συναρτήσεων και προγραµµάτων, που δεν έχουν εκ των προτέρων προβλεφθεί, για την εκτέλεση υπολογισµών της επιλογής του χρήστη.

Σκοπός του παρόντος βιβλίου είναι να ενηµερώσει τον αναγνώστη για τις δυνατότητες και τη χρησιµότητα του MATLAB, και να τον βοηθήσει στην εκµάθηση των βασικών του σηµείων. Η έκδοση που θα παρουσιαστεί είναι αυτή που εγκαθίσταται στο λειτουργικό σύστηµα των WINDOWS. Οι εκδόσεις του MATLAB που εγκαθίστανται πάνω σε άλλα λειτουργικά συστήµατα λειτουργούν σε γενικές γραµµές µε παρόµοιο τρόπο.

Εκκίνηση του MATLAB. Η εκκίνηση του MATLAB γίνεται µε διπλό πάτηµα του αριστερού πλήκτρου του «ποντικιού» πάνω στο αντίστοιχο εικονίδιο.

Παράθυρο διαχείρισης (Command Window) του MATLAB. Με την εκκίνηση του προγράµµατος, εµφανίζεται το παράθυρο διαχείρισης (Command Window) του MATLAB. Μέσα στο παράθυρο αυτό, γράφονται οι εντολές, δίνεται η εντολή εκτέλεσης τους, και εµφανίζονται τα αποτελέσµατα των πράξεων, δηλαδή γίνονται όλες οι αλληλεπιδράσεις του χρήστη µε το πρόγραµµα.

Βασικός χώρος λειτουργίας (Workspace) του MATLAB. Ο χώρος διεκπεραίωσης των πράξεων είναι ο βασικός χώρος λειτουργίας του προγράµµατος (Workspace). Ο χώρος αυτός βρίσκεται στη µνήµη του υπολογιστή, και µέσα σ’ αυτόν εκτελούνται οι πράξεις και ταυτόχρονα διατηρούνται όλα τα αποτελέσµατα τους, µε σκοπό να µπορούν να χρησιµο-ποιηθούν σε επόµενες πράξεις.

Έξοδος από το πρόγραµµα: Η έξοδος από το πρόγραµµα γίνεται είτε µε την επιλογή, µε το αριστερό πλήκτρο του «ποντικιού», της εντολής File του µενού και κατόπιν της εντολής Exit της πινακίδας που θα εµφανιστεί, είτε µε ταυτόχρονο πάτηµα των πλήκτρων Ctrl → Q του πληκτρολογίου.

Page 15: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

1.2 Βασικές πράξεις

15

1.2 Βασικές πράξεις Οι βασικές πράξεις στο MATLAB, και τα σύµβολα (τελεστές) που χρησιµοποιούνται για την εκτέλεση τους, είναι οι γνωστές πράξεις από τα µαθηµατικά, που δηλώνονται παρακάτω: Αριθµητικοί τελεστές

Πράξη Σχεσιακοί τελεστές

Πράξη

+ συν == ίσον σύγκρισης - πλην < µικρότερο * επί <= µικρότερο ή ίσο / ή \ διά > µεγαλύτερο ^ δύναµη >= µεγαλύτερο ή ίσο = ίσον ανάθεσης ~= όχι ίσο

Με τους αριθµητικούς τελεστές εκτελούνται οι γνωστές από την αριθµητική πράξεις, ενώ µε τους σχεσιακούς τελεστές γίνεται σύγκριση µεταξύ δύο ποσοτήτων. (Προσοχή, ο σχεσιακός τελεστής της ισότητας δηλώνεται µε διπλό ίσον, ==). Η σηµασία των τελεστών αυτών και ο τρόπος χρήσης τους µε αντίστοιχα παραδείγµατα εφαρµογής τους, αναλύεται στις επόµενες παραγράφους.

1.2.1 Αριθµητικές πράξεις Με την έναρξη του προγράµµατος, όπως και µετά τη διεκπεραίωση κάθε

µιας εντολής, εµφανίζεται στην οθόνη το διπλό σύµβολο >> , που δηλώνει ότι το πρόγραµµα είναι έτοιµο να δεχθεί για εκτέλεση την επόµενη εντολή. Αφού γράψουµε την εντολή, χρησιµοποιώντας πάντοτε αριθµητικούς τελεστές που δηλώνουν τις πράξεις µεταξύ των αριθµών, από αυτούς που αναφέραµε στη παράγραφο 1.2, εκτελούµε την πράξη µε το πάτηµα του πλήκτρου Enter , π.χ. >> 2+7 Enter

Page 16: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Εισαγωγικές Έννοιες

16

Μετά την εκτέλεση της εντολής, εµφανίζεται στην οθόνη το παρακάτω µήνυµα ans = 9

που δηλώνει την απάντηση (answer) του προγράµµατος στην εντολή που δόθηκε. Παραδείγµατα >> 8-4 ans = 4 >> 3*62 ans = 186 >> 24/7 ans = 3.4286 >> 2^3.1 ans = 8.5742 >> 231/27.5 ans = 8.4000 >> (2+3.7/6.5)/(3^3.6+1/3) ans = 0.0489

Στο MATLAB µπορούµε να εκτελέσουµε τη διαίρεση και µε το σύµβολο \ , γράφοντας δηλαδή πρώτα το διαιρέτη και µετά το διαιρετέο, όπως φαίνεται στο επόµενο παράδειγµα,

Page 17: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

1.2 Βασικές πράξεις

17

>> (3^3.6+1/3)\(2+3.7/6.5) ans = 0.0489

Για αριθµητικές πράξεις, το αποτέλεσµα της διαίρεσης είναι το ίδιο είτε γίνει µε τη χρήση του συµβόλου / , είτε του \ , δε συµβαίνει όµως το ίδιο και στις πράξεις µε µήτρες, όπως θα δούµε στο κεφάλαιο 9. Προτεραιότητα πράξεων Το MATLAB εκτελεί τις αριθµητικές πράξεις µε τη χρήση δεκαδικών αριθµών, και δίνει το αποτέλεσµα επίσης σε µορφή δεκαδικού αριθµού. Για τη διατύπωση της εντολής, µπορούµε να χρησιµοποιούµε παρενθέσεις οι οποίες οµαδοποιούν τις πράξεις, όπως ακριβώς γίνεται και στα µαθηµατικά. Όταν δεν υπάρχουν παρενθέσεις, οι πράξεις που περιέχοντα σε µια εντολή εκτελούνται µε προτεραιότητα, από αριστερά στα δεξιά, και µε πρώτη προτεραιότητα την εκτέλεση των δυνάµεων, µετά και σε ίση προτεραιότητα τους πολλαπλασιασµούς και διαιρέσεις, και τέλος τα αθροίσµατα και τις διαφορές. Μιγαδικοί αριθµοί Με το MATLAB µπορούµε επίσης να εκτελέσουµε πράξεις µε µιγαδικούς αριθµούς. Για το σύµβολο της µιγαδικής µονάδας, −1 , χρησιµοποιείται είτε το γράµµα του Αγγλικού αλφαβήτου i , είτε το j , π.χ. >> (2.8+5.9*i)/(37+71.2i) ans = 0.0813 + 0.0029i >> (2.8+5.9*j)/(37+71.2j) ans = 0.0813 + 0.0029i >> (2+5*i)^5/(3+11*i)^3 ans = -1.3757 + 2.7283i

Page 18: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Εισαγωγικές Έννοιες

18

Σχόλια: (1) Σηµειώστε ότι το σύµβολο της υποδιαστολής είναι, σύµφωνα µε το διεθνή συµβολισµό τον οποίο ακολουθεί το MATLAB στην εκτέλεση των πράξεων, η τελεία και όχι το κόµµα. (2) Όταν µια εντολή έχει συνταχθεί λάθος, τότε το πρόγραµµα απαντά µε διαγνωστικό µήνυµα που σκοπό έχει να µας βοηθήσει στη διόρθωση της, π.χ. >> (2+3.7/6.5)/(3^3.6+1/3 ??? (2+3.7/6.5)/(3^3.6+1/3 | Error: Expression or statement is incorrect--possibly unbalanced (, , or [.

(3) Οι εντολές που εκτελούνται δηλώνονται στο αρχείο καταχώρησης εντολών (Command History) του προγράµµατος, και έτσι έχουµε την ευχέρεια να επαναφέρουµε για εκτέλεση µια εντολή που προγενέστερα έχει εκτελεστεί, µε τη χρήση των πλήκτρων ↑ και ↓. Μετά από την επαναφορά µιας εντολής µέσα στο παράθυρο διαχείρισης, έχουµε τη δυνατότητα πρώτα να την τροποποιήσουµε και µετά να την εκτελέσουµε. (4) Οι δεκαδικοί αριθµοί καταχωρούνται στη µνήµη του MATLAB 7 µε το πρόσηµο τους, δεκαέξι κύρια ψηφία, και τη δύναµη του εκθέτη, και εκτελούνται µε ακρίβεια δεκαέξι ψηφίων.

1.2.2 Πράξεις σύγκρισης- Λογικές εντολές Οι πράξεις σύγκρισης εκτελούνται µε τη χρήση σχεσιακών τελεστών.

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

Page 19: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

1.2 Βασικές πράξεις

19

>> 7>3 ans = 1 >> 7<=4 ans = 0 >> 2^3==8 ans = 1 >> 3^2~=9 ans = 0

1.2.3 Εντολή απόκρυψης Όταν δοθεί προς εκτέλεση µια εντολή που τελειώνει µε το σύµβολο του

Αγγλικού αλφαβήτου ; , που είναι ο τελεστής απόκρυψης του αποτελέσµατος, τότε η εντολή εκτελείται και αποθηκεύεται στη µνήµη του συστήµατος, αλλά το αποτέλεσµα δεν εµφανίζεται στην οθόνη, π.χ. >> (2.6+1/3.3)*(37+i*82.6)/(23/47+7.3*i/73.9);

Η επιλογή αυτή είναι πολύ χρήσιµη σε περιπτώσεις που το αποτέλεσµα είναι εκτεταµένο και δε θέλουµε να εµφανιστεί στην οθόνη, όπως π.χ. στην περίπτωση ενός πίνακα µεγάλων διαστάσεων. Σχόλιο: Στα επόµενα παραδείγµατα, παραλείπεται, χάριν συντοµίας, το σύµβολο προτροπής, >>, που εµφανίζεται στην αρχή κάθε εντολής.

Page 20: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Εισαγωγικές Έννοιες

20

1.3 Μαθηµατικές σταθερές και παράµετροι Στο MATLAB υπάρχει ένας περιορισµένος αριθµός µαθηµατικών σταθερών, καταχωρηµένων ήδη στο πρόγραµµα, και µε προκαθορισµένη την αριθµητική τους τιµή. Θα αναφέρουµε τις πιο χρήσιµες απ’ αυτές: (1) Η µαθηµατική σταθερά π, 3.14159...π . Η ποσότητα αυτή έχει καταχωρηθεί στη παράµετρο pi, και εισάγεται στις αντίστοιχες πράξεις µε τη χρήση της παραµέτρου αυτής. ∆ηλαδή, πράξεις στις οποίες περιέχεται η σταθερή pi εκτελούνται µε την απόδοση σ’ αυτήν της αριθµητικής της τιµής, π.χ. pi^2 ans = 9.8696 pi*2.5^2 ans = 19.6350

(2) Μια δεύτερη µαθηµατική σταθερά είναι η ποσότητα ∞, η οποία είναι καταχωρηµένη στην παράµετρο inf. 1/inf ans = 0 1/0 Warning: Divide by zero. ans = Inf

(3) Τέλος αναφέρουµε την παράµετρο NaN (Not a Number), που χρησιµο-ποιείται για να δηλώσει ότι το αποτελέσµατα µιας πράξης δεν είναι αριθµός, όπως π.χ. το αποτέλεσµα σε πράξεις της µορφής 0/0, ∞/∞, 0/0 Warning: Divide by zero.

Page 21: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

1.3 Μαθηµατικές σταθερές και παράµετροι

21

ans = NaN inf/inf ans = NaN

Εκτός από τις παραπάνω µαθηµατικές σταθερές, έχουν εισαχθεί στο MATLAB και µερικές παράµετροι που σχετίζονται µε τον τρόπο δόµησης του. Οι ποσότητες αυτές µπορούν να χρησιµοποιηθούν, όπως και οι µαθηµατικές σταθερές, µε τη δήλωση του ονόµατος τους. Οι πιο χρήσιµες απ’ αυτές είναι,

(1) Η παράµετρος realmax που δηλώνει το µεγαλύτερο θετικό αριθµό που µπορεί να χρησιµοποιηθεί στο MATLAB για πράξεις, realmax ans = 1.7977e+308

Ο συµβολισµός e+308 δηλώνει τον εκθέτη (exponent) µε βάση το δέκα, δηλαδή 308308 10e + ≡ για την παραπάνω περίπτωση. (2) Η παράµετρος realmin που δηλώνει το µικρότερο θετικό αριθµό που µπορεί να χρησιµοποιηθεί στο MATLAB για πράξεις, realmin ans = 2.2251e-308

1.3.1 Εισαγωγή νέων παραµέτρων - Εντολή ανάθεσης Στο MATLAB, όπως και στα περισσότερα προγράµµατα, µπορεί ο

χρήστης να ορίσει τις παραµέτρους της αρεσκείας του. Η εισαγωγή τους γίνεται µε τον καθορισµό του ονόµατος τους, και την απόδοση σ’ αυτό συγκεκριµένης ποσότητας, που γίνεται µε την εντολή της ανάθεσης, χρησι-µοποιώντας το σύµβολο της ισότητας, =,

name = value

Page 22: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Εισαγωγικές Έννοιες

22

Το όνοµα, name, µιας παραµέτρου µπορεί να περιέχει ένα ή περισσότερα γράµµατα ή αριθµούς, αλλά το πρώτο στοιχείο πρέπει απαραίτητα να είναι γράµµα. Επίσης, µέσα στο όνοµα δεν επιτρέπεται να περιλαµβάνονται κενά. Τέλος η ποσότητα value, µπορεί να είναι είτε αριθµός είτε συµβολοσειρά (δηλαδή κείµενο). Στην περίπτωση της συµβολοσειράς, το κείµενο τοποθε-τείται µέσα σε εισαγωγικά του Αγγλικού αλφαβήτου. Περισσότερες πληροφορίες για συµβολοσειρές δίνονται στο κεφάλαιο 3.

Οι πρόσθετες παράµετροι, που εισάγονται µε τον παραπάνω τρόπο, ισχύουν µόνο για την τρέχουσα εκτέλεση του προγράµµατος, και χάνονται µε τον τερµατισµό της. Σε επόµενη εκτέλεση, θα πρέπει να οριστούν ξανά, σε αντίθεση µε τις µόνιµες παραµέτρους που είδαµε στην προηγούµενη παράγραφο. Παραδείγµατα αριθµητικών παραµέτρων x=2.1, y=7/3 x = 2.1000 y = 2.3333 z=x*y z = 4.9000 x*y*sin(z) ans = -4.8140

Στο παραπάνω παράδειγµα ορίσθηκαν οι παράµετροι x και y, κατόπιν ορίσθηκε η παράµετρος z, και τέλος αξιοποιήθηκαν όλες για την εκτέλεση ενός υπολογισµού.

Page 23: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

1.4 Εσωτερικές συναρτήσεις

23

1.4 Εσωτερικές συναρτήσεις Εκτός από τις αριθµητικές σταθερές, στο MATLAB υπάρχει µια πολύ µεγάλη συλλογή εσωτερικών συναρτήσεων, που µπορούν να χρησιµοποιηθούν για εκτέλεση πράξεων. Στο MATLAB, ο γενικός τρόπος εκτέλεσης µιας συνάρτησης είναι η κλήση της, µε τη δήλωση του ονόµατος της, και την τοποθέτηση του ορίσµατος της µέσα σε παρένθεση, π.χ.

function(argument) που συνεπάγεται τον υπολογισµό της συνάρτησης function, µε το όρισµα της ίσο µε το argument.

Από τις εσωτερικές συναρτήσεις του MATLAB, οι πιο χρήσιµες είναι οι παρακάτω: sqrt(x) Τετραγωνική ρίζα, x

log(x) Λογαριθµική συνάρτηση (Νεπέριος λογάριθµος του x)

exp(x) Εκθετική συνάρτηση, xe

cos(x), sin(x), tan(x) Τριγωνοµετρικές συναρτήσεις (όρισµα σε ακτίνια)

cosd(x), sind(x), tand(x) Τριγωνοµετρικές συναρτήσεις (όρισµα σε µοίρες)

acos(x), asin(x), atan(x) Αντίστροφες τριγωνοµετρικές συναρτήσεις (σε ακτίνα)

acosd(x), asind(x), atand(x) Αντίστροφες τριγωνοµετρικές συναρτήσεις (σε µοίρες)

cosh(x), sinh(x), tanh(x) Υπερβολικές συναρτήσεις

αcosh(x), asinh(x), atanh(x) Αντίστροφες υπερβολικές συναρτήσεις

real(z), imag(z) Πραγµατικό και φανταστικό µέρος ενός µιγαδικού αριθµού, z

angle(z) Γωνία φάσεως µιγαδικού αριθµού abs(z) Απόλυτη τιµή (µέτρο) ενός αριθµού conj(z) Συζυγής µιγαδικού αριθµού

Page 24: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Εισαγωγικές Έννοιες

24

max([x, y, …]) Το µεγαλύτερο στοιχείο της λίστας [x, y, …]

min([x, y, …]) Το µικρότερο στοιχείο της λίστας [x, y, …]

mod(x, y) Υπολογίζει το υπόλοιπο της ακέραιας διαίρεσης του x δια του y.

rand, randn ∆ηµιουργία τυχαίων αριθµών.

eps(x) Αποδίδει την ακρίβεια µε την οποία αποθηκεύεται ο αριθµός x.

Παραδείγµατα Μερικές εφαρµογές των παραπάνω συναρτήσεων δίνονται παρακάτω sqrt(2) ans = 1.4142 sin(3.1) ans = 0.0416 acos(0.71) ans = 0.7813 tan(pi/4) ans = 1.0000 exp(1) ans = 2.7183 mod(23,5) ans = 3

Page 25: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

1.4 Εσωτερικές συναρτήσεις

25

Συνάρτηση rand Η συνάρτηση rand µπορεί να κληθεί και χωρίς όρισµα, και χρησιµοποιείται για τη δηµιουργία τυχαίων πραγµατικών αριθµών οµοιόµορφα κατανε-µηµένων στο διάστηµα [0, 1], µε τρόπο παρόµοιο όπως και στο γνωστό σε όλους µας ζάρι. Κάθε φορά που καλείται παράγει και διαφορετικό αριθµό, όπως και το ζάρι δίνει διαφορετικό αποτέλεσµα κάθε φορά που ρίχνεται, π.χ.

rand ans = 0.9501 rand ans = 0.2311 rand ans = 0.6068

Συνάρτηση randn Η συνάρτηση randn µπορεί να κληθεί και χωρίς όρισµα, και χρησιµοποιείται για τη δηµιουργία τυχαίων πραγµατικών αριθµών που ακολουθούν τη κανονική κατανοµή Ν(0, 1), δηλαδή µε µέση τιµή της κατανοµής ίση µε το µηδέν και διασπορά τη µονάδα. Κάθε φορά που καλείται παράγει και διαφορετικό αριθµό, όπως π.χ.

randn ans = -1.6656 randn ans = 0.1253 randn ans = 0.2877

Page 26: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Εισαγωγικές Έννοιες

26

Συνάρτηση eps(x) Η παράµετρος eps(x) προσδιορίζει την ακρίβεια µε την οποία αποθηκεύεται ο αριθµός x στη µνήµη του υπολογιστή, όπως π.χ. eps(1) ans = 2.2204e-016 eps(realmax) ans = 1.9958e+292 eps(realmin) ans = 4.9407e-324 eps(0) ans = 4.9407e-324

1.4.1 Γενικές παρατηρήσεις Α) Όρισµα τριγωνοµετρικών συναρτήσεων Σηµειώστε ότι στο MATLAB ορίζονται τριγωνοµετρικές συναρτήσεις

µε όρισµα τόσο σε ακτίνια όσο και σε µοίρες. Τα ονόµατα των τριγωνοµε-τρικών συναρτήσεων είναι διαφορετικά για τις δύο αυτές περιπτώσεις. Στο όνοµα της συνάρτησης προστίθεται το γράµµα d (degree), όταν το όρισµα της είναι σε µοίρες. sin(pi/7) ans = 0.4339 cos(2*pi/7) ans = 0.6235 tand(45)

Page 27: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

1.5 ∆ιαγραφή παραµέτρων

27

ans = 1.0000 sind(135) ans = 0.7071

Β) Μικρά και κεφαλαία γράµµατα Τέλος, το MATLAB, από την έκδοση 7, ξεχωρίζει τα µικρά από τα

κεφαλαία γράµµατα, γεγονός που συνεπάγεται ότι όταν µικρά γράµµατα µιας εντολής γίνουν κεφαλαία (και αντίστροφα), τότε η εντολή αυτή δεν είναι αναγνωρίσιµη από το MATLAB και δεν εκτελείται, π.χ. η εντολή Log(12.5) είναι διαφορετική από την log(12.5), και δεν υπάρχει ως εσωτερική συνάρτηση, Log(2.2) ??? Undefined function or method 'Log' for input arguments of type 'double'. log(2.2) ans = 0.7885

1.5 ∆ιαγραφή παραµέτρων Όλες οι παράµετροι που εισάγονται στο πρόγραµµα καταχωρούνται στο χώρο λειτουργίας του προγράµµατος (workspace), και µπορούν να χρησιµοποιηθούν στους επόµενους υπολογισµούς µε τρόπο αντίστοιχο µε αυτόν που χρησιµοποιούνται και οι συναρτήσεις. Έχουµε επίσης τη δυνατότητα να διαγράψουµε από τη µνήµη του υπολογιστή τόσο µεταβλητές όσο και συναρτήσεις µε τη χρήση της κατάλληλης εντολής. Οι εντολές που υπάρχουν για το σκοπό αυτό είναι οι ακόλουθες, clear ∆ιαγράφει όλες τις µεταβλητές από το workspace clear variable Έχει το ίδιο αποτέλεσµα µε την προηγούµενη εντολή clear global ∆ιαγράφει όλες τις global µεταβλητές

Page 28: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Εισαγωγικές Έννοιες

28

clear function ∆ιαγράφει όλες τις µορφοποιηµένες συναρτήσεις clear all ∆ιαγράφει όλες τις µεταβλητές και όλες τις µορφοποι-

ηµένες συναρτήσεις Για τη διαγραφή του περιεχοµένου των υπόλοιπων παραθύρων, χρησιµο-ποιούνται οι επιλογές που εµφανίζονται µε το πάτηµα του δεξιού πλήκτρου του «ποντικιού» στο αντίστοιχο παράθυρο. 1.6 Σύνθετες εντολές Μέχρι τώρα αντιµετωπίσαµε απλές εντολές, µε καθεµιά απ’ αυτές να γράφεται σε µια µόνο γραµµή. Έχουµε όµως τη δυνατότητα να συντάξουµε εντολές που δεν µπορούν να αποδοθούν µε µία µόνο γραµµή, ή να δώσουµε ταυτόχρονα για εκτέλεση περισσότερες από µια εντολές. Στην πρώτη περίπτωση συνεχίζουµε την εντολή στην επόµενη γραµµή, ενώ στη δεύτερη συντάσσουµε µια σύνθετη εντολή.

1) Συνέχιση µιας εντολής Όταν µια εντολή δεν µπορεί να αποδοθεί µε µια µόνο γραµµή, τότε

µπορούµε να τη συνεχίσουµε στην επόµενη γραµµή, τοποθετώντας τρεις τελείες στο σηµείο που γίνεται η διακοπή της εντολής, π.χ. (2+sqrt(11+3/7))... /(3+sin(21/85)) ans = 1.6584 (2+sqrt(11+3/7))/(3+sin(21/85)) ans = 1.6584

2) Σύνθετη εντολή Στη σύνθετη εντολή δίνουµε για εκτέλεση περισσότερες από µια

εντολές, που συντάσσονται σε µια µόνο γραµµή. Οι επιµέρους εντολές διαχωρίζονται µεταξύ τους µε ένα από τα Αγγλικά σύµβολα , , ή ; . Στη

Page 29: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

1.7 Μ - Αρχεία Εντολών

29

δεύτερη περίπτωση τo αποτέλεσµα της πράξης δεν εµφανίζεται στην οθόνη, διότι το σύµβολο ; είναι και τελεστής απόκρυψης, π.χ. 2/3,4^2,1/6 ans = 0.6667 ans = 16 ans = 0.1667 2/3;4^2;1/6;

1.7 Μ - Αρχεία Εντολών Για την εκτέλεση των υπολογισµών που παρουσιάστηκαν στις προηγούµενες παραγράφους, έγινε η σύνταξη και η εκτέλεση της αντίστοιχης εντολής µέσα από το παράθυρο διαχείρισης του MATLAB. Σε µια τέτοια διαδικασία όµως, επανέναρξη του MATLAB θα απαιτούσε την ανασύνταξη των εντολών για την εκτέλεση των πράξεων, πράγµα που είναι µια χρονοβόρα διαδικασία. Εµφανίζεται, επίσης, σε µερικές περιπτώσεις η αναγκαιότητα επανάληψης της εκτέλεσης µιας οµάδας εντολών, µετά από ενδεχόµενη τροποποίηση των αριθµητικών τιµών µερικών παραµέτρων. Για να διευκολυνθούν οι παραπάνω διαδικασίες, θα πρέπει να γίνεται αποθήκευση των εντολών αυτών σ’ ένα αρχείο, το οποίο θα καλείται από το παράθυρο διαχείρισης για να εκτελεστούν οι ζητούµενοι υπολογισµοί. Τα αρχεία αυτά καλούνται αρχεία εντολών (script files), και επειδή πρέπει υποχρεωτικά να τους αποδοθεί ένα όνοµα που να έχει την κατάληξη .m, καλούνται επίσης και Μ-αρχεία εντολών.

Η βασικότερη ιδιότητα των Μ-αρχείων εντολών είναι ότι η κλήση τους ισοδυναµεί µε εκτέλεση των εντολών που περιέχουν µέσα από το παράθυρο διαχείρισης (χωρίς υποχρεωτικά να γίνεται και η εκτύπωση τους σ’ αυτό). Η συνέπεια µιας τέτοιας λειτουργίας είναι ότι οι εντολές των Μ-αρχείων εκτελούνται µέσα στο βασικό χώρο λειτουργίας του MATLAB,

Page 30: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Εισαγωγικές Έννοιες

30

όπως και οι εντολές που δίνονται από το παράθυρο διαχείρισης. Εποµένως, µπορούν να αξιοποιούν όλα τα αποτελέσµατα που βρίσκονται ήδη αποθηκευµένα µέσα στο χώρο αυτό, και αντιστρόφως, τα αποτελέσµατα που παράγουν µε την εκτέλεση τους αποθηκεύονται στο βασικό χώρο λειτουργίας του προγράµµατος, και έτσι µπορούν να αξιοποιηθούν από µετέπειτα υπολογισµούς µε εντολές µέσα από το παράθυρο διαχείρισης του MATLAB.

Για τη σύνταξη ενός Μ-αρχείου πρέπει να χρησιµοποιηθεί ένας κειµενογράφος ASCII (editor), όπως π.χ. ο κειµενογράφος του MATLAB, η εκκίνηση του οποίου γίνεται από τη διεύθυνση File New M-file. Μέσα στο παράθυρο που εµφανίζεται, συντάσσονται οι εντολές, όπως ακριβώς θα συντάσσονταν και µέσα στο παράθυρο διαχείρισης του MATLAB. Τα αρχεία αυτά αποθηκεύονται µέσα στην ενεργό διεύθυνση αποθήκευσης του MATLAB, ώστε να υπάρχει η δυνατότητα άµεσης εκτέλεσης τους, µε την κλήση του ονόµατος τους.

Παράδειγµα Το παρακάτω παράδειγµα δίνει ένα Μ-αρχείο εντολών, το οποίο είναι αποθηκευµένο µε το όνοµα example1.m, για τον υπολογισµό του µήκους της διαδροµής που διανύει ένα κινητό µε σταθερή ταχύτητα, σε δοσµένο χρόνο. Το αρχείο αυτό είναι αποθηκευµένο στη διεύθυνση λειτουργίας του προγράµµατος, velocity=50; travelingtime=60; distance=velocity*travelingtime; distance

Η κλήση του αρχείου µε τη χρήση του ονόµατος του, συνεπάγεται την εκτέλεση των εντολών που είναι αποθηκευµένες σ’ αυτό, όπως φαίνεται παρακάτω, >> example1 distance=

Page 31: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

1.7 Μ - Αρχεία Εντολών

31

3000

1.7.1 Εντολή echo Όπως αναφέραµε παραπάνω, η κλήση ενός Μ-αρχείου εντολών δεν

σηµαίνει υποχρεωτικά και την εκτύπωση των εντολών του στο παράθυρο διαχείρισης. Η κλήση της βοηθητικής εντολής echo on, πριν από την κλήση του Μ-αρχείου, επιβάλει και την εκτύπωση των εντολών µέσα στο παράθυρο διαχείρισης, όπως γίνεται π.χ. στο παρακάτω παράδειγµα, >> echo on >> example1 velocity=50; travelingtime=60; distance=velocity*travelingtime; disp('distance= '),disp(distance) distance= 3000 >> echo off

Στο τέλος της διαδικασίας δίνουµε την εντολή echo off, για να επιστρέψει το σύστηµα στην προηγούµενη του κατάσταση.

1.7.2 Κυψελωτή δοµή αρχείου Ένα Μ-αρχείο εντολών µπορεί να χωριστεί σε κυψέλες (cells) µε τη

χρήση του διπλού συµβόλου %%, το οποίο τοποθετείται στην αρχή και το τέλος µιας οµάδας εντολών που θέλουµε να δηλώσουµε ότι αποτελούν µια κυψέλη. Η χρησιµότητα µιας κυψέλης έγκειται στο γεγονός ότι µπορεί να εκτελεστεί ξεχωριστά, µέσα από το κειµενογράφο (editor) του MATLAB, χρησιµοποιώντας το αντίστοιχο εικονίδιο της µπάρας. Με το τρόπο αυτό µπορούµε να εκτελέσουµε ένα µόνο κοµµάτι του προγράµµατος, και να ελέγξουµε σταδιακά το πρόγραµµα. Μια περίπτωση διαχωρισµού σε δύο κυψέλες του προγράµµατος που αναφέρεται στο παράδειγµα της παραγράφου 1.7, δίνεται παρακάτω,

Page 32: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Εισαγωγικές Έννοιες

32

%% echo on velocity=50; travelingtime=60; %% distance=velocity*travelingtime; disp('distance= '),disp(distance) echo off %%

1.8 Προσέγγιση αριθµητικών τιµών Αρκετές φορές, τα δεκαδικά αποτελέσµατα που προκύπτουν από τους υπολογισµούς χρειάζεται να προσεγγιστούν από ένα γειτονικό ακέραιο αριθµό, ή να προσεγγιστούν µε ένα δεκαδικό αριθµό µε λιγότερα ψηφία. Για τις διαδικασίες αυτές υπάρχουν εσωτερικές εντολές, εκ των οποίων οι πιο χρήσιµες δίνονται παρακάτω. Εφαρµογή των εντολών γίνεται µε τη χρήση της παραµέτρου 2 , a=sqrt(2) a = 1.4142

[1] ceil(a), υπολογίζει για την παράµετρο a τον πλησιέστερο προς τα πάνω

ακέραιο αριθµό. ceil(a) ans = 2

[2] floor(a), υπολογίζει για την παράµετρο a τον πλησιέστερο προς τα κάτω

ακέραιο αριθµό.

Page 33: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

1.9 Εντολές διαχείρισης

33

floor(a) ans = 1

[3] fix(a), υπολογίζει για την παράµετρο a τον πλησιέστερο ακέραιο προς

την κατεύθυνση του µηδενός. fix(a) ans = 1

[4] round(a), υπολογίζει τον πλησιέστερο στον α ακέραιο αριθµό. round(a) ans = 1

[5] chop(a, n), προσεγγίζει τον δεκαδικό αριθµό a µε ένα δεκαδικό µε n

ψηφία.

chop(a,3) ans = 1.4100

1.9 Εντολές διαχείρισης Βοήθεια: Μέσα από το παράθυρο διαχείρισης µπορούµε να ζητήσουµε βοήθεια για τον τρόπο εκτέλεσης µιας συνάρτησης ή µιας εντολής, δίνοντας την εντολή

help name όπου name το όνοµα της συνάρτησης ή της εντολής για την οποία ζητάµε βοήθεια, π.χ. help log

Page 34: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Εισαγωγικές Έννοιες

34

LOG Natural logarithm. LOG(X) is the natural logarithm of the elements of X. Complex results are produced if X is not positive.

Το MATLAB διαθέτει επίσης εκτεταµένο ηλεκτρονικό βοήθηµα που

περιγράφει τη χρήση του. Το βοήθηµα εµφανίζεται σε ξεχωριστό παράθυρο, πατώντας το πλήκτρο F1. Στο παράθυρο αυτό υπάρχει τόσο αλφαβητικό ευρετήριο όσο και πίνακας περιεχοµένων, απ’ όπου µπορούν να αναζητηθούν πληροφορίες για µια συνάρτηση ή εντολή.

Εισαγωγή σχολίων: Σ’ ένα αρχείο εντολών µπορούµε να εισάγουµε σχόλια, που θα υπενθυµίζουν στο χρήστη τη σκοπιµότητα και δοµή του προγράµµατος. Οι εντολές αυτές δεν είναι εκτελέσιµες από το πρόγραµµα. Ένας τρόπος για να γίνει αυτό είναι µε την εισαγωγή του συµβόλου % στο σηµείο απ’ όπου αρχίζει το σχόλιο (στην αρχή ή στο µέσο µιας γραµµής) και την επανάληψη του στην αρχή κάθε επόµενης γραµµής που περιέχει σχόλια, όπως γίνεται στο επόµενο παράδειγµα, % This is an M-file, with the name example1.m, % for the calculation of the traveled distance. % velocity=50; travelingtime=60; distance=velocity*travelingtime; disp('distance= '),disp(distance)

Όταν όµως ένα σχόλιο εκτείνεται σε περισσότερες από µία γραµµές,

µπορούµε µεν να το εισάγουµε µε τον τρόπο που ορίσαµε παραπάνω, όµως η διαδικασία να τοποθετούµε το σύµβολο % στην αρχή κάθε µιας γραµµής δεν είναι η πιο εύχρηστη. Ένας δεύτερος τρόπος εισαγωγής γίνεται µε την τοποθέτηση του διπλού συµβόλου % στην πρώτη γραµµή του σχολίου, ως µοναδικό περιεχόµενο της γραµµής αυτής, και του % στην τελευταία γραµµή, πάλι ως µοναδικό περιεχόµενο της γραµµής αυτής, όπως π.χ. γίνεται στο επόµενο παράδειγµα,

Page 35: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

1.9 Εντολές διαχείρισης

35

% This is an M-file, with the name example1.m, for the calculation of the traveled distance. % velocity=50; travelingtime=60; distance=velocity*travelingtime; disp('distance= '),disp(distance)

∆ιακοπή εκτέλεσης: Μπορούµε να διακόψουµε την εκτέλεση µιας εντολής πατώντας ταυτόχρονα Ctrlt→ C.

Εκτύπωση αποτελεσµάτων: Μπορούµε να εκτυπώσουµε στην οθόνη την τιµή µιας παραµέτρου x, χρησιµοποιώντας την εντολή

disp(x) Παράδειγµα a = 3.2400 disp(a) 3.2400

∆ιαγραφή οθόνης: Μπορούµε να διαγράψουµε το περιεχόµενο του παρά-θυρου διαχείρισης µε την εντολή

clc

Page 36: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

ΚΕΦΑΛΑΙΟ 2

36

ΚΕΦΑΛΑΙΟ 2

Λίστες

Η λίστα (πίνακας) είναι ένα από τα βασικά εργαλεία του MATLAB, και µπορεί να χρησιµοποιηθεί για την αποθήκευση δεδοµένων υπό µορφή λογιστικού πίνακα, την αναπαράσταση αλγεβρικών µητρών, και την εκτέλεση µαθηµατικών πράξεων. Οι πράξεις που µπορούν να γίνουν µε τη χρήση µιας λίστας είναι είτε απλές αριθµητικές πράξεις, είτε πράξεις της γραµµικής άλγεβρας. Στην πρώτη περίπτωση η λίστα χρησιµοποιείται µε τρόπο παρόµοιο µε αυτόν ενός λογιστικού φύλλου µε κελιά (spreadsheet), όπως αυτά που χρησιµοποιούν τα περισσότερα προγράµµατα διαχείρισης δεδοµένων (π.χ. το Excel), ενώ στη δεύτερη ως αλγεβρική µήτρα.

Στο παρόν κεφάλαιο θα κάνουµε αφενός µια εισαγωγή στις λίστες, και αφετέρου θα παρουσιάσουµε τη χρήση τους για την εκτέλεση απλών αριθµητικών πράξεων, όπως στα λογιστικά φύλλα, αφήνοντας για το κεφάλαιο 9 τη χρήση τους ως µητρών για εκτέλεση πράξεων της γραµµικής άλγεβρας. 2.1 Ορισµός λίστας Μια λίστα (πίνακας) αποτελείται από ένα σύνολο στοιχείων που είναι τοποθετηµένα µε µια καθορισµένη σειρά, και κάθε στοιχείο της χαρακτηρίζεται από έναν ή περισσότερους δείκτες που δηλώνουν τη θέση του στη λίστα. Ειδικά, µια µονοδιάστατη λίστα αποτελείται από στοιχεία που

Page 37: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.1 Ορισµός λίστας

37

είναι τοποθετηµένα σε µια γραµµή, και χαρακτηρίζονται από ένα δείκτη που δηλώνει τη θέση του στοιχείου στη γραµµή αυτή. Μια δισδιάστατη λίστα αποτελείται από ένα σύνολο στοιχείων που είναι τοποθετηµένα σε γραµµές και στήλες, και κάθε στοιχείο χαρακτηρίζεται από δύο δείκτες που δηλώνουν τη γραµµή και τη στήλη στην οποία ανήκει. Η διαδικασία αυτή µπορεί εύκολα να γενικευτεί για λίστες περισσοτέρων διαστάσεων.

Για να ορίσουµε µια λίστα στο MATLAB χρησιµοποιούµε τετραγωνικές αγκύλες, [ ] , µέσα στις οποίες τοποθετούµε τα στοιχεία της. Τα στοιχεία µιας γραµµής χωρίζονται µε κόµµατα ή κενά. ∆ιαφορετικές γραµµές της λίστας χωρίζονται µε το σύµβολο ; , ή εισάγονται σε διαφορετικές γραµµές, όπως π.χ. οι ακόλουθες ποσότητες a1=[2, 7, 71, 8, 9] a1 = 2 7 71 8 9 a2=[3 8; 4 5] a2 = 3 8 4 5 a2=[3 8 4 5] a2 = 3 8 4 5

µε ονόµατα a1 και a2, και αντιπροσωπεύουν σε µια µονοδιάστατη και µια δισδιάστατη λίστα αντίστοιχα.

2.1.1 Τροποποίηση στοιχείων λίστας Όπως αναφέραµε, τα στοιχεία µιας λίστας χαρακτηρίζονται µε δείκτες,

που δηλώνουν τη θέση του στοιχείου, π.χ. τη γραµµή και τη στήλη στην οποία ανήκει για µια δισδιάστατη λίστα. Στο MATLAB οι δείκτες της λίστας τοποθετούνται µέσα σε παρενθέσεις, π.χ. το a(i, j) δηλώνει το στοιχείο (i, j)

Page 38: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

38

της δισδιάστατης λίστας a. Για µονοδιάστατες λίστες έχουµε ένα µόνο δείκτη, π.χ. a1(i). Μπορούµε να τυπώσουµε στην οθόνη ένα στοιχείο µιας λίστας καλώντας το µε τους δείκτες του, π.χ. το στοιχείο (i, j) µιας δισδιάστατης λίστας a καλείται την εντολή a(i, j). Μπορούµε επίσης να τροποποιήσουµε την τιµή ενός στοιχείου, καλώντας το και αποδίδοντας του νέα τιµή, µε την εντολή της ανάθεσης,

a(i, j, ...) = νέα τιµή Παραδείγµατα Χρησιµοποιώντας τις λίστες a1, a2 που ορίσαµε παραπάνω έχουµε τα παρακάτω αποτελέσµατα, a1(3)=11 a1 = 2 7 11 8 9 a2(2, 1)=13 a2 = 3 8 13 5

2.1.2 Χαρακτηριστικά λίστας Μια λίστα χαρακτηρίζεται από τον αριθµό των γραµµών και στηλών της.

Μια λίστα µε m γραµµές και n στήλες, δηλώνεται στα µαθηµατικά ως µία m n× λίστα (πίνακας). Ειδικά, µια 1m× λίστα αντιπροσωπεύει µια λίστα-στήλη µε m γραµµές, ενώ µια 1 n× λίστα, µια λίστα-γραµµή µε n στήλες. Οι εντολές που προσδιορίζουν τα χαρακτηριστικά µιας λίστας δίνονται παρακάτω. [1] Size: Η εντολή αυτή προσδιορίζει τις διαστάσεις µιας λίστας, δηλαδή

προσδιορίζει τις τιµές των στοιχείων m και n που περιγράφουν τη λίστα. Π.χ. για τις λίστες a1, a2, που ορίστηκαν παραπάνω έχουµε,

size(a1)

Page 39: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.2 Ειδικές εντολές δηµιουργίας λίστας

39

ans = 1 5 size(a2) ans = 2 2

[2] Length: Ως µήκος µιας λίστας ορίζεται η µεγαλύτερη τιµή από τις

διαστάσεις της, δηλαδή η µεγαλύτερη τιµή από τα στοιχεία m και n, οπότε για τις λίστες a1 και a2, που ορίστηκαν παραπάνω έχουµε,

length(a1) ans = 5 length(a2) ans = 2

[3] Numel: Προσδιορίζει το συνολικό αριθµό των στοιχείων µιας λίστας,

οπότε για τις λίστες a1 και a2, που ορίστηκαν παραπάνω έχουµε,

numel(a1) ans = 5 numel(a2) ans = 4

2.2 Ειδικές εντολές δηµιουργίας λίστας Στην προηγούµενη παράγραφο παρουσιάσαµε έναν τρόπο δηµιουργίας µιας λίστας, ορίζοντας τα στοιχεία της ένα προς ένα. Η διαδικασία όµως αυτή είναι χρονοβόρα για µεγάλες λίστες. Στην παρούσα παράγραφο θα παρουσιά-σουµε µερικές ειδικές εντολές για να δηµιουργήσουµε ειδικές λίστες,

Page 40: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

40

αφήνοντας για το κεφάλαιο του προγραµµατισµού τη διαδικασία ορισµού λίστας της οποίας τα στοιχεία δίνονται µε συγκεκριµένες εκφράσεις.

2.2.1 Εντολή a_initial:a_step:a_final Μια βασική εντολή δηµιουργίας µιας µονοδιάστατης λίστας, από

αριθµούς που µεταβάλλονται µε σταθερό βήµα, είναι η ακόλουθη a = a_initial:a_step:a_final

η οποία παράγει τη µονοδιάστατη λίστα, µε όλους τους αριθµούς που ξεκινούν από το a_initial, αυξάνονται µε βήµα ίσο µε το a_step, και δεν είναι µεγαλύτεροι του a_final. Όταν το βήµα είναι ίσο µε τη µονάδα, τότε µπορεί να παραληφθεί. Παραδείγµατα d1=1:2:10 d1 = 1 3 5 7 9 d11=1:9 d11 = 1 2 3 4 5 6 7 8 9

Η ίδια εντολή µπορεί να χρησιµοποιηθεί και στη δηµιουργία µιας δισδιάστατης λίστας, της οποίας κάθε γραµµή δηµιουργείται ως µονοδιάστατη λίστα µε τη χρήση της παραπάνω εντολής, π.χ. d2=[1:1:5; 2:2:10; 1:.5:3] d2 = 1.0000 2.0000 3.0000 4.0000 5.0000 2.0000 4.0000 6.0000 8.0000 10.0000 1.0000 1.5000 2.0000 2.5000 3.0000

2.2.2 Εντολή linspace(a1, a2, a3) Η εντολή

a = linspace(a1, a2, a3)

Page 41: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.2 Ειδικές εντολές δηµιουργίας λίστας

41

παράγει µια µονοδιάστατη λίστα που το πλήθος των στοιχείων της είναι ίσο µε a3 , και τα οποία είναι ισοκατανεµηµένα µεταξύ a1 και a2, π.χ. linspace(1,4,5) ans = 1.0000 1.7500 2.5000 3.2500 4.0000

2.2.3 Εντολές zeros(n, m) και zeros(n) Η εντολή

zeros(m, n) δηµιουργεί µια λίστα διαστάσεων m n× µε όλα της τα στοιχεία ίσα µε το µηδέν. Η τετραγωνική λίστα zeros(n, n) δηµιουργείται και µε την εντολή zeros(n). Παραδείγµατα zeros(2,3) ans = 0 0 0 0 0 0 zeros(3) ans = 0 0 0 0 0 0 0 0 0

2.2.4 Εντολές ones(n, m) και ones(n) Η εντολή

ones(m, n) δηµιουργεί µια λίστα διαστάσεων m n× µε όλα της τα στοιχεία ίσα µε τη µονάδα. Η τετραγωνική λίστα ones(n, n) δηµιουργείται και µε την εντολή ones(n).

Page 42: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

42

Παραδείγµατα ones(2,3) ans = 1 1 1 1 1 1 ones(3) ans = 1 1 1 1 1 1 1 1 1

2.2.5 Εντολή eye(n) Η εντολή

eye(n) δηµιουργεί τη µοναδιαία λίστα διαστάσεων n n× , π.χ. eye(3) ans = 1 0 0 0 1 0 0 0 1

2.2.6 Εντολή diag(a) Η εντολή

diag(a) όπου a µια µονοδιάστατη λίστα µε n στοιχεία, δηµιουργεί µια τετραγωνική διαγώνιο λίστα διαστάσεων n n× , µε µόνα δηλαδή µη µηδενικά στοιχεία αυτά της διαγωνίου, τα οποία δίνονται από τα στοιχεία της λίστας a. Εάν όµως η εντολή diag δοθεί µε όρισµα µια τετραγωνική λίστα, τότε αποδίδει ως λίστα-στήλη τη διαγώνιο της λίστας αυτής, π.χ.

Page 43: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.2 Ειδικές εντολές δηµιουργίας λίστας

43

c=diag([1,2,3,4]) ans = 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4

diag(c) ans = 1 2 3 4

2.2.7 Εντολή magic(n) Η εντολή

magic(n) δηµιουργεί την τετραγωνική λίστα διαστάσεων n n× , η οποία έχει την ιδιότητα ότι το άθροισµα των στοιχείων µιας οποιασδήποτε σειράς, ή στήλης, ή των διαγωνίων της, είναι το ίδιο. Παράδειγµα magic(4) ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

2.2.8 Εντολές rand(n, m) και rand(n) Όταν η συνάρτηση rand, κληθεί µε όρισµα δύο ακεραίους αριθµούς, µε

την εντολή rand(m, n)

Page 44: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

44

τότε δηµιουργεί µια λίστα διαστάσεων m n× , µε τα στοιχεία της τυχαίους αριθµούς που είναι κατανεµηµένοι οµοιόµορφα στο διάστηµα [0, 1]. Η τετραγωνική λίστα rand(n, n) δηµιουργείται και µε την εντολή rand(n). Παραδείγµατα rand(2,3) ans = 0.9501 0.6068 0.8913 0.2311 0.4860 0.7621 rand(3) ans = 0.4057 0.4103 0.3529 0.9355 0.8936 0.8132 0.9169 0.0579 0.0099

2.2.9 Εντολές randn(n, m) και randn(n) Όταν η συνάρτηση randn, κληθεί µε όρισµα δύο ακεραίους αριθµούς, µε

την εντολή randn(m, n)

τότε δηµιουργεί µια λίστα διαστάσεων m n× και µε στοιχεία τυχαίους αριθµούς που ακολουθούν την κανονική κατανοµή Ν(0, 1). Η τετραγωνική λίστα randn(n, n) δηµιουργείται και µε την εντολή randn(n). Παραδείγµατα randn(2,3) ans = -0.4326 0.1253 -1.1465 -1.6656 0.2877 1.1909 randn(3) ans = 1.1892 0.1746 -0.5883

Page 45: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.3 ∆ιαχείριση λίστας

45

-0.0376 -0.1867 2.1832 0.3273 0.7258 -0.1364

2.3 ∆ιαχείριση λίστας Παρουσιάσαµε στην παράγραφο 2.1 µια εντολή που χρησιµοποιείται για να γίνει αναφορά σε ένα στοιχείο µιας λίστας, µε τη χρήση του ονόµατος της και του δείκτη (δείκτες), που καθορίζει (καθορίζουν) τη θέση του στοιχείου στη λίστα, ως όρισµα. Με τον παραπάνω όµως τρόπο, χρειάζεται µια ξεχωριστή εντολή για κάθε στοιχείο της λίστας στο οποίο θέλουµε να αναφερθούµε. Στην παρούσα παράγραφο η διαδικασία αυτή θα γενικευτεί ώστε µε µια εντολή να γίνεται αναφορά σε περισσότερα του ενός στοιχεία της λίστας.

2.3.1 Πολλαπλή αναφορά σε στοιχεία λίστας Στην περίπτωση που χρειάζεται να γίνει αναφορά σε περισσότερα του

ενός στοιχεία µιας µονοδιάστατης λίστας, τότε στη θέση του ενός δείκτη τοποθετείται µονοδιάστατη λίστα µε τους δείκτες που καθορίζουν τις θέσεις των ζητούµενων στοιχείων, π.χ. a1=12:20; a1([1,3,7]) ans = 12 14 18

Σε πολυδιάστατη λίστα, κάθε δείκτης αναφοράς µπορεί να

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

a=magic(5)

Page 46: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

46

a = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 a([1,2,4], 2) ans = 24 5 12 a([1, 3], [2, 4]) ans = 24 8 6 20

Επίσης, υπάρχει η δυνατότητα να τοποθετηθεί η εντολή δηµιουργίας

του ανύσµατος µέσα στο όρισµα του a, όπως π.χ. στις παρακάτω εντολές a(1:3,2) ans = 1 32 9 a(2,2:end) ans = 32 7

όπου οι εντολές 1:3 και 2:end, που δηµιουργούν το άνυσµα, τοποθετούνται ως όρισµα του a. Με µια εντολή της µορφής i:end δηµιουργείται µία λίστα µε το δείκτη να µεταβάλλεται από το i µέχρι τη µεγαλύτερη επιτρεπτή του τιµή για τη λίστα αυτή.

Τέλος αναφέρουµε, ότι στην περίπτωση όπου στη θέση ενός δείκτη τοποθετείται µόνο το σύµβολο : , χωρίς δηλαδή να δηλώνεται το εύρος της

Page 47: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.3 ∆ιαχείριση λίστας

47

µεταβολής του αντίστοιχου δείκτη, τότε χρησιµοποιείται το µέγιστο δυνατό εύρος του συγκεκριµένου δείκτη για τη λίστα αυτή, π.χ. a(2, :) ans = 3 32 7 21 23 25

2.3.2 Αναγωγή λίστας σε µονοδιάστατη λίστα-στήλη Όταν µια τυχούσα λίστα κληθεί µε ένα µόνο δείκτη, και ο δείκτης αυτός

είναι το σύµβολο : , τότε αποδίδεται µια µονοδιάστατη λίστα-στήλη που περιέχει όλες τις στήλες της αρχικής λίστας, τη µια κάτω από την άλλη, a2 =[1 3 4 2] a2(:) ans = 1 4 3 2

Επίσης όταν µια τυχούσα λίστα κληθεί µε ένα µόνο δείκτη, µε συγκεκριµένη αριθµητική τιµή, τότε αποδίδεται το αντίστοιχο στοιχείο της ανηγµένης µονοδιάστατης λίστας που δηµιουργείται µε την τοποθέτηση όλων των στηλών της αρχικής λίστας, τη µια κάτω της άλλης, π.χ. a2(3) ans = 3 a2(end) ans = 2

Page 48: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

48

2.3.3 Αναφορά σε στοιχεία λίστας µε λογική εντολή Μια από τις δυνατότητες που έχει το MATLAB είναι να κάνει αναφορά

σε στοιχεία λίστας µε τη χρήση µιας λογικής εντολής, η οποία τοποθετείται ως όρισµα της λίστας, οπότε αποδίδεται µια λίστα µε στοιχεία τα στοιχεία της αρχικής που ικανοποιούν τη λογική αυτή εντολή. Στη µονοδιάστατη λίστα, αποδίδεται µια µονοδιάστατη λίστα-γραµµή µε τα στοιχεία που ικανοποιούν τη λογική εντολή, ενώ στη δισδιάστατη, µια µονοδιάστατη λίστα-στήλη µε τα αντίστοιχα στοιχεία. Παραδείγµατα Παρακάτω παραθέτουµε τη χρήση µιας λογικής εντολής σε µονοδιάστατη και δισδιάστατη λίστα, b=1:10; b(b>5) ans = 6 7 8 9 10 a=magic(4); a(a>8) ans = 16 9 11 14 10 15 13 12

2.3.4 Πολλαπλή τροποποίηση στοιχείων λίστας Όπως αναφέρθηκε στην παράγραφο 2.1, έχουµε τη δυνατότητα

τροποποίησης στοιχείων µιας λίστας. Η διαδικασία για την τροποποίηση ενός στοιχείου είναι η κλήση του στοιχείου αυτού, και η απόδοση της νέας του τιµής. Η γενίκευση της παραπάνω διαδικασίας για την τροποποίηση περισσοτέρων στοιχείων µε µία εντολή, είναι η κλήση των στοιχείων αυτών

Page 49: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.3 ∆ιαχείριση λίστας

49

µε µια εντολή, και η απόδοση των νέων τους τιµών µε τη µορφή µιας λίστας. Η λίστα που αποδίδει τις νέες τιµές πρέπει απαραίτητα να έχει την ίδια δοµή µε αυτή που δηµιουργείται µε την κλήση των στοιχείων αυτών. Ο πιο απλός τρόπος για τον προσδιορισµό της δοµής της λίστας αυτής, και την αποφυγή λαθών, είναι να γίνεται πρώτα κλήση των στοιχείων που είναι προς αναθεώ-ρηση, να προσδιορίζεται η δοµή της λίστας που δηµιουργείται, και µετά να αποδίδονται οι νέες τιµές µε αυτή τη δοµή. Παράδειγµα Έστω η λίστα a=magic(4) a = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1

Στοιχεία προς τροποποίηση a(2:3,1:2) ans = 5 11 9 7

Λίστα µε τις νέες τιµές των στοιχείων a1=[11 7; 8 5] a1 = 11 7 8 5

Τροποποίηση των στοιχείων a(2:3,1:2)=a1 a =

Page 50: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

50

16 2 3 13 11 7 10 8 8 5 6 12 4 14 15 1

Απάλειψη γραµµής ή στήλης λίστας Μπορούµε επίσης να απαλείψουµε µια γραµµή ή στήλη µιας λίστας, µε το να αντικαταστήσουµε τη γραµµή αυτή ή στήλη µε την κενή λίστα, που δηλώ-νεται µε το σύµβολο [] . Παράδειγµα Με τις παρακάτω εντολές γίνεται απαλοιφή τις τρίτης γραµµής της λίστας a που δηµιουργήθηκε παραπάνω a(3,:)=[] a = 16 2 3 13 11 7 10 8 4 14 15 1

και κατόπιν απαλοιφή της δεύτερης της στήλης a(:,2)=[] a = 16 3 13 11 10 8 4 15 1

2.4 Συνενώνοντας λίστες H δηµιουργία µιας σύνθετης λίστας S, συνενώνοντας άλλες λίστες, A, B, C, D, …, γίνεται στο MATLAB µε απλό τρόπο, όπως και η δηµιουργία µιας νέας λίστας, µε την παράθεση των A, B, … ως στοιχείων της σύνθετης λίστας. Η µόνη προϋπόθεση γι΄ αυτή τη διαδικασία είναι να ικανοποιούνται οι απαραίτητες συνθήκες ισότητας του αριθµού γραµµών ή στηλών, ανάλογα

Page 51: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.4 Συνενώνοντας λίστες

51

µε την περίπτωση, για τις επιµέρους λίστες. Ειδικότερα αναφέρουµε τις παρακάτω περιπτώσεις: 1) Σύνθετη λίστα µε συνένωση γραµµών Η εντολή για τη δηµιουργία σύνθετης λίστας µε τη συνένωση των γραµµών δύο ή περισσοτέρων λιστών είναι

S =[A, B, …] Η απαραίτητη προϋπόθεση είναι οι λίστες Α, Β, ... να έχουν τον ίδιο αριθµό γραµµών, π.χ. A1=[1 3;8 4]; A2=[3 7 2;9 4 6]; S=[A1 A2] S = 1 3 3 7 2 8 4 9 4 6

2) Σύνθετη λίστα µε συνένωση στηλών Η εντολή για τη δηµιουργία σύνθετης λίστας µε τη συνένωση των στηλών για δύο ή περισσότερες λίστες είναι

S =[A; B; …] Η απαραίτητη προϋπόθεση είναι οι λίστες Α, Β, ... να έχουν τον ίδιο αριθµό στηλών, π.χ. B1=[1 7 9; 5 8 4]; B2=[3 8 6; 6 9 4; 4 9 6]; S=[B1; B2] S = 1 7 9 5 8 4

Page 52: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

52

3 8 6 6 9 4 4 9 6

3) Γενική περίπτωση Η γενική εντολή για να συνενωθούν λίστες είναι η παρακάτω,

S =[A1 Α2 ...; B1 Β2 ...; …] Η απαραίτητη προϋπόθεση για τη συνένωση αυτή είναι οι επιµέρους λίστες που βρίσκονται στη ίδια γραµµή της σύνθετης λίστας να έχουν τον ίδιο αριθµό γραµµών, το δε άθροισµα των στηλών για τις επιµέρους λίστες που βρίσκονται στη ίδια γραµµή της σύνθετης λίστας να είναι το ίδιο για όλες τις γραµµές της, π.χ. C1=[1 4; 7 8]; C2=[3 8 7; 8 7 3]; C3=[7 9 6; 9 5 7; 8 5 4]; C4=[8 6; 6 1; 7 5]; S=[C1 C2; C3 C4] S = 1 4 3 8 7 7 8 8 7 3 7 9 6 8 6 9 5 7 6 1 8 5 4 7 5

2.5 Πράξεις µε λίστες Στην παρούσα παράγραφο θα αναφερθούµε στην περίπτωση απλών αριθµητικών πράξεων µε λίστες, που εκτελούνται όπως και στα λογιστικά φύλλα. Οι τελεστές που χρησιµοποιούνται στο MATLAB για την εκτέλεση των πράξεων αυτών παρουσιάζονται παρακάτω. Επίσης στα επόµενα παραδείγµατα χρησιµοποιούνται για εφαρµογές οι παρακάτω δύο 3x3 λίστες A και B,

Page 53: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.5 Πράξεις µε λίστες

53

A=[7,7,6; 1,9,4; 5,4,1]; B=[11,6,5; 7,5,9; 8,6,2];

1. Πρόσθεση ή αφαίρεση αριθµού σε λίστα. Πρόσθεση (αφαίρεση)

ενός αριθµού σε µία λίστα συνεπάγεται πρόσθεση (αφαίρεση) του αριθµού αυτού σε όλα τα στοιχεία της λίστας. Οι τελεστές του MATLAB που εκτελούν τις πράξεις αυτές είναι οι ίδιοι τελεστές της πρόσθεσης και αφαίρεσης της αριθµητικής + και - , και οι εντολές επίδρασης τους σε λίστες είναι οι ακόλουθες,

A+c και A-c

[1] Χρησιµοποιώντας τη λίστα Α που ορίσαµε παραπάνω, έχουµε τα εξής αποτελέσµατα,

A+2 ans = 9 9 8 3 11 6 7 6 3 A-3 ans = 4 4 3 -2 6 1 2 1 -2

Από την αριθµητική γνωρίζουµε ότι η πρόσθεση αριθµών είναι µια πράξη που ικανοποιεί την αντιµεταθετική ιδιότητα, όπως επιβεβαιώνεται και από το παρακάτω παράδειγµα,

A+2==2+A ans = 1 1 1 1 1 1

Page 54: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

54

1 1 1

2. Πολλαπλασιασµός ή διαίρεση λίστας µε αριθµό. Ο πολλα-

πλασιασµός (διαίρεση) µιας λίστας µε έναν αριθµό συνεπάγεται πολλαπλα-σιασµό (διαίρεση) όλων των στοιχείων της λίστας µε τον αριθµό αυτό. Οι τελεστές του MATLAB που εκτελούν τις πράξεις αυτές είναι οι τελεστές του πολλαπλασιασµού και της διαίρεσης της αριθµητικής * , / και \ , και οι εντολές είναι οι ακόλουθες,

c*A , A/c και c\A

[2] Χρησιµοποιώντας τη λίστα Α που ορίσαµε παραπάνω, έχουµε τα εξής αποτελέσµατα,

3*A ans = 21 21 18 3 27 12 15 12 3 A/3 ans = 2.3333 2.3333 2.0000 0.3333 3.0000 1.3333 1.6667 1.3333 0.3333

Όπως αναφέρθηκε στην παράγραφο 1.2, στο MATLAB µπορούµε να εκτελέσουµε τη διαίρεση και µε το σύµβολο \ , γράφοντας δηλαδή πρώτα το διαιρέτη και µετά το διαιρετέο, όπως φαίνεται στο επόµενο παράδειγµα, 3\A ans = 2.3333 2.3333 2.0000 0.3333 3.0000 1.3333 1.6667 1.3333 0.3333

Page 55: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.5 Πράξεις µε λίστες

55

Στη διαίρεση λίστας µε αριθµό, οι ποσότητες A/c και c\A είναι µεταξύ τους ίσες, όπως επιβεβαιώνεται και µε το παραπάνω παράδειγµα.

3. Αθροίσµατα και διαφορές µε λίστες. Μπορούµε να αθροίσουµε (αφαιρέσουµε) δύο λίστες µόνο όταν αυτές έχουν τις ίδιες διαστάσεις. Το άθροισµα (διαφορά) αντιπροσωπεύει µια λίστα της οποίας τα στοιχεία είναι ίσα µε το άθροισµα (διαφορά) των αντίστοιχων στοιχείων των δύο λιστών. Οι τελεστές του MATLAB που εκτελούν τις πράξεις αυτές είναι οι τελεστές του αθροίσµατος και της διαφοράς της αριθµητικής + και - , και για δύο λίστες Α και Β, που ικανοποιούν τις παραπάνω συνθήκες, οι εντολές για το άθροισµα και τη διαφορά είναι οι ακόλουθες

A+B, και Α-Β

[3] Χρησιµοποιώντας τις δύο λίστες Α και Β, που ορίσαµε παραπάνω, έχουµε τα εξής αποτελέσµατα,

A+B ans = 18 13 11 8 14 13 13 10 3 A-B ans = -4 1 1 -6 4 -5 -3 -2 -1

Από την αριθµητική γνωρίζουµε ότι η πρόσθεση αριθµών είναι µια πράξη που ικανοποιεί την αντιµεταθετική ιδιότητα, όπως επιβεβαιώνεται και από το παρακάτω παράδειγµα,

A+B==B+A ans = 1 1 1

Page 56: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

56

1 1 1 1 1 1

4. Πολλαπλασιασµός (διαίρεση) µε λίστες. Μπορούµε να πολλαπλα-

σιάσουµε (διαιρέσουµε) δύο λίστες µόνο όταν αυτές έχουν τις ίδιες διαστάσεις. Το γινόµενο (λόγος) τους ορίζεται ως η λίστα που προκύπτει από τον πολλαπλασιασµό (διαίρεση) των αντίστοιχων στοιχείων των δύο λιστών. Για δύο λίστες Α και Β, που ικανοποιούν τις παραπάνω συνθήκες, η εντολή για τον πολλαπλασιασµό και τη διαίρεση τους είναι αντίστοιχα

A.*B και Α./Β Β.\Α Σχόλιο: Σε µια πράξη πολλαπλασιασµού (διαίρεσης) µε λίστες, ο τελεστής που εκτελεί την πράξη είναι διπλός, αποτελούµενος από το σύµβολο της τελείας, . , ακολουθούµενο από το σύµβολο της αντίστοιχης αριθµητικής πράξης. Τέλος πρέπει να τονίσουµε, ότι οι πράξεις αυτές είναι τελείως διαφορετικές από τις πράξεις µε µήτρες, που θα ορίσουµε στην παράγραφο 9.2. [4] Χρησιµοποιώντας τις δύο λίστες Α και Β, που ορίσαµε παραπάνω,

έχουµε τα εξής αποτελέσµατα, A.*B ans = 77 42 30 7 45 36 40 24 2 B.*A ans = 77 42 30 7 45 36 40 24 2 A./B ans = 0.6364 1.1667 1.2000

Page 57: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.5 Πράξεις µε λίστες

57

0.1429 1.8000 0.4444 0.6250 0.6667 0.5000 B.\A ans = 0.6364 1.1667 1.2000 0.1429 1.8000 0.4444 0.6250 0.6667 0.5000

Επειδή οι πράξεις µε λίστες εκτελούνται στοιχείο προς στοιχείο, έπεται ότι οι ποσότητες A.*Β και Β.*A είναι ίσες µεταξύ τους, όπως και οι ποσότητες A./Β και Β.\A.

5. ∆ύναµη λίστας. Σύµφωνα µε τον κανόνα που διέπει τον πολλαπλα-

σιασµό, η λίστα A.^n

αντιπροσωπεύει µια λίστα της οποίας τα στοιχεία είναι ίσα µε τη n-οστή δύναµη των στοιχείων της A. Ο εκθέτης n µπορεί να είναι και αρνητικός αριθµός. [5] Χρησιµοποιώντας τις δύο λίστες Α και Β, που ορίσαµε παραπάνω,

έχουµε τα εξής αποτελέσµατα, A.^2 ans = 49 49 36 1 81 16 25 16 1 A.^(-1) ans = 0.1429 0.1429 0.1667 1.0000 0.1111 0.2500 0.2000 0.2500 1.0000

Page 58: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

58

1./A==A.^(-1) ans = 1 1 1 1 1 1 1 1 1

6. Ανάστροφη λίστα. Ανάστροφη µιας λίστας Α ορίζεται η λίστα που

έχει ανεστραµµένες τις σειρές µε τις στήλες της, και υπολογίζεται µε την εντολή

A.’ Ο τελεστής για τον υπολογισµό της ανάστροφης είναι διπλός, αποτελούµενος από την τελεία και την απόστροφο. Σηµειώστε όµως ότι υπάρχει και η εντολή Α’ , που ορίζεται στην παράγραφο 9.2, και διαφέρει από την παραπάνω στο ότι εκτός από αναστροφή στις γραµµές και στήλες, αντικαθιστά και το κάθε στοιχείο µε το µιγαδικό συζυγές του. Για πραγµατικές λίστες οι δύο εντολές προφανώς δίνουν το ίδιο αποτέλεσµα. [6] Χρησιµοποιώντας τις δύο λίστες Α και Β, που ορίσαµε παραπάνω,

έχουµε τα εξής αποτελέσµατα, A.' ans = 7 1 5 7 9 4 6 4 1 B.' ans = 11 7 8 6 5 6 5 9 2

2.5.1 Επίδραση συνάρτησης σε λίστα Όταν µια εσωτερική συνάρτηση του MATLAB υπολογιστεί µε όρισµα

µια λίστα, τότε η συνάρτηση αυτή επιδρά ξεχωριστά πάνω σε κάθε στοιχείο

Page 59: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.6 Ειδικές συναρτήσεις

59

της λίστας αυτής. Η ιδιότητα αυτή των συναρτήσεων είναι πολύ σηµαντική, και µπορεί να αξιοποιηθεί για την εκτέλεση πολλαπλών υπολογισµών, για πολλές τιµές του ορίσµατος µιας συνάρτησης. Αντί δηλαδή να δίνεται διαφορετική εντολή εκτέλεσης της συνάρτησης για τις διάφορες τιµές του ορίσµατος της, δηµιουργείται µια λίστα µε τις τιµές αυτές, που χρησιµοποιείται ως όρισµα στην εκτέλεση της συνάρτησης. Παραδείγµατα [1] Να υπολογιστεί το ηµίτονο των γωνιών από µηδέν µέχρι π ακτίνια, µε βήµα π/4. sin([0:pi/4:pi]) ans = 0 0.7071 1.0000 0.7071 0.0000

[2] ∆ηµιουργείστε µια 3 4× λίστα , µε την εντολή 10*rand(3, 4), και υπολογίστε το λογάριθµο των στοιχείων της, a=10*rand(3,4) a = 3.1269 6.8312 6.1240 0.1635 0.1286 0.9284 6.0854 1.9007 3.8397 0.3534 0.1576 5.8692 log(a) ans = 1.1400 1.9215 1.8122 -1.8106 -2.0508 -0.0743 1.8059 0.6422 1.3454 -1.0402 -1.8477 1.7697

2.6 Ειδικές συναρτήσεις Παρακάτω θα παρουσιάσουµε µερικές ειδικές συναρτήσεις, και τη δράση τους πάνω σε λίστες. Στα επόµενα παραδείγµατα χρησιµοποιούνται για εφαρµογές οι παρακάτω λίστες,

Page 60: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

60

a=11:20; A=[7,7,6; 1,9,4; 5,4,1];

1. Συνάρτηση find. Η εντολή find δέχεται ως όρισµα µια λογική εντολή

που περιέχει µια λίστα, της µορφής find(λογική_εντολή)

και αποδίδει τους δείκτες των στοιχείων της λίστας που ικανοποιούν την εντολή αυτή. Για µονοδιάστατη λίστα, η εντολή αποδίδει µονοδιάστατη επίσης λίστα. Για δισδιάστατη, όταν η εντολή αποδοθεί σε µια παράµετρο τότε δίνει τους δείκτες των στοιχείων της ανηγµένης µονοδιάστατης λίστας, που προκύπτει µε τη συνένωση των στηλών της, που ικανοποιούν τη σχέση. Όταν όµως αποδοθεί σε λίστα µε δύο παραµέτρους, τότε αποδίδει τους δύο δείκτες (i, j) των στοιχείων της τετραγωνικής λίστας που ικανοποιούν τη σχέση. Οι δείκτες (i, j) αποδίδονται σε ξεχωριστές στήλες, των οποίων συνδυάζονται τα στοιχεία που βρίσκονται στις αντίστοιχες θέσεις. Παραδείγµατα Για τη µονοδιάστατη λίστα a που ορίσαµε παραπάνω, ζητούµε π.χ. τους δείκτες των µεγαλύτερων του 16 στοιχείων, find(a>16) ans = 7 8 9 10

Ενώ για δισδιάστατη λίστα Α, τα µεγαλύτερα του 6 στοιχεία της έχουν δείκτες, find(A>6) ans = 1 4 5

Page 61: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.6 Ειδικές συναρτήσεις

61

[i j]=find(A>6) i = 1 1 2 j = 1 2 2

2. Συνάρτηση min. Υπολογίζει το ελάχιστο στοιχείο µιας µονοδιάστατης

λίστας, µε την εντολή min(a)

Όταν το a είναι µια δισδιάστατη λίστα, τότε η εντολή min(a) υπολογίζει το ελάχιστο στοιχείο κάθε στήλης ξεχωριστά, και αποδίδει τα αποτελέσµατα ως µία µονοδιάστατη λίστα-γραµµή. min(A) ans = 1 4 1 min(A(:)) ans = 1

3. Συνάρτηση max. Υπολογίζει το µέγιστο στοιχείο µιας µονοδιάστατης

λίστας µε την εντολή max(a)

Όταν το a είναι µια δισδιάστατη λίστα, τότε η εντολή max(a) υπολογίζει το µέγιστο στοιχείο κάθε στήλης ξεχωριστά, και αποδίδει τα αποτελέσµατα ως µία µονοδιάστατη λίστα-γραµµή. max(A)

Page 62: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Λίστες

62

ans = 7 9 6 max(A(:)) ans = 9

4. Συνάρτηση sum. Υπολογίζει το άθροισµα των στοιχείων µιας

µονοδιάστατης λίστας µε την εντολή sum(a)

Όταν το a είναι µια δισδιάστατη λίστα, τότε η εντολή sum(a) υπολογίζει το άθροισµα των στοιχείων κάθε στήλης ξεχωριστά, και αποδίδει τα αποτελέσµατα ως µία µονοδιάστατη λίστα-γραµµή. sum(A) ans = 13 20 11 sum(A(:)) ans = 44

5. Συνάρτηση prod. Υπολογίζει το γινόµενο των στοιχείων µιας

µονοδιάστατης λίστας µε την εντολή prod(a)

Όταν το a είναι µια δισδιάστατη λίστα, τότε η εντολή prod(a) υπολογίζει το γινόµενο των στοιχείων κάθε στήλης ξεχωριστά, και αποδίδει τα αποτελέσµατα ως µία µονοδιάστατη λίστα-γραµµή. prod(A) ans = 35 252 24 prod(A(:)) ans =

Page 63: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

2.6 Ειδικές συναρτήσεις

63

211680 6. Συνάρτηση sort. Ταξινοµεί τα στοιχεία µιας µονοδιάστατης λίστας µε

αύξουσα σειρά, µε την εντολή sort(a)

Όταν το a είναι µια δισδιάστατη λίστα, τότε η εντολή sort(a) ταξινοµεί τα στοιχεία κάθε στήλης ξεχωριστά, και αποδίδει τα αποτελέσµατα ως µία µονοδιάστατη λίστα-γραµµή. Με την ίδια εντολή µπορούν να ταξινοµηθούν τα στοιχεία είτε µε αύξουσα είτε µε φθίνουσα σειρά, αρκεί να προσδιοριστεί και η διεύθυνση ταξινό-µησης,

sort(a, ‘mode’) η οποία προσδιορίζεται µε τη συµβολοσειρά ‘mode’, που δέχεται τις ακόλουθες επιλογές, 'ascend' για αύξουσα ταξινόµηση (προκαθορισµένη επιλογή) 'descend' για φθίνουσα ταξινόµηση. Παραδείγµατα sort(A,'ascend') ans = 1 4 1 5 7 4 7 9 6 sort(A,'descend') ans = 7 9 6 5 7 4 1 4 1

Page 64: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

ΚΕΦΑΛΑΙΟ 3

64

ΚΕΦΑΛΑΙΟ 3

Συµβολοσειρές

Εκτός από αριθµούς, το MATLAB έχει επίσης τη δυνατότητα να διαχει-ρίζεται και κείµενο. Ένα κοµµάτι κείµενο αντιµετωπίζεται στο MATLAB ως µια σειρά από χαρακτήρες (σύµβολα), και ονοµάζεται συµβολοσειρά. Τους τρόπους διαχείρισης µιας συµβολοσειράς θα παρουσιάσουµε στο παρόν κεφάλαιο. 3.1 ∆ηµιουργία συµβολοσειράς Μπορούµε να δηµιουργήσουµε µια συµβολοσειρά στο MATLAB, δηλώνοντας το κείµενο που περιλαµβάνει, και τοποθετώντας το µέσα σε απλά εισαγωγικά του Αγγλικού πληκτρολογίου. Η συµβολοσειρά µπορεί να αποδοθεί µε µια παράµετρο, π.χ. οι εντολές s1='Introduction to strings' s1 = Introduction to strings s2='Paragraph one' s2 = Paragraph one

Page 65: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

3.2 ∆ιαχείριση συµβολοσειράς

65

δηµιουργούν δύο συµβολοσειρές, που αποθηκεύονται στις παραµέτρους s1 και s2 αντίστοιχα. 3.2 ∆ιαχείριση συµβολοσειράς Για το MATLAB, η συµβολοσειρά είναι ένα είδος λίστας, και τα σύµβολα µιας συµβολοσειράς αποθηκεύονται στην παράµετρο µε τρόπο αντίστοιχο εκείνου των στοιχείων µιας µονοδιάστατης λίστας. ∆ιαχειριζόµαστε δε µια συµβολοσειρά µε τρόπο παρόµοιο µε αυτόν της λίστας, αποδίδοντας δείκτες στα διάφορα στοιχεία της, όµοια µε τη λίστα. Μερικές εντολές διαχείρισης µιας συµβολοσειράς δίνονται παρακάτω, και εφαρµόζονται στις συµβολοσειρές που ορίστηκαν στη παράγραφο 3.1. 1. Υπολογισµός του µήκους µιας συµβολοσειράς, µε την εντολή length, π.χ. length(s1) ans = 16

2. Επιλογή τµήµατος µιας συµβολοσειράς, µε επιλογή των αντίστοιχων

θέσεων της λίστας, π.χ.

s1(1) ans = C s1(1:9) ans = Character s1(11:16) ans = string

Page 66: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Συµβολοσειρές

66

3. Τροποποίηση τµήµατος µιας συµβολοσειράς, όπως γίνεται και στη λίστα, µε επιλογή των αντίστοιχων θέσεων, όπως π.χ. η παρακάτω διόρθωση µιας συµβολοσειράς

a='numperr' a = numperr a(7)=[] a = numper a(4)='b' a = number

4. Αντικατάσταση των χαρακτήρων µιας συµβολοσειράς µε τους

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

s2=s1*1 s2 = Columns 1 through 15 67 104 97 114 97 99 116 101 114 32 115 116 114 105 110 Column 16 103

5. Επαναφορά από την αναπαράσταση µε κωδικούς αριθµούς ASCII, σε

κανονική αναπαράσταση, που γίνεται µε την εντολή char, π.χ. char(s2) ans = Character string

Page 67: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

3.2 ∆ιαχείριση συµβολοσειράς

67

6. Μετατροπή συµβολοσειράς µε δοµή γραµµής, σε δοµή στήλης, και αντίστροφα, µε την εντολή της ανάστροφης, ‘ , π.χ.

s1(11:16)' ans = s t r i n g

7. Συνένωση συµβολοσειρών, όπως γίνεται και στις λίστες, π.χ. η συνένωση

των συµβολοσειρών u και w γίνεται µε την εντολή [u,w], s3=['part', ' ', 'one'] s3 = part one

Page 68: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

ΚΕΦΑΛΑΙΟ 4

68

ΚΕΦΑΛΑΙΟ 4

Προγραµµατισµός

Μέχρι τώρα χρησιµοποιήσαµε µεµονωµένες εντολές για την εκτέλεση πράξεων. Στο MATLAB όµως υπάρχει η δυνατότητα σύνταξης εκτεταµένων προγραµµάτων. Ο προγραµµατισµός αυτός γίνεται µε τρόπο παρόµοιο µε εκείνον των παραδοσιακών γλωσσών, όπως π.χ. FORTRAN, PASCAL, C κ.ο.κ. Στο παρόν κεφάλαιο θα γίνει µια εισαγωγή στον προγραµµατισµό αυτό.

Οι βασικές εντολές του προγραµµατισµού χωρίζονται σε δύο κατηγορίες, τις εντολές ελέγχου ροής και τις εντολές για επαναληπτικές διαδικασίες. Στην πρώτη κατηγορία ανήκει η εντολή if, ενώ στη δεύτερη οι εντολές for και which. Οι εντολές αυτές παρουσιάζονται στις επόµενες παραγράφους.

4.1 Εντολή ελέγχου ροής: if Στα παραδείγµατα που παρουσιάσαµε σε προηγούµενα κεφάλαια, οι εντολές εκτελούνται διαδοχικά, η µια µετά την άλλη, χωρίς εξαίρεση. Σε πολλές όµως περιπτώσεις, είναι επιθυµητό το πρόγραµµα να επιλέγει µόνο του, µε βάση κάποιον αλγόριθµο, από ένα σύνολο εντολών αυτές που θα εκτελέσει. Η επιλογή αυτή γίνεται µε τη χρήση της εντολής ελέγχου if.

Η τυπική δοµή µιας διαδικασίας if είναι η παρακάτω

Page 69: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

4.1 Εντολή ελέγχου ροής: if

69

if εντολη_ελέγχου σύνολο εντολών _1 else σύνολο εντολών_2 end

Το πρόγραµµα επιλέγει, ανάλογα µε το αποτέλεσµα της εντολής

ελέγχου, πιο από τα δύο σύνολα εντολών θα εκτελέσει. Όταν η απάντηση στην εντολή ελέγχου είναι θετική, τότε εκτελεί το σύνολο εντολών_1, και παραλείπει το σύνολο εντολών_2, διαφορετικά εκτελεί το αντίστροφο. Όταν το σύνολο εντολών προς εκτέλεση στη δεύτερη οµάδα είναι κενό, τότε η δοµή της εντολής if γίνεται

if εντολη_ελέγχου σύνολο εντολών_1 end

Παραδείγµατα [1] Μπορούµε π.χ. να ορίσουµε την τιµή της παραµέτρου a ανάλογα µε την

τιµή που έχει η παράµετρος b, όπως γίνεται στο παρακάτω παράδειγµα, όπου το a παίρνει την τιµή 33 όταν b>3, και την τιµή 21 διαφορετικά,

if b>3 a=33; else a=21; end

[2] Στο παρακάτω παράδειγµα, µε τη χρήση της εντολής if, ορίζουµε τις

τιµές δύο µεταβλητών, ανάλογα µε την τιµή της παραµέτρου x, if x > 6 a = 2; b = 3; else

Page 70: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Προγραµµατισµός

70

a = 5; b = 6; end disp(a), disp(b)

Η παραπάνω δοµή µπορεί να γενικευτεί ώστε να επιλέγει το πρόγραµµα µεταξύ περισσοτέρων από δύο οµάδων εντολών αυτή που θα εκτελέσει. Η γενικευµένη αυτή δοµή της εντολής if δίνεται παρακάτω

if εντολη_ελέγχου_1 σύνολο εντολών_1 elseif εντολη_ελέγχου _2 σύνολο εντολών_2 …… elseif εντολη_ελέγχου_ν-1 σύνολο εντολών_ν-1 else σύνολο εντολών_ν end

Το πρόγραµµα εκτελεί τους διαδοχικούς ελέγχους και επιλέγει να εκτελέσει την οµάδα εντολών που αντιστοιχεί σε θετικό αποτέλεσµα της εντολής ελέγχου. Παράδειγµα [4] Στο παρακάτω παράδειγµα, η τιµή της παραµέτρου x είναι ίση µε –y,

όταν y<0, µε µηδέν όταν 0 1y≤ ≤ , και µε y-1 όταν y>1. Οι εντολές που το υλοποιούν είναι οι παρακάτω,

if y<0 x=-y; elseif y<=1 x=0; else

Page 71: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

4.2 Επαναληπτικές διαδικασίες - Βρόχοι

71

x=y-1; end

4.2 Επαναληπτικές διαδικασίες - Βρόχοι Οι επαναληπτικές διαδικασίες χρησιµοποιούνται στις περιπτώσεις που απαιτείται η επαναληπτική εκτέλεση µιας ή περισσοτέρων εντολών. Στις διαδικασίες αυτές δηµιουργείται µία κυκλική διαδικασία, που αποκαλείται βρόχος, η οποία εκτελείται επαναληπτικά µέχρι να παραβιαστεί ένα κριτήριο επανάληψης. Στον προγραµµατισµό µε το MATLAB οι βασικές εντολές δηµιουργίας ενός βρόχου είναι οι for και while.

4.2.1 Εντολή For Η δοµή της εντολής αυτής είναι η ακόλουθη:

for δείκτης=λίστα σύνολο εντολών προς εκτέλεση end

όπου η εκτέλεση των πράξεων επαναλαµβάνεται, µε το δείκτη να παίρνει όλες τις τιµές που καθορίζουν τα στοιχεία της λίστας. Στη θέση της λίστας µπορεί επίσης να τοποθετηθεί µια εντολή που να δηµιουργεί τη λίστα αυτή, όπως π.χ. 1:10. Συνήθως η λίστα είναι µονοδιάστατη. σε περίπτωση δισδιά-στατης, ο δείκτης ακολουθεί τις στήλες της λίστας, τη µία µετά την άλλη. Παράδειγµα 1 Να κατασκευαστεί µια λίστα που να περιέχει τα τετράγωνα των ακεραίων αριθµών 1-10. Ο υπολογισµός αυτός διεκπεραιώνεται µε το παρακάτω πρόγραµµα, x=[]; for i=1:10 x=[x,i^2]; end

Page 72: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Προγραµµατισµός

72

Η δοµή του αλγορίθµου είναι η ακόλουθη: αρχικά δηµιουργείται µια κενή λίστα και αποδίδεται στην παράµετρο x. Μετά δηµιουργείται ένας βρόχος, σε κάθε κύκλο του οποίου προστίθεται στην υπάρχουσα λίστα ο επόµενος αριθµός, ίσος µε i^2. Παράδειγµα 2 Να υπολογιστεί το άθροισµα των πρώτων εκατό ακεραίων αριθµών 1-100. n=100; s=0.; for i=1:n s=s+i; end

Η δοµή του αλγορίθµου είναι η ακόλουθη: Χρησιµοποιείται η παράµετρος s στην οποία θα αποδοθεί η τιµή του αθροίσµατος. Αρχικά αποδίδεται στην παράµετρο αυτή η τιµή µηδέν, και δηµιουργείται µετά ένας βρόχος, σε κάθε κύκλο του οποίου προστίθεται στην υπάρχουσα τιµή ο επόµενος αριθµός, ίσος µε i. Παράδειγµα 3 Να βρεθεί ο µεγαλύτερος αριθµός, απ’ αυτούς που είναι αποθηκευµένοι σε µια µονοδιάστατη λίστα, προσδιορίζοντας ταυτόχρονα και τη θέση του στη λίστα αυτή.

Για την εφαρµογή του παραδείγµατος, δηµιουργούµε µια µονοδιάστατη λίστα εκατό αριθµών, αξιοποιώντας την εντολή 10*rand(1,100). Το πρόγραµµα για τον υπολογισµό του µεγαλύτερου αριθµού, µαζί µε τη θέση του είναι το ακόλουθο n=100; a=10*rand(1,n); amax=a(1);imax=1; for i=2:n if a(i)>amax amax=a(i);

Page 73: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

4.2 Επαναληπτικές διαδικασίες - Βρόχοι

73

imax=i; end end Η δοµή του αλγορίθµου είναι η ακόλουθη: στην αρχή κάνουµε την υπόθεση ότι ο πρώτος αριθµός της λίστας είναι και ο ζητούµενος. Στη συνέχεια αρχίζουµε να συγκρίνουµε τον αριθµό αυτό µε τους αριθµούς που έπονται. Εάν συναντήσουµε κάποιον µεγαλύτερο απ’ αυτόν, τότε επιλέγουµε αυτόν σαν το µεγαλύτερο, δηλώνοντας ταυτόχρονα και τη θέση του. Συνεχίζουµε τη διαδικασία αυτή µε τους αριθµούς που έπονται, και µε το πέρας της διαδικασίας έχουµε εντοπίσει το µέγιστο αριθµό, µαζί µε τη θέση του.

Παράδειγµα 4 Σ’ ένα «εικονικό πείραµα» θεωρούµε ότι το αποτελέσµατα µιας «µέτρησης» της µεταβλητής y προσοµοιάζεται από το αποτέλεσµα εκτέλεσης της εντολής:

x=2.0+rand Εκτελούµε µια σειρά 100 τέτοιων «µετρήσεων», και κατόπιν υπολογίζουµε τη µέση τιµή και την τυπική τους απόκλιση (standard deviation).

Η µέση τιµή εκφράζει την τιµή γύρω από την οποία είναι διασπαρµένα τα δεδοµένα, ενώ η τυπική απόκλιση δίνει το εύρος της περιοχής µέσα στην οποία βρίσκονται τα περισσότερα απ’ αυτά. Η µέση τιµή των δεδοµένων δίνεται από τη σχέση

1

1 nii

x xn =

= ∑ ,

και η αµερόληπτη τιµή της τυπικής απόκλισης από τη σχέση

2 21

1 ( )1

nii

s s x xn =

= = −− ∑ ,

όπου n είναι ο αριθµός των δεδοµένων του προβλήµατος. Ο υπολογισµός τους γίνεται µε το πρόγραµµα που ακολουθεί: n=100; x=2+rand(1,n); % evaluation of the mean value

Page 74: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Προγραµµατισµός

74

xsum=0.; for i=1:n xsum=xsum+x(i); end xmean=xsum/n % %evaluation of the stantard deviation x2sum=0.; for i=1:n x2sum=x2sum+(x(i)-xmean)^2; end sdx=sqrt(x2sum/(n-1))

Φωλιασµένες εντολές for Εκτός από τη δοµή ενός απλού βρόχου for, έχουµε επίσης τη δυνατότητα δηµιουργίας φωλιασµένων βρόχων, όπου για κάθε δείκτη του εξωτερικού βρόχου επαναλαµβάνεται ολόκληρος ο εσωτερικός βρόχος. Παράδειγµα 5 Να κατασκευαστεί µια λίστα διαστάσεων 3 4× , τα στοιχεία της οποίας να δίνονται από τη σχέση ( ) ( ) / 2a i j i j= + . Ο υπολογισµός αυτός διεκπεραιώνεται µε το παρακάτω πρόγραµµα, for i=1:3 for j=1:4 c(i,j)=(i+j)/2.; end end

Παράδειγµα 6 Να υπολογιστεί το άθροισµα όλων των στοιχείων της τετραγωνικής λίστας που κατασκευάζεται µε την εντολή magic(10). Ο υπολογισµός αυτός διεκπεραιώνεται µε το παρακάτω πρόγραµµα, όπου αθροίζονται πρώτα τα στοιχεία µιας γραµµής (εσωτερικός βρόχος), και µετά όλες οι γραµµές,

Page 75: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

4.2 Επαναληπτικές διαδικασίες - Βρόχοι

75

n=10; a=magic(n); asum=0.; for n1=1:n for n2=1:n asum=asum+a(n1,n2); end end

4.2.2 Εντολή While Μερικές φορές δεν είναι γνωστός, εκ των προτέρων, ο αριθµός των

κύκλων εκτέλεσης ενός βρόχου, ο οποίος ενδέχεται να διαµορφώνεται κατά τη διάρκεια των κύκλων, όπως ενδέχεται και η τιµή του δείκτη για τον επόµενο κύκλο να υπολογίζεται µέσα στον ίδιο το βρόχο, ως µια συνάρτηση των ενδιάµεσων αποτελεσµάτων. Για ν’ αντιµετωπιστούν οι περιπτώσεις αυτές υπάρχει η εντολή while, η οποία έχει την ακόλουθη δοµή,

αρχική_τιµή_δείκτη while εντολη_ελέγχου_δείκτη

εντολές προς εκτέλεση προσδιορισµός_νέας_τιµής_δείκτη

end Όπως και στο βρόχο for, έτσι και στο βρόχο while, γίνεται επαναληπτική εκτέλεση των πράξεων, µέχρι να παραβιαστεί ο έλεγχος. Ο έλεγχος γίνεται µε τη χρήση του δείκτη, του οποίου η αρχική τιµή καθορίζεται πριν από την έναρξη του βρόχου, και η τιµή για τον επόµενο κύκλο υπολογίζεται µέσα στον τρέχοντα κύκλο. Για να µπορέσει όµως να τερµατιστεί ο βρόχος, θα πρέπει η τιµή του δείκτη να µεταβάλλεται, µε την επανάληψη των πράξεων, κατά τρόπο ώστε να παραβιαστεί κάποτε η εντολή ελέγχου.

Page 76: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Προγραµµατισµός

76

Παράδειγµα 1 Χρησιµοποιώντας την εντολή while, να ευρεθεί ο µεγαλύτερος αριθµός από αυτούς που είναι αποθηκευµένοι σε µια µονοδιάστατη λίστα, και να προσδιοριστεί ταυτόχρονα και η θέση του στη λίστα αυτή.

Όπως και µε το αντίστοιχο παράδειγµα για την εντολή for, δηµιουργούµε µια µονοδιάστατη λίστα εκατό αριθµών, αξιοποιώντας την εντολή

10*rand(1,100) Το πρόγραµµα για τον υπολογισµό του µεγαλύτερου απ’ αυτούς, µαζί µε τη θέση του, είναι το ακόλουθο n=100; a=10*rand(1,n); amax=a(1);imax=1; ni=1; while ni<n+0.5 if a(ni)>amax amax=a(ni); imax=ni; end ni=ni+1; end disp('maximum number= '),disp(amax) disp('position= '),disp(imax)

Στον παραπάνω βρόχο γίνεται η σύγκριση 0.5ni n< + , διότι για πραγµα-τικούς αριθµούς, µια εντολή σύγκρισης της µορφής ni n≤ ενδέχεται να χάσει την τιµή ni n= , λόγω αριθµητικών σφαλµάτων στρογγυλοποίησης. Η σχέση ni n== είναι ασφαλής µόνο για ακεραίους αριθµούς. Παράδειγµα 2 Σ’ ένα «εικονικό πείραµα», το αποτελέσµατα µιας «µέτρησης» της µεταβλη-τής y προσοµοιάζεται από το αποτέλεσµα εκτέλεσης της εντολής:

y=2.0+0.2*rand

Page 77: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

4.2 Επαναληπτικές διαδικασίες - Βρόχοι

77

Χρησιµοποιώντας την εντολή while, να προσδιοριστεί η µέση τιµή και η τυπική απόκλιση (standard deviation) µιας σειράς 10000 τέτοιων «µετρήσεων». Ο υπολογισµός τους γίνεται µε το πρόγραµµα που ακολουθεί: n=10000; y=2+0.2*rand(1,n); % evaluation of the mean value ysum=0.; i1=1; while i1<n+0.5 ysum=ysum+y(i1); i1=i1+1; end ymean=ysum/n %evaluation of the stantard deviation y2sum=0.; i2=1; while i2<n+0.5 y2sum=y2sum+(y(i2)-ymean)^2; i2=i2+1; end sdy=sqrt(y2sum/(n-1))

Φωλιασµένες εντολές Εκτός από µια απλή δοµή βρόχου, έχουµε επίσης τη δυνατότητα δηµιουργίας φωλιασµένων βρόχων, όπου για κάθε δείκτη του εξωτερικού βρόχου επαναλαµβάνεται ολόκληρος ο εσωτερικός. Παράδειγµα 3 Να υπολογιστεί το άθροισµα όλων των στοιχείων της τετραγωνικής λίστας που κατασκευάζεται µε την εντολή migic(10). Ο υπολογισµός αυτός διεκπεραιώνεται µε το παρακάτω πρόγραµµα, n=10; a=magic(n);

Page 78: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Προγραµµατισµός

78

asum=0.; n1=1; while n1<n+0.5 n2=1; while n2<n+0.5 asum=asum+a(n1,n2); n2=n2+1; end n1=n1+1; end disp('list element summation= '),disp(asum)

Το παραπάνω παράδειγµα µπορεί επίσης να εκτελεστεί µε ένα βρόχο for και ένα βρόχο while, n=10; a=magic(n); asum=0.; for n1=1:n n2=1; while n2<n+0.5 asum=asum+a(n1,n2); n2=n2+1; end end disp('list element summation= '),disp(asum)

4.3 Συµπληρωµατικές εντολές ελέγχου Στις επαναληπτικές διαδικασίες, που παρουσιάσαµε στη παράγραφο 4.2, µε τις εντολές for και while, ο βρόχος επαναλαµβάνεται µέχρι να παραβιαστεί το κριτήριο επανάληψης. Σε µερικές όµως περιπτώσεις χρειάζεται να επέµβουµε, µέσω µιας άλλης εντολής ελέγχου, για να τροποποιήσουµε ή να διακόψουµε τη λειτουργία του βρόχου νωρίτερα. Η διαδικασία αυτή γίνεται µε τις εντολές continue και break.

Page 79: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

4.3 Συµπληρωµατικές εντολές ελέγχου

79

4.3.1 Εντολή continue Με τη χρήση της εντολής αυτής µπορούµε να παραλείψουµε την

εκτέλεση, για κάποιες τιµές του δείκτη, ενός µέρους ή του συνόλου των πράξεων που υπάρχουν µέσα σ’ ένα βρόχο. Με την κλήση της εντολής continue παραλείπεται, για το συγκεκριµένο κύκλο, η εκτέλεση των πράξεων που έπονται της εντολής αυτής, και ο βρόχος οδηγείται στον επόµενο κύκλο, που αντιστοιχεί στην επόµενη τιµή του δείκτη. Η τυπική δοµή µιας τέτοιας εντολής, για ένα βρόχο for, είναι η ακόλουθη,

for δείκτης=µονοδιάστατης_λίστας εντολή προς εκτέλεση

. . εντολή ελέγχου ροής που περιέχει το continue .

end Ο παραπάνω βρόχος οδηγείται στον επόµενο κύκλο όταν η εντολή ελέγχου ροής επιβάλλει την εκτέλεση της εντολής continue. Με παρόµοιο τρόπο χρησιµοποιείται η εντολή continue και σε βρόχο που συντάσσεται µε τη χρήση της εντολής while. Παράδειγµα Χρησιµοποιώντας την εντολή

floor(20*rand(1,100)+1) δηµιουργείστε εκατό ακεραίους αριθµούς οµοιόµορφα κατανεµηµένους στο διάστηµα [1, 20]. Υπολογίστε το άθροισµα των αρτίων απ’ αυτούς. Η λύση του προβλήµατος δίνεται µε τον επόµενο αλγόριθµο. n=100; a=floor(20*rand(1,n)+1); asum=0.; for ni=1:100

Page 80: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Προγραµµατισµός

80

if mod(a(ni),2)==1 continue end asum=asum+a(ni); end disp('sum= '),disp(asum);

Με την εντολή continue παραλείπουµε τους περιττούς αριθµούς από την άθροιση.

4.3.2 Εντολή break Με την κλήση της εντολής αυτής διακόπτεται η λειτουργία, και το

πρόγραµµα βγαίνει από ένα βρόχο for ή while. Η έξοδος γίνεται από το σηµείο που καλείται η εντολή break. Η τυπική δοµή µιας τέτοιας εντολής, για ένα βρόχο for, είναι η ακόλουθη,

for δείκτης=µονοδιάστατης_λίστας εντολή προς εκτέλεση

. . εντολή ελέγχου ροής που περιέχει το break .

end

όπου ο βρόχος διακόπτεται όταν η εντολή ελέγχου ροής επιβάλλει την εκτέλεση της εντολής break. Με παρόµοιο τρόπο συντάσσονται και βρόχοι µε τη χρήση της εντολής while. Παράδειγµα Χρησιµοποιώντας την εντολή

floor(20*rand(1,100)+1) δηµιουργείστε µια ακολουθία εκατό τυχαίων ακεραίων αριθµών, οµοιόµορφα κατανεµηµένων στο διάστηµα [1, 20]. Να τυπωθεί η πρώτη

Page 81: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

4.4 Λογικοί τελεστές

81

οµάδα διαδοχικών άρτιων αριθµών που εµφανίζεται στην παραπάνω ακολουθία. Η λύση του προβλήµατος δίνεται µε τον επόµενο αλγόριθµο. n=100; a=floor(20*rand(1,n)+1) asum=0.;index=0; for ni=1:100 if mod(a(ni),2)==index index=index+1; if index>1 break end disp(a(ni)) elseif index==1 disp(a(ni)) end end

Στον παραπάνω αλγόριθµο δηµιουργείται ένας δείκτης, index, µε αρχική τιµή index=0. Μέσα στο βρόχο εντοπίζεται ο πρώτος άρτιος αριθµός µε την εντολή mod(a(ni), 2)==index, και αµέσως αυξάνεται η τιµή του δείκτη σε index=1. Από το σηµείο αυτό αρχίζει το πρόγραµµα να τυπώνει τους διαδοχικούς αριθµούς της λίστας, έναν σε κάθε κύκλο, µέχρι να βρει τον επόµενο περιττό αριθµό, µε την εντολή mod(a(ni), 2)==index. 4.4 Λογικοί τελεστές Στη παράγραφο 1.2 παρουσιάσαµε απλές λογικές εντολές, µε τη χρήση σχεσιακών τελεστών. Εκτός από τις απλές αυτές εντολές, έχουµε τη δυνατότητα να συντάξουµε και σύνθετες εντολές. Σε µια σύνθετη λογική εντολή περιλαµβάνονται περισσότερες από µια πράξεις σύγκρισης, οι οποίες συνδέονται µεταξύ τους µε λογικούς τελεστές. Οι λογικοί τελεστές είναι οι «και», «ή», και «όχι». Το αποτέλεσµα της πράξης είναι, όπως και στην απλή

Page 82: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Προγραµµατισµός

82

περίπτωση, είτε το ένα (όταν η σχέση είναι αληθής), είτε το µηδέν (όταν η σχέση δεν είναι αληθής).

4.4.1 Λογικός τελεστής «και» Με τον τελεστή αυτό ελέγχουµε εάν ικανοποιούνται ταυτόχρονα δύο ή

περισσότερες πράξεις σύγκρισης. Όταν η σύγκριση αφορά µε λίστες, τότε ο τελεστής «και» δηλώνεται µε το απλό σύµβολο & , ενώ για αριθµούς µε το διπλό σύµβολο &&. Η διαφοροποίηση αυτή είναι αναγκαία, διότι για λίστες η εκτέλεση της λογικής εντολής επαναλαµβάνεται για όλα τα στοιχεία, ενώ για αριθµούς εκτελείται µία µόνο φορά. ∆ηλαδή το απλό σύµβολο περιέχει και τη δηµιουργία ενός βρόχου για όλα τα στοιχεία των λιστών. Οπότε µια τέτοια σύνθετη λογική εντολή είναι της µορφής

(test1)&(test2)&(test3)... ή

(test1)&&(test2)&&(test3)... για λίστες ή αριθµούς αντίστοιχα. [1] Να βρεθούν οι όροι της λίστας magic(6) που είναι πολλαπλάσια και του

2 και του 3, και να υπολογιστεί το άθροισµα τους.

af=magic(6); s=0; for i=1:6 for j=1:6 if mod(af(i,j),2)==0&&mod(af(i,j),3)==0 disp(af(i,j));s=s+af(i,j); end end end disp(s)

Page 83: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

4.4 Λογικοί τελεστές

83

Στους φωλιασµένους βρόχους που δηµιουργούνται, εντοπίζονται τα στοιχεία τις λίστας που είναι πολλαπλάσια και του 2 και του 3, τυπώνονται και αθροίζονται στην παράµετρο s.

4.4.2 Λογικός τελεστής «ή» Με τον τελεστή «ή» ελέγχουµε εάν ικανοποιείται τουλάχιστον µία από

ένα σύνολο πράξεων σύγκρισης, και δηλώνεται για λίστες µε | και για αριθµούς µε || , οπότε µια τέτοια σύνθετη λογική εντολή είναι της µορφής,

(test1)|(test2)|(test3)... ή

(test1)||(test2)||(test3)... για λίστες ή αριθµούς αντίστοιχα. Για λίστες, η εκτέλεση της λογικής εντολής επαναλαµβάνεται για όλα τα στοιχεία. [2] Να βρεθούν οι όροι της λίστας magic(6) που είναι πολλαπλάσια ή του 2

ή του 3, και να υπολογιστεί το άθροισµα τους. af=magic(6); s=0; for i=1:6 for j=1:6 if mod(af(i,j),2)==0||mod(af(i,j),3)==0 disp(af(i,j));s=s+af(i,j); end end end disp(s)

Στους φωλιασµένους βρόχους που δηµιουργούνται, εντοπίζονται τα στοιχεία τις λίστας που είναι πολλαπλάσια ή του 2 ή του 3, τυπώνονται και αθροίζονται στην παράµετρο s.

Page 84: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Προγραµµατισµός

84

4.4.3 Λογικός τελεστής «οχι» Ο τελεστής αυτός αντιστρέφει το αποτέλεσµα (από 1 σε 0 και

αντίστροφα) µιας λογικής εντολής, και δηλώνεται µε το σύµβολο ~ , οπότε µια τέτοια λογική εντολή είναι της µορφής,

~(test1) [3] Να βρεθούν οι όροι της λίστας magic(6) που δεν είναι πολλαπλάσια

ούτε του 2 ούτε του 3, και να υπολογιστεί το άθροισµα τους. af=magic(6); s=0; for i=1:6 for j=1:6 if (~mod(af(i,j),2)==0)&&(~mod(af(i,j),3)==0) disp(af(i,j));s=s+af(i,j); end end end disp(s)

Στους φωλιασµένους βρόχους που δηµιουργούνται, εντοπίζονται τα στοιχεία τις λίστας που δεν είναι πολλαπλάσια ούτε του 2 ούτε του 3, τυπώνονται και αθροίζονται στην παράµετρο s.

Page 85: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

4.4 Λογικοί τελεστές

85

Page 86: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

ΚΕΦΑΛΑΙΟ 5

86

ΚΕΦΑΛΑΙΟ 5

Συναρτήσεις

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

5.1 Μ – Συναρτήσεις Στην παράγραφο 1.7 παρουσιάσαµε τα Μ-αρχεία, τα οποία περιέχουν µια οµάδα εντολών, οι οποίες εκτελούνται µε την κλήση του αρχείου. Η βασική ιδιότητα των Μ-αρχείων είναι ότι οι εντολές τους εκτελούνται µέσα στο βασικό χώρο λειτουργίας του προγράµµατος, και αντιµετωπίζονται ως εντολές του κυρίως προγράµµατος. Έτσι µπορούν να χρησιµοποιούν όλα τα προηγούµενα αποτελέσµατα που βρίσκονται στο χώρο αυτό, και επίσης όλα τα αποτελέσµατα που παράγουν µε την εκτέλεση τους είναι διαθέσιµα στο βασικό χώρο λειτουργίας του προγράµµατος για επόµενους υπολογισµούς. Σε αρκετές όµως περιπτώσεις θα ήταν χρήσιµο να είχαµε τη δυνατότητα να δηµιουργούσαµε ένα σύνολο εντολών που να εκτελούνται µέσα σ’ ένα ανεξάρτητο υπόχωρο του συστήµατος, ο οποίος να µην αλληλεπιδρά µε το βασικό χώρο λειτουργίας του προγράµµατος, παρά µόνο µε προεπιλεγµένες

Page 87: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

5.1 Μ – Συναρτήσεις

87

µεταβλητές. Οι δυνατότητα αυτή υπάρχει, και υλοποιείται µε τη δηµιουργία των Μ-συναρτήσεων.

Για τη σύνταξη µιας Μ-συνάρτησης πρέπει να χρησιµοποιηθεί ένας κειµενογράφος ASCII (editor), όπως π.χ. ο κειµενογράφος του MATLAB. Τα αρχεία των Μ-συναρτήσεων είναι γενικά παρόµοια στη δοµή τους µε τα Μ-αρχεία εντολών, και η βασική εντολή που τα διαφοροποιεί είναι η πρώτη εντολή των Μ-συναρτήσεων, που είναι δηλωτική της λειτουργίας τους. Η εντολή αυτή δηλώνει ότι το αρχείο αποτελεί συνάρτηση, ορίζει το όνοµα της, και καθορίζει τις µεταβλητές επικοινωνίας µε το κυρίως πρόγραµµα. Οι Μ-συναρτήσεις αποθηκεύονται υποχρεωτικά σε αρχεία που έχουν το ίδιο όνοµα µε το όνοµα της συνάρτησης, και έχουν επίσης την κατάληξη .m . Τα αρχεία αυτά αποθηκεύονται µέσα σε µια διεύθυνση στην οποία έχει πρόσβαση το πρόγραµµα, π.χ. στην ενεργό διεύθυνση αποθήκευσης του MATLAB, ώστε να υπάρχει η δυνατότητα εκτέλεσης τους, µε τη κλήση του ονόµατος τους.

5.1.1 Παράµετροι εισόδου και εξόδου Όπως αναφέραµε παραπάνω, για την επικοινωνία µιας συνάρτησης µε

το κυρίως πρόγραµµα, χρησιµοποιούνται οι παράµετροι εισόδου και εξόδου. Οι παράµετροι εισόδου µεταφέρουν δεδοµένα από το κυρίως πρόγραµµα στη συνάρτηση, και οι παράµετροι εξόδου από τη συνάρτηση στο κυρίως πρόγραµµα.

1) Παράµετροι εισόδου Οι παράµετροι εισόδου είναι παράµετροι του κυρίως προγράµµατος που

µεταφέρονται στη συνάρτηση, δεν µεταφέρονται όµως από τη συνάρτηση στο κυρίως πρόγραµµα. ∆ηλαδή, µια παράµετρος που ανήκει στο κυρίως πρόγραµµα και µεταφέρεται στη συνάρτηση, µεταφέρεται τόσο η παρά-µετρος, όσο και η αριθµητική της τιµή. Όταν όµως η τιµή της παραµέτρου αυτής αλλάξει µέσα στη συνάρτηση, η νέα αυτή τιµή δεν µεταφέρεται πίσω στο κυρίως πρόγραµµα.

Οι παράµετροι εισόδου τοποθετούνται ως όρισµα στη συνάρτηση.

Page 88: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Συναρτήσεις

88

2) Παράµετροι εξόδου Μέσα σε µια συνάρτηση εκτελείται µια σειρά υπολογισµών. Για να

µπορέσει όµως να µεταφερθεί η αριθµητική τιµή µιας παραµέτρου στο κυρίως πρόγραµµα, θα πρέπει η παράµετρος αυτή να χαρακτηριστεί ως παράµετρος εξόδου. Ο χαρακτηρισµός γίνεται µε την ένταξη της σε µια λίστα που περιέχει όλες τις παραµέτρους, των οποίων η αριθµητική τιµή µεταφέρεται στο κυρίως πρόγραµµα.

Η λίστα µε τις παραµέτρους εξόδου τοποθετείται στην πρώτη γραµµή του

αρχείου, και σ’ αυτήν αποδίδεται η συνάρτηση. Με βάση τα παραπάνω, η πρώτη γραµµή του αρχείου µιας συνάρτησης

έχει την ακόλουθη δοµή, function [w1 w2 …]=function_name(x1, x2, …)

Οι παράµετροι x1, x2, … είναι οι παράµετροι εισόδου της συνάρτησης, και w1, w2, … οι παράµετροι εξόδου. Όταν υπάρχει µόνο ένα αποτέλεσµα για µεταφορά, τότε µπορούν να παραληφθούν οι τετραγωνικές αγκύλες στη λίστα εξόδου.

Πρέπει όµως να επισηµανθεί, ότι η ένταξη µιας παραµέτρου στη λίστα εξόδου δεν είναι αρκετή για να µπορέσει η ποσότητα αυτή να χρησιµοποιηθεί στο κυρίως πρόγραµµα, και οφείλεται στο γεγονός ότι η ποσότητα αυτή µεταφέρεται στο κυρίως πρόγραµµα ως µία αφηρηµένη αριθµητική τιµή, και όχι ως παράµετρος. Εποµένως, για να µπορέσει να χρησιµοποιηθεί η αριθµητική αυτή τιµή θα πρέπει πρώτα να αποδοθεί σε µια νέα παράµετρο που ορίζεται στο κυρίως πρόγραµµα. Έτσι η εντολή κλήσης της συνάρτησης πρέπει να είναι της µορφής

[z1 z2 …]=function_name(x1, x2, …) όπου οι αριθµητικές τιµές που µεταφέρονται στο κυρίως πρόγραµµα αποδί-δονται στις παραµέτρους z1, z2, … .

Page 89: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

5.1 Μ – Συναρτήσεις

89

Παράδειγµα 1 Να γραφεί Μ-συνάρτηση η οποία για δοσµένο x να αποδίδει την ποσότητα

2cos( 2) /(1 ( 2) )x x+ + + . Ο προγραµµατισµός της συνάρτησης αυτής δίνεται παρακάτω function y=ff(x) x=x+2; disp(x) y=cos(x)./(1+x.^2);

η οποία αποθηκεύεται στο αρχείο µε το όνοµα ff.m.

Στο παραπάνω παράδειγµα, η παράµετρος x ανήκει στο κυρίως πρόγραµµα, και µε την τοποθέτηση της ως όρισµα στη συνάρτηση ff, µεταφέρεται σ’ αυτήν. Μέσα στη συνάρτηση τροποποιείται, και χρησιµο-ποιείται για τον προσδιορισµό της παραµέτρου y. Τέλος η αριθµητική τιµή της παραµέτρου y µεταφέρεται στο κυρίως πρόγραµµα

∆ιερευνάται ο τρόπος λειτουργίας της παραπάνω συνάρτησης µε τις παρακάτω εντολές, που εκτελούνται µέσα στο παράθυρο διαχείρισης του προγράµµατος, >> x =1 >> disp(x) 1 >> z=ff(x) x = 3 z = -0.0990 >> disp(x) 1 >> disp(y) ??? Undefined function or variable 'y'.

∆ηλαδή η παράµετρος x µεταφέρεται, µαζί µε την τιµή της, µέσα στη συνάρτηση, ενώ η νέα της τιµή, που ορίζεται µέσα στη συνάρτηση, δεν

Page 90: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Συναρτήσεις

90

µεταφέρεται πίσω στο κυρίως πρόγραµµα. Τέλος η αριθµητική τιµή της παραµέτρου y µεταφέρεται στο κυρίως πρόγραµµα και αποδίδεται στην παράµετρο z, δεν µεταφέρεται όµως η παράµετρος y, όπως διαπιστώνεται από την εντολή disp(y). Παράδειγµα 2 Έστω ότι µέσα στο κυρίως πρόγραµµα δηµιουργείται µια µονοδιάστατη λίστα που περιέχει αριθµούς. Να γραφτεί µια συνάρτηση που να βρίσκει το µεγαλύτερο εξ αυτών, µαζί µε τη θέση του στη λίστα.

Η ζητούµενη συνάρτηση δίνεται παρακάτω, της αποδίδεται το όνοµα findmaximum, και αποθηκεύεται σε αρχείο µε το όνοµα findmaximum.m. function [amax, index]=findmaximum(a) n=length(a); amax=a(1); index=1; for i=2:n if a(i)>amax amax=a(i); index=i; end end

Όπως φαίνεται στο παραπάνω πρόγραµµα, η παράµετρος εισόδου στη

συνάρτηση είναι η λίστα a, και η λίστα εξόδου είναι η [amax, index], η οποία περιέχει την τιµή του µεγαλύτερου αριθµού µαζί µε τη θέση του, και στην οποίαν αποδίδεται η συνάρτηση findmaximum(a).

Ο τρόπος λειτουργίας της συνάρτησης αυτής διερευνάται µε το παρακάτω πρόγραµµα, >> a=rand(100,1); >> findmaximum(a) ans = 0.9883 >> z=findmaximum(a) z =

Page 91: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

5.1 Μ – Συναρτήσεις

91

0.9883 >> [z1 z2]=findmaximum(a) z1 = 0.9883 z2 = 100

∆ηµιουργείται δηλαδή µια λίστα µε 100 τυχαίους αριθµούς που αποθηκεύονται στη λίστα a, και κατόπιν καλείται η συνάρτηση findmaximum µε όρισµα τη λίστα αυτή. Όταν µέσα από το κυρίως πρόγραµµα η συνάρτηση αυτή κληθεί και αποδοθεί σε µια µόνο παράµετρο, τότε διασώζεται µόνο η τιµή της πρώτης παραµέτρου εξόδου, δηλαδή η τιµή του µεγαλύτερου αριθµού, όχι όµως και η θέση του. Για να διασωθούν και οι δύο ποσότητες θα πρέπει η συνάρτηση να αποδοθεί σε µία λίστα µε δύο παραµέτρους.

5.1.2 Τερµατισµός συνάρτησης Όταν κληθεί µια συνάρτηση, συνήθως µέσα από ένα Μ-αρχείο εντολών, αυτή εκτελείται και µετά το πέρας των πράξεων της επιστρέφει η διαδικασία στο Μ-αρχείο, για να εκτελεστούν οι υπόλοιπες εντολές του. Το θέµα που θα εξετάσουµε παρακάτω είναι ο καθορισµός του σηµείου της συνάρτησης απ’ το οποίο γίνεται η επιστροφή στο Μ-αρχείο. Το σηµείο αυτό συνήθως είναι η τελευταία εντολή της συνάρτησης, σε µερικές όµως περιπτώσεις µπορεί να προβλεφθεί να γίνεται επιστροφή και από ενδιάµεσες θέσεις. Για το σκοπό αυτό χρησιµοποιούνται οι εντολές return και error.

1) Εντολή return Σε µερικές περιπτώσεις, οι απαιτούµενοι υπολογισµοί σε µια συνάρ-

τηση ολοκληρώνονται σε µια ενδιάµεση θέση, πριν από την τελευταία εντολή του αρχείου. Στην περίπτωση αυτή προγραµµατίζεται επιστροφή στο κυρίως πρόγραµµα από το σηµείο τερµατισµού των πράξεων, µε τη χρήση της εντολής return. Η έξοδος γίνεται από το σηµείο που καλείται η εντολή return.

Page 92: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Συναρτήσεις

92

Παράδειγµα 1 Έστω ότι µέσα στο κυρίως πρόγραµµα δηµιουργείται µια µονοδιάστατη λίστα που περιέχει αριθµούς. Να γραφεί µια συνάρτηση που να βρίσκει τον πρώτο αριθµό που είναι µεγαλύτερος του δέκα, µαζί µε τη θέση του στη λίστα.

Η ζητούµενη συνάρτηση δίνεται παρακάτω, της αποδίδεται το όνοµα firstnumber, και αποθηκεύεται σε αρχείο µε το όνοµα firstnumber.m. function [a10, index]=firstnumber(a) n=length(a); a10=-1; index=1; for i=1:n if a(i)>a10 a10=a(i); index=i; end if a(i)>10 return end end disp('number>10 not found, returns the maximum nember')

Στην παραπάνω συνάρτηση εκτελείται η εντολή return, για επιστροφή στο κυρίως πρόγραµµα, αµέσως µετά τον εντοπισµό του πρώτου αριθµού που είναι µεγαλύτερος του 10. Ένα παράδειγµα κλήσης της παραπάνω συνάρτησης δίνεται παρακάτω, a=15*rand(12,1); [z1 z2]=firstnumber(a) z1 = 11.7499 z2 = 5

Page 93: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

5.1 Μ – Συναρτήσεις

93

2) Εντολή error Σε αρκετές περιπτώσεις οι συνθήκες του προβλήµατος επιβάλλουν είτε

τα δεδοµένα εισόδου, είτε και τα αποτελέσµατα εξόδου µιας συνάρτησης να υπακούουν σε ορισµένους κανόνες, να είναι π.χ. θετικές ποσότητες. Σε τέτοιες περιπτώσεις επιβάλλεται να γίνεται έλεγχος εάν ικανοποιούνται οι απαιτήσεις του προβλήµατος, και να διακόπτεται το πρόγραµµα όταν οι κανόνες αυτοί παραβιάζονται, µε την ένδειξη ότι υπάρχει λάθος στο πρόγραµµα, για να ενηµερώνεται ο χρήστης για το γεγονός αυτό και να φροντίζει για τη διόρθωση του. Η διαδικασία αυτή διεκπεραιώνεται µε την εντολή error. Η διακοπή του προγράµµατος γίνεται από το σηµείο που καλείται η εντολή error.

Παράδειγµα 2 Επανερχόµαστε στο παραπάνω παράδειγµα 1, και υποθέτουµε ότι σύµφωνα µε τις απαιτήσεις του προβλήµατος οι αριθµοί που εισάγονται στη συνάρτη-ση πρέπει να είναι θετικοί. Για το λόγο αυτό ξαναγράφουµε τη συνάρτηση firstnumber, για να εισάγουµε µια διαδικασία ελέγχου των αριθµών που είναι αποθηκευµένοι στη λίστα a, για να βεβαιωθούµε ότι είναι πράγµατι θετικοί.

Η ζητούµενη συνάρτηση δίνεται παρακάτω, της αποδίδεται το όνοµα firstnumbernew, και αποθηκεύεται σε αρχείο µε το όνοµα firstnumbernew.m. function [a10, index]=firstnumbernew(a) n=length(a); for j=1:n if a(j)<0 error('negative input number') end end a10=-1; index=1; for i=1:n if a(i)>a10 a10=a(i); index=i;

Page 94: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Συναρτήσεις

94

end if a(i)>10 return end end disp('number>10 not found, returs the maximum nember')

Ένα παράδειγµα χρήσης της παραπάνω συνάρτησης, όπου φροντίσαµε η λίστα εισόδου a, µε τα δεδοµένα για τη συνάρτηση, να µην ικανοποιεί τις απαιτούµενες συνθήκες, δίνεται παρακάτω, >> a=15*rand(12,1); >> a(10)=-1; >> [z1 z2]=firstnumbernew(a) ??? Error using ==> firstnumbernew negative input number

5.2 Οδηγός συνάρτησης Όταν στο MATLAB καλείται για εκτέλεση µια συνάρτηση, τότε το πρόγραµµα την αναζητεί στις διευθύνσεις που έχει πρόσβαση, µια χρονοβόρα διαδικασία σε περιπτώσεις πολλαπλής κλήσης της συνάρτησης. Το παραπάνω πρόβληµα µπορεί να λυθεί µε τη δηµιουργία µιας παραµέτρου στην οποία να αποθηκεύονται όλες οι πληροφορίες οι σχετικές µε τη συνάρτηση αυτή που συλλέγονται µε τη πρώτη της εκτέλεσης, όπως π.χ. η διεύθυνση στην οποία είναι αποθηκευµένη, και οι οποίες µπορούν να χρησιµοποιηθούν στις επόµενες εκτελέσεις της συνάρτησης. Η παράµετρος αυτή ονοµάζεται οδηγός της συνάρτησης, τοποθετείται στο βασικό χώρο λειτουργίας του προγράµµατος, εντοπίζεται άµεσα, και οδηγεί σε επιτάχυνση τη διαδικασία πολλαπλού υπολογισµού της συνάρτησης αυτής. Τέλος σηµειώνεται ότι η χρησηµοποίηση µιας συνάρτησης ως παραµέτρου εισόδου µέσα σε µια άλλη συνάρτηση, µπορεί να γίνει µόνο µε τη χρήση ενός οδηγού.

Ένας οδηγός µπορεί να αποδοθεί σε µια εσωτερική συνάρτηση του MATLAB, µια υπάρχουσα Μ-συνάρτηση, ακόµα και να χρησιµοποιηθεί για

Page 95: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

5.2 Οδηγός συνάρτησης

95

να οριστεί µια καινούργια συνάρτηση, και του προσδίδεται ένα όνοµα µέσω του οποίου καλείται. Παρακάτω δίνουµε λεπτοµέρειες για τη διαδικασία ορισµού του οδηγού αυτού.

5.2.1 Οδηγός εσωτερικής συνάρτησης Μια εσωτερική συνάρτηση του MATLAB µπορεί να συνδεθεί µε ένα

οδηγό, τον οποίο µπορούµε να χρησιµοποιούµε για τον υπολογισµό της. Η εντολή καθορισµού του οδηγού είναι η ακόλουθη

driver_name=@function_name

όπου driver_name είναι το όνοµα του οδηγού, και function_name το κανονικό όνοµα της συνάρτησης. Τα δύο παραπάνω ονόµατα δίνονται χωρίς όρισµα, όµως το όρισµα της συνάρτησης γίνεται αυτόµατα και όρισµα του οδηγού, το οποίο χρησιµοποιείται για τη κλήση του, όπως γίνεται και στη συνάρτηση. Παράδειγµα Αποδίδεται οδηγός, µε το όνοµα fsin, στην εσωτερική συνάρτηση sin, και κατόπιν χρησιµοποιείται για τον υπολογισµό τιµών της συνάρτησης αυτής, fsin=@sin; fsin([0: 0.25 :1]) ans = 0 0.2474 0.4794 0.6816 0.8415

5.2.2 Οδηγός Μ-συνάρτησης Με τον ίδιο τρόπο µπορούµε να αποδώσουµε έναν οδηγό σε µια Μ-

συνάρτηση, µε την εντολή driver_name=@Μ-function_name

Τα δύο παραπάνω ονόµατα δίνονται χωρίς όρισµα, όµως το όρισµα της Μ-συνάρτησης γίνεται αυτόµατα και όρισµα του οδηγού, το οποίο χρησιµοποιείται για τη κλήση του, όπως γίνεται και στη συνάρτηση.

Page 96: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Συναρτήσεις

96

Παράδειγµα Μπορούµε να ορίσουµε τον οδηγό ffindmaximum στη Μ-συνάρτηση findmaximum.m, που γράψαµε στη παράγραφο 5.1.1 για την εύρεση του µεγαλύτερου αριθµού µαζί µε τη θέση του, όπως φαίνεται στο παρακάτω παράδειγµα, >> ffindmaximum=@findmaximum ffindmaximum = @findmaximum

Μια περίπτωση χρήσης του οδηγού αυτού δίνεται παρακάτω, >> a=rand(50,1); >> [z1 z2]=ffindmaximum(a) z1 = 0.9805 z2 = 44

5.2.3 Οδηγός ανώνυµης έκφρασης Με τη χρήση ενός οδηγού, µπορούµε επίσης να ορίσουµε µια

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

driver_name=@(x, y, …) expression(x, y, …);

Το όνοµα του οδηγού στην παραπάνω εντολή δίνεται χωρίς όρισµα, όµως µετά το σύµβολο @, µέσα σε παρενθέσεις, τοποθετείται το όρισµα της συνάρτησης, και µετά τη µεσολάβηση ενός κενού δίνεται η έκφραση που αποδίδεται στον οδηγό. Σηµειώστε ότι ο οδηγός καλείται µε το όρισµα, όπως αυτό ορίζεται µετά το σύµβολο @, στην εντολή ορισµού του οδηγού αυτού.

Page 97: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

5.2 Οδηγός συνάρτησης

97

Παραδείγµατα Στα παρακάτω παραδείγµατα ορίζονται οδηγοί στις ανώνυµες εκφράσεις

21/( 1)x + , και 2 2x y+ , και κατόπιν χρησιµοποιούνται για να υπολογιστούν διάφορες τιµές τους, >> f1=@(x) 1./(x.^2+1); >> f1(1) ans = 0.5000 >> f1([1:0.2:2]) ans = 0.5000 0.4098 0.3378 0.2809 0.2358 0.2000 >> f2=@(x,y) x^2+y^2; >> f2(1, 1) ans = 2 >> f2(1.2,0.8) ans = 2.0800

5.2.4 Ανώνυµος oδηγός Τέλος µπορούµε να ορίσουµε έναν ανώνυµο οδηγό, χωρίς δηλαδή να

του αποδώσουµε ένα όνοµα, για µια µαθηµατική έκφραση. Η διαδικασία αυτή αξιοποιείται µέσα στο όρισµα µιας άλλης συνάρτησης, για να εισαχθεί δηλαδή στη συνάρτηση η συγκεκριµένη αυτή έκφραση, η οποία όµως δεν µπορεί να χρησιµοποιηθεί έξω από τη συγκεκριµένη συνάρτηση. Η εντολή για τον καθορισµό του ανώνυµου οδηγού είναι,

@(x, y, …) expression(x, y, …)

Ένα παράδειγµα εφαρµογής της διαδικασίας αυτής δίνεται παρακάτω

Page 98: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Συναρτήσεις

98

>> quad(@(x) x.^2./(1+x.^2), 0, 1) ans = 0.2146

όπου χρησιµοποιείται η εσωτερική συνάρτηση quad για τον υπολογισµό του

ολοκληρώµατος 1 2 2

0/(1 )x x dx+∫ . Μια άλλη εφαρµογή ενός ανώνυµου

οδηγού δίνεται στη παράγραφο 5.3.1. 5.3 Εφαρµογές Εκτός από τις εφαρµογές των συναρτήσεων που παρουσιάσαµε παραπάνω, θα δώσουµε µερικά ακόµη παραδείγµατα τέτοιων υπολογισµών. Συγκεκριµένα θα δώσουµε ένα παράδειγµα εφαρµογής των συναρτήσεων στον υπολογισµό ολοκληρώµατος, και ένα σε στατιστική ανάλυση δεδοµένων.

5.3.1 Αριθµητικός υπολογισµός ολοκληρώµατος

Ο αριθµητικός υπολογισµός ενός ορισµένου ολοκληρώµατος ∫b

a

dxxf )(

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

ολοκληρώµατος 1

0

(1 )x x dx−∫ , µε τη διαµέριση της περιοχής ολοκλήρωσης

σε δέκα ίσα µέρη και τη δηµιουργία των αντίστοιχων τραπεζίων (διάστικτη γραµµή),

Page 99: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

5.3 Εφαρµογές

99

0.2 0.4 0.6 0.8 1

0.1

0.2

0.3

0.4

Στη γενική περίπτωση, γίνεται διαµέριση του διαστήµατος ολοκλήρωσης σε n υποδιαστήµατα, που καθορίζονται από τις n+1 τιµές του ορίσµατος της συνάρτησης, 1 2 1[ , ,..., ]nx x x + , και το εµβαδόν, σύµφωνα µε τον κανόνα των

τραπεζίων, υπολογίζεται από τη σχέση, 1

1 12

1( ) ( ( ) ( ))( )2

b n

k k k kka

f x dx f x f x x x+

− −=

= + −∑∫ ,

Η Μ-συνάρτηση που δηµιουργείται, για τον υπολογισµό του ολοκληρώ-µατος µε τον κανόνα των τραπεζίων και τη χρήση n σηµείων, δίνεται παρακάτω, και αποθηκεύεται σε αρχείο µε το όνοµα trapez.m . function s=trapez(f,a,b,n) s=0; x=linspace(a,b,n+1); for i=2:n s=s+(f(x(i))+f(x(i-1)))*(x(i)-x(i-1))/2; end

Page 100: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Συναρτήσεις

100

Ως εφαρµογή της παραπάνω συνάρτησης γίνεται ο υπολογισµός, (α) του

ολοκληρώµατος 1

0

(1 )x x dx−∫ µε τη χρήση 1000 σηµείων, αφού πρώτα

καθοριστεί οδηγός για την υπό ολοκλήρωση συνάρτηση, ff=@(x) (1-x)*sqrt(x);

και γίνει κατόπιν κλήση της Μ-συνάρτησης trapez για τον υπολογισµό του ολοκληρώµατος αυτού, trapez(ff,0,1,1000) ans = 0.2667

για σύγκριση, δίνεται η ακριβής τιµή του ολοκληρώµατος που είναι ίση µε 4/16=0.266666... ,

και (β) ο υπολογισµός του ολοκληρώµατος 0

sin( )x dxπ

∫ , µε τη χρήση ενός

ανώνυµου οδηγού, trapez(@sin,0,pi,10000) ans = 2.0000

5.3.2 Στατιστική περιγραφή δεδοµένων Στην ύλη των µαθηµατικών που διδάσκεται στο λύκειο περιλαµβάνεται

πλέον και µια εισαγωγή στη στατιστική ανάλυση δεδοµένων. Οι δύο βασικές ποσότητες για τη στατιστική περιγραφή των δεδοµένων είναι η µέση τιµή και η τυπική απόκλιση (standard deviation). Η µέση τιµή εκφράζει την τιµή γύρω από την οποία είναι διασπαρµένα τα δεδοµένα, ενώ η τυπική απόκλιση δίνει το εύρος της περιοχής µέσα στην οποία βρίσκονται τα περισσότερα απ’ αυτά. Η µέση τιµή των δεδοµένων δίνεται από τη σχέση

1

1 nii

x xn =

= ∑ ,

Page 101: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

5.3 Εφαρµογές

101

και η αµερόληπτη τιµή της τυπικής απόκλισης από τη σχέση

2 21

1 ( )1

nii

s s x xn =

= = −− ∑ ,

όπου n είναι ο αριθµός των δεδοµένων του προβλήµατος. Στο MATLAB υπάρχει ένα εσωτερικό πακέτο που περιέχει εντολές που υπολογίζουν τις ποσότητες αυτές, όµως, ως εφαρµογή του προγραµµατισµού, θα γράψουµε µια συνάρτηση που θα εκτελεί τους υπολογισµούς αυτούς.

Για τον υπολογισµό των ποσοτήτων αυτών δηµιουργείται η εξωτερική συνάρτηση statistics, η οποία δίνεται παρακάτω και αποθηκεύεται στο αρχείο statistics.m, function [xmean sdx]=statistics(x) n=length(x); % evaluation of the mean value xsum=0.; for i=1:n xsum=xsum+x(i); end xmean=xsum/n; % %evaluation of the standard deviation x2sum=0.; for i=1:n x2sum=x2sum+(x(i)-xmean)^2; end sdx=sqrt(x2sum/(n-1));

Ως είσοδος της συνάρτησης αυτής δίνεται µια µονοδιάστατη λίστα που περιέχει τα δεδοµένα, και επιστρέφει τις αριθµητικές τιµές για τη µέση τιµή και την τυπική τους απόκλιση.

Τα δεδοµένα που χρησιµοποιούνται σε τέτοιους υπολογισµούς προκύπτουν συνήθως ως µετρήσεις κάποιου πειράµατος, αλλά στην εφαρµογή που ακολουθεί προσδιορίζονται από ένα «εικονικό πείραµα» που γίνεται στον υπολογιστή, στο οποίο το αποτέλεσµα µιας «µέτρησης» της µεταβλητής y προσοµοιάζεται από το αποτέλεσµα εκτέλεσης της εντολής:

Page 102: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Συναρτήσεις

102

y=2.0+0.5*rand Παρακάτω προσδιορίζουµε 100.000 τιµές του y και υπολογίζουµε τη

µέση τους τιµή και την τυπική τους απόκλιση, a=2+0.5*rand(100000,1); [amean sdx]=statistics(a) amean = 2.2503 sdx = 0.1448

Σηµειώστε ότι σε κάθε καινούργια εκτέλεση της εφαρµογής παίρνουµε διαφορετικό αποτέλεσµα, και αυτό οφείλεται στο γεγονός ότι διαφορετικές εκτελέσεις της εντολής rand δίνουν διαφορετικά δεδοµένα.

5.3.3 Εσωτερικές συναρτήσεις για στατιστικά µεγέθη Παραπάνω γράψαµε µια εξωτερική συνάρτηση για τον υπολογισµό

στατιστικών µεγεθών. Συµπληρωµατικά αναφέρουµε ότι το MATLAB περιέχει µια σειρά από εσωτερικές συναρτήσεις για τον υπολογισµό στατι-στικών µεγεθών. Παρακάτω αναφέρονται µερικές εξ αυτών, οι οποίες εφαρµόζονται στη δισδιάστατη λίστα A=rand(100, 3);

Σηµειώστε ότι επανεκτέλεση της εντολής rand θα αποδώσει διαφορετικά αποτελέσµατα στη λίστα Α, και εποµένως διαφορετικές αριθµητικές τιµές στα παρακάτω παραδείγµατα. 1. Μέση τιµή: εντολή mean. Υπολογίζει τη µέση τιµή των στοιχείων µιας

µονοδιάστατης λίστας µε την εντολή mean(a)

Page 103: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

5.3 Εφαρµογές

103

Όταν το a είναι µια δισδιάστατη λίστα, τότε η εντολή mean(a) υπολογίζει τη µέση τιµή των στοιχείων κάθε στήλης ξεχωριστά, και αποδίδει τα αποτελέσµατα ως µία µονοδιάστατη λίστα-γραµµή. mean(A) ans = 0.5150 0.4961 0.5093 mean(A(:)) ans = 0.5068

2. Τυπική απόκλιση: εντολή std. Υπολογίζει την τυπική απόκλιση των

στοιχείων µιας µονοδιάστατης λίστας µε την εντολή std(a)

Όταν το a είναι µια δισδιάστατη λίστα, τότε η εντολή mean(a) υπολογίζει την τυπική απόκλιση των στοιχείων κάθε στήλης ξεχωριστά, και αποδίδει τα αποτελέσµατα ως µία µονοδιάστατη λίστα-γραµµή. std(A) ans = 0.2633 0.2988 0.2995 std(A(:)) ans = 0.0207

3. ∆ιακύµανση: εντολή var. Υπολογίζει τη διακύµανση των στοιχείων µιας

µονοδιάστατης λίστας µε την εντολή var(a)

Page 104: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Συναρτήσεις

104

Όταν το a είναι µια δισδιάστατη λίστα, τότε η εντολή mean(a) υπολογίζει τη διακύµανση των στοιχείων κάθε στήλης ξεχωριστά, και αποδίδει τα αποτελέσµατα ως µία µονοδιάστατη λίστα-γραµµή. var(A) ans = 0.0693 0.0893 0.0897 var(A(:)) ans = 1.3554e-004

Page 105: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

105

ΚΕΦΑΛΑΙΟ 6

Γραφικά στο Επίπεδο

Οι γραφικές παραστάσεις είναι ένας απλός και εποπτικός τρόπος απόδοσης αποτελεσµάτων, που µας βοηθούν στο να κατανοήσουµε καλύτερα τα φαινόµενα που µελετάµε. Το MATLAB διαθέτει ένα πλήρες και εύχρηστο πακέτο γραφικών, µε το οποίο µπορούµε να αποδώσουµε γραφικά τόσο αριθµητικά δεδοµένα, όσο και συναρτήσεις µιας ή δύο µεταβλητών. Στο παρόν κεφάλαιο θα κάνουµε µια εισαγωγή στις γραφικές παραστάσεις συναρτήσεων µιας µεταβλητής, που αναφέρονται ως γραφικά στο επίπεδο, αφήνοντας τις τρεις διαστάσεις για το κεφάλαιο 8.

6.1 Γραφική παράσταση δεδοµένων - Εντολή plot Η βασική εντολή για τη δηµιουργία µιας γραφικής παράστασης στο MATLAB είναι η εντολή plot. Η εντολή αυτή εκτελεί γραφικές παραστάσεις δεδοµένων στο επίπεδο, και καλείται µε τον παρακάτω τρόπο,

plot(x, y) όπου x και y είναι µονοδιάστατες λίστες που περιέχουν τις x και y συντετα-γµένες των σηµείων αυτών, αντίστοιχα.

Όταν η εντολή δοθεί µε µια µόνο µονοδιάστατη λίστα, π.χ. plot( y)

Page 106: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

106

τότε γίνεται γραφική παράσταση του y ως συνάρτηση του δείκτη των στοιχείων της λίστας. Η διαδικασία αυτή είναι ένας γρήγορος τρόπος επισκόπησης του τρόπου µεταβολής του y. Παράδειγµα Στο παρακάτω παράδειγµα δηµιουργούµε 200 τιµές του x, οµοιόµορφα κατανεµηµένες στο διάστηµα [0, 4π], για τις οποίες υπολογίζουµε την τιµή της συνάρτησης y=cos(x). Τα δεδοµένα αυτά αποθηκεύονται στις λίστες x και y αντίστοιχα, και κατόπι γίνεται η γραφική τους παράσταση, όπως φαίνεται παρακάτω, x=linspace(0, 4*pi, 200); y=cos(x); plot(x,y)

0 2 4 6 8 10 12 14-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Η κλήση της εντολής plot µε µόνο όρισµα το y δίνει plot(y)

Page 107: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.1 Γραφική παράσταση δεδοµένων - Εντολή plot

107

0 20 40 60 80 100 120 140 160 180 200-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

6.1.1 ∆ιαµόρφωση γραφικής παράστασης Στο σχεδιασµό γραφηµάτων, το πρόγραµµα κάνει αυτόµατα µερικές

επιλογές, όπως π.χ. επιλογή της κλίµακας των αξόνων, του εύρους των τιµών τους, κ.τ.λ. Ο χρήστης όµως έχει τη δυνατότητα να τροποποιήσει τις επιλογές αυτές, και να διαµορφώσει το γράφηµα σύµφωνα µε τις απαιτήσεις του. Παρακάτω παρουσιάζουµε µερικές περιπτώσεις διαµόρφωσης γραφήµατος, για περισσότερες όµως πληροφορίες ο χρήστης µπορεί να προστρέξει στο Help του προγράµµατος. 1. Καθορισµός εύρους αξόνων. Η περιοχή των αξόνων που εµφανίζεται

στο διάγραµµα µπορεί να προσδιοριστεί από το χρήστη, τόσο για τον άξονα των τετµηµένων, όσο και για τον άξονα των τεταγµένων. Η εντολή είναι η ακόλουθη,

axis([xmin xmax ymin ymax])

µε τους δύο πρώτους αριθµούς να καθορίζουν τον άξονα των τετµηµένων, και τους δύο επόµενους των τεταγµένων.

2. Τίτλος αξόνων. Η εντολή για τον καθορισµό του τίτλου των αξόνων του

γραφήµατος είναι η ακόλουθη,

Page 108: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

108

xlabel('xlabel_name') ylabel('ylabel_name')

3. Τίτλος σχήµατος. Ο χρήστης µπορεί να ορίσει τίτλο για το σχήµα, µε

την εντολή, title('figure title')

4. Εισαγωγή πλέγµατος. Στο σχήµα µπορεί να δηµιουργηθεί πλέγµα

αξόνων µε την εντολή, grid on

5. Περίγραµµα σχήµατος. Το σχήµα τοποθετείται µέσα σε περίγραµµα µε

την εντολή box on

το οποίο διαγράφεται µε την εντολή

box off

Παράδειγµα Οι παραπάνω εντολές διαµόρφωσης του γραφήµατος εκτελούνται αµέσως µετά την εντολή για την εκτέλεση της γραφικής παράστασης, όπως φαίνεται στο επόµενο παράδειγµα, στο οποίο γίνεται γραφική παράσταση δεδοµένων που περιγράφουν τη συνάρτηση cos( )y t= , t=linspace(0, 4*pi, 200); y=cos(t); plot(t,y) axis([0 4*pi -1 1]) xlabel('time t') ylabel('displacement y') title('Figure 1') grid on

Page 109: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.1 Γραφική παράσταση δεδοµένων - Εντολή plot

109

0 2 4 6 8 10 12-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

time t

disp

lace

men

t y

Figure 1

6. ∆ιαµόρφωση καµπύλης. Εκτός από τις παραπάνω εντολές που

διαµορφώνουν το πλαίσιο του σχήµατος, µπορούµε επίσης να διαµορφώσουµε και την καµπύλη που εµφανίζεται στο σχήµα, µε παραµέτρους που τοποθετούνται ως όρισµα στην εντολή plot. Η τροποποιηµένη µορφή της εντολής plot είναι η ακόλουθη,

plot(x, y, ‘χσγ’) δηλαδή µετά από τη δήλωση των λιστών που περιέχουν τις συντεταγµένες των σηµείων, µπορούν να δοθούν τρεις παράµετροι ως συµβολοσειρά, που οι τιµές τους να διαµορφώσουν τα ακόλουθα χαρακτηριστικά της καµπύλης, χ: Επιλέγει το χρώµα της καµπύλης, σ: Επιλέγει το σύµβολο που θα τοποθετηθεί στις θέσεις των σηµείων, γ: Επιλέγει το είδος της γραµµής. Οι δυνατές επιλογές για τα παραπάνω σύµβολα, µαζί µε την ερµηνεία τους, δίνονται στον επόµενο πίνακα,

Παράµετροι διαµόρφωσης γραφήµατος

Page 110: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

110

Επιλογή χ

Χρώµα Επιλογήσ

Σύµβολο Επιλογή γ

Γραµµή

b Blue . Point - Solid g Green o Circle : Dotted r Red x Cross -. Dash-dot c Cyan + Plus sign -- Dashed m Magenta * Asterisk [κενό] Χωρίς

γραµµή y Yellow s Square k Black d Diamond w White v Triangle (down) ^ Triangle (up) < Triangle (left) > Triangle (right) p Pentagon h Hexagon

Σ’ ένα γράφηµα µπορεί να χρησιµοποιηθεί µόνο ένα µέρος από τις τρεις παραπάνω παραµέτρους διαµόρφωσης, και να παραληφθούν οι υπόλοιπες. Παράδειγµα Στο επόµενο σχήµα γίνεται διαµόρφωση της καµπύλης cos( )x , µε τη χρήση τριών παραµέτρων, x=linspace(0, 4*pi, 50); y=cos(x); plot(x,y,'bx-') axis([0 4*pi -1 1])

Page 111: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.1 Γραφική παράσταση δεδοµένων - Εντολή plot

111

0 2 4 6 8 10 12-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

7. Συµπληρωµατικές παράµετροι για τη διαµόρφωση καµπύλης. Εκτός

από τη διαµόρφωση ενός γραφήµατος µε τις παραπάνω παραµέτρους, µπορεί επίσης να γίνει διαµόρφωση ενός γραφήµατος µε συµπληρω-µατικές παραµέτρους που τοποθετούνται µέσα στην εντολή plot. Τέτοιες παράµετροι είναι:

• Η παράµετρος ‘Color’: Η παράµετρος αυτή τοποθετείται µέσα σε

εισαγωγικά και η τιµή της αποδίδεται µε τη λίστα [R G B], όπου R, G, B αριθµοί µεταξύ µηδενός και ένα που αποδίδουν το ποσοστό του κόκκινου (R), πράσινου (G), και µπλε (B) στο χρώµα της καµπύλης, όπως γίνεται στο παρακάτω παράδειγµα,

plot(x,y,'Color',[1,0,0])

Page 112: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

112

0 2 4 6 8 10 12 14-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

• Η παράµετρος ‘LineWidth’: Στη παράµετρο αυτή αποδίδεται ένας αριθµός που καθορίζει το πάχος της καµπύλης, όπως γίνεται στο παρακάτω παράδειγµα,

plot(x,y,'Color',[1,0,0],'LineWidth',4)

0 2 4 6 8 10 12 14-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Page 113: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.1 Γραφική παράσταση δεδοµένων - Εντολή plot

113

• Η παράµετρος ‘MarkerSize’: Στη παράµετρο αυτή αποδίδεται ένας αριθµός που καθορίζει το µέγεθος των συµβόλων που τοποθετούνται στις θέσεις των σηµείων της καµπύλης, όπως γίνεται στο παρακάτω παράδειγµα,

plot(x,y,'bx-','MarkerSize',10)

0 2 4 6 8 10 12 14-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

8. Εναλλακτικός τρόπος διαµόρφωσης καµπύλης, εντολή set. Εκτός από

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

• Το όρισµα ‘Color’ που διαµορφώνει το χρώµα της καµπύλης. Η

παράµετρος ‘Color’ τοποθετείται µέσα σε εισαγωγικά και η τιµή της

Page 114: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

114

αποδίδεται, µε ένα δεύτερο όρισµα, µε τη λίστα [R G B], όπου R, G, B αριθµοί µεταξύ µηδενός και ένα που αποδίδουν το ποσοστό του κόκκινου (R), πράσινου (G), και µπλε (B) στο χρώµα της καµπύλης, όπως γίνεται στο παρακάτω παράδειγµα,

x=linspace(0, 4*pi, 50); y=cos(x); fig=plot(x,y); set(fig,'Color',[1,0,0])

0 2 4 6 8 10 12 14-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

• Το όρισµα ‘LineWidth’ που διαµορφώνει το πάχος της καµπύλης. Στη παράµετρο αυτή αποδίδεται, µε ένα δεύτερο όρισµα, ένας αριθµός που καθορίζει το πάχος της καµπύλης, όπως γίνεται στο παρακάτω παράδειγµα,

fig=plot(x,y); set(fig,'Color',[1,0,0],'LineWidth',4)

Page 115: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.1 Γραφική παράσταση δεδοµένων - Εντολή plot

115

0 2 4 6 8 10 12 14-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

• Το όρισµα ‘MarkerSize’ που διαµορφώνει το µέγεθος των συµβό-

λων. Στη παράµετρο αυτή αποδίδεται ένας αριθµός, µε ένα δεύτερο όρισµα, που καθορίζει το µέγεθος των συµβόλων που τοποθετούνται στις θέσεις των σηµείων της καµπύλης, όπως γίνεται στο παρακάτω παράδειγµα

fig=plot(x,y,'bx-'); set(fig,'MarkerSize',10)

Page 116: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

116

0 2 4 6 8 10 12 14-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

6.1.2 Εντολή scatter Όταν ενδιαφερόµαστε να αναπαραστήσουµε γραφικά τα σηµεία, χωρίς

όµως να θέλουµε να τα συνδέσουµε µε µια καµπύλη, µπορούµε να χρησιµοποιήσουµε και την εντολή

scatter(x, y, ‘χσ’) Σηµειώστε ότι στην εντολή scatter δεν υπάρχει διαµόρφωση γραµµής. Παράδειγµα Η γραφική παράσταση της συνάρτησης cos( )y x= , µε τη χρήση της εντολής scatter, δίνεται παρακάτω, x=0:0.2:4*pi; y=sin(x); fig1=scatter(x,y,'r+') axis([0 4*pi -1.1 1.1])

Page 117: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.1 Γραφική παράσταση δεδοµένων - Εντολή plot

117

0 2 4 6 8 10 12

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

6.1.3 Εντολή stem Η εντολή stem αποδίδει σηµεία στο επίπεδο, και για κάθε σηµείο

δηµιουργεί επιπλέον και ένα ευθύγραµµο τµήµα, που αποδίδει την τιµή της τεταγµένης του σηµείου αυτού. Η εντολή για τη δηµιουργία του γραφήµατος είναι η ακόλουθη,

stem(x, y) όπου x και y είναι µονοδιάστατες λίστες που περιέχουν τις x και y συντετα-γµένες των σηµείων αυτών, αντίστοιχα.

Όταν η εντολή δίνεται µε µια µόνο µονοδιάστατη λίστα, π.χ. stem( y)

τότε γίνεται γραφική παράσταση του y ως συνάρτηση του δείκτη των στοιχείων στη λίστα.

Παράδειγµα

Page 118: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

118

Στο παρακάτω παράδειγµα χρησιµοποιείται η συνάρτηση sin(x) για τον καθορισµό των τιµών των στοιχείων της λίστας, και κατόπι γίνεται η απόδοση τους γραφικά µε την εντολή stem, a=sin(0:0.1:2*pi); stem(a)

0 10 20 30 40 50 60 70-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

6.2 Πολλαπλές καµπύλες Εκτός από τις περιπτώσεις που παρουσιάσαµε στην προηγούµενη παρά-γραφο, έχουµε τη δυνατότητα, καλώντας µία φορά την εντολή plot, να εκτελέσουµε τη γραφική παράσταση πολλών οµάδων δεδοµένων, η καθεµιά απ’ τις οποίες δίνει και τη µεταβολή µιας διαφορετικής ποσότητας. Η εντολή µε την οποία εκτελείται ένα τέτοιο γράφηµα δίνεται παρακάτω,

plot(x1, y1, ‘χσγ’, x2, y2, ‘χσγ’, …) όπου xi, yi είναι λίστες που έχουν αποθηκευµένες τις συντεταγµένες της i καµπύλης, η καθεµιά απ’ τις οποίες µπορεί να διαµορφωθεί µε διαφορετικό τρόπο µε τις παραµέτρους ‘χσγ’.

Page 119: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.2 Πολλαπλές καµπύλες

119

Παράδειγµα Για τις τιµές της λίστας x υπολογίζονται οι ποσότητες y1=cos(x), και y2=sin(x), οι οποίες αποδίδονται γραφικά στο ίδιο γράφηµα, x=linspace(0, 4*pi, 50); y1=cos(x); y2=sin(x); plot(x,y1,'bx-',x,y2,'r*:') axis([0 4*pi -1 1])

0 2 4 6 8 10 12-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Στην περίπτωση που οι x-συντεταγµένες όλων των καµπυλών του σχήµατος είναι οι ίδιες, τότε οι y-συντεταγµένες διαφορετικών καµπύλων µπορούν να αποθηκευτούν σε διαφορετικές γραµµές µιας λίστας w, και η γραφική τους παράσταση να δοθεί µε την εντολή

plot(x,w) µε την οποία εκτελείται ξεχωριστά η γραφική παράσταση κάθε γραµµής της λίστας w ως συνάρτηση του x. Παράδειγµα ∆ίνεται παρακάτω η γραφική παράσταση των καµπυλών y=cos(x) και y=sin(x), τα δεδοµένα των οποίων έχουν αποθηκευτεί στη λίστα w,

Page 120: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

120

x=linspace(0, 3*pi, 200); y1=cos(x); y2=sin(x); w=[y1;y2]; plot(x,w)

0 1 2 3 4 5 6 7 8 9-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

6.2.1 Εντολή hold on Στις παραπάνω εφαρµογές δηµιουργήσαµε, µε µία εντολή, περισσότερες

από µία γραφικές παραστάσεις. Επίσης, στις παραπάνω εφαρµογές, κάθε νέα κλήση της εντολής plot διέγραφε τυχόν προϋπάρχον παράθυρο γραφικών, και στη θέση του εµφανιζόταν το καινούργιο, µε τη νέα γραφική παράσταση. Υπάρχει όµως και η δυνατότητα να προσθέσουµε σε υπάρχουσα γραφική παράσταση νέες καµπύλες, µε διαδοχικές κλήσεις της εντολής plot. Για να γίνει αυτό θα πρέπει µε το πέρας της εκτέλεσης της πρώτης καµπύλης να δοθεί η εντολή

hold on

Page 121: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.2 Πολλαπλές καµπύλες

121

ώστε να παραµείνει ενεργό το παράθυρο που περιέχει την αρχική γραφική παράσταση, και µετά να δοθεί η εντολή για τις νέες γραφικές παραστάσεις. Στο τέλος της διαδικασίας δίνεται η εντολή

hold off

ώστε να απενεργοποιηθεί η εντολή hold on. Παράδειγµα Το παρακάτω γράφηµα, για τις καµπύλες y=cos(x), και y=sin(x), δηµιουργείται µε τη χρήση της εντολής hold on x=linspace(0, 3*pi, 200); y1=cos(x); y2=sin(x); plot(x,y1,'b-') axis([0 3*pi -1 1]) hold on plot(x,y2,'r:') hold off

0 1 2 3 4 5 6 7 8 9-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Page 122: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

122

6.3 Πολλαπλές εικόνες Στο MATLAB υπάρχει η δυνατότητα να δηµιουργηθεί ένα πλέγµα από γραφικές παραστάσεις, µε τη χρήση της εντολής

subplot(n, m, i) η οποία δηµιουργεί ένα πλέγµα n m× θέσεων για τη γραφική παράσταση

*n m γραφηµάτων. Για να προστεθεί µια γραφική παράσταση στη θέση i του πλέγµατος αυτού, δίνεται πρώτα η εντολή subplot(n, m, i), οπότε ενεργοποιείται το παράθυρο στη θέση αυτή, και µετά δίνεται η εντολή plot για τη δηµιουργία της γραφικής παράστασης. Η προσµέτρηση των γραφηµάτων γίνεται γραµµή-γραµµή. Παράδειγµα Να δηµιουργηθεί ένα πλέγµα 2 2× γραφηµάτων, όπου στην πρώτη θέση να δοθεί η γραφική παράσταση της συνάρτησης sin( )y x= , στη δεύτερη της

2sin( )y x= , στην τρίτη της 24 /(4 )y x= + , και στη τέταρτη της sin( )xy e x−= . Πρώτα δηµιουργούνται οι λίστες µε τα σηµεία που θα απεικο-

νιστούν, και µετά γίνεται η αναπαράσταση τους, x1=linspace(0,2*pi,50); y1=sin(x1); y2=sin(x1).^2; x2=linspace(0,10,50) y3=4./(4+x2.^2); y4=exp(-x2).*sin(x2); subplot(2,2,1) plot(x1,y1) axis([0 2*pi -1.1 1.1]) title('Figure 1: sin(x)') subplot(2,2,2) plot(x1,y2) axis([0 2*pi 0 1.1]) title('Figure 2: sin(x)^2') subplot(2,2,3) plot(x2,y3)

Page 123: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.4 Γραφική παράσταση συνάρτησης – Εντολή ezplot

123

axis([0 5 0 1.1]) title('Figure 3: 4/(4+x^2)') subplot(2,2,4) plot(x2,y4) axis([0 6 -0.1 0.5]) title('Figure 4: exp(-x) sin(x)')

0 2 4 6-1

-0.5

0

0.5

1Figure 1: sin(x)

0 2 4 60

0.5

1

Figure 2: sin(x)2

0 1 2 3 4 50

0.5

1

Figure 3: 4/(4+x2)

0 2 4 6

0

0.2

0.4

Figure 4: exp(-x) sin(x)

6.4 Γραφική παράσταση συνάρτησης – Εντολή ezplot Εκτός από τις γραφικές παραστάσεις δεδοµένων, το MATLAB έχει τη δυνατότητα να εκτελέσει και γραφικές παραστάσεις συναρτήσεων, µε τη χρήση της εντολής ezplot. Όπως όµως αναφέραµε στη παράγραφο 5.2, δεν είναι δυνατόν να χρησιµοποιηθεί άµεσα ως όρισµα της εντολής ezplot µια άλλη συνάρτηση, αλλά θα πρέπει στη θέση της να χρησιµοποιηθεί ένας οδηγός, µε τον παρακάτω τρόπο,

ezplot( function_driver, [ xmin, xmax] )

Page 124: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

124

η οποία δίνει τη γραφική παράσταση της συνάρτησης που συνδέεται µε τον οδηγό, για τιµές της παραµέτρου x στο διάστηµα [xmin, xmax]. Όταν η εντολή για τη γραφική παράσταση δεν καθορίζει όρια, τότε δίνεται στο διάστηµα [-2π, 2π]. Παράδειγµα Στο επόµενο παράδειγµα ορίζουµε οδηγό για τη συνάρτηση y=sin(x), µε το όνοµα fsin, και µετά εκτελούµε τη γραφική της παράσταση, fsin=@sin; ezplot(fsin, [0, 5*pi])

0 5 10 15-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Μπορούµε επίσης να εκτελέσουµε τη γραφική παράσταση µιας συνάρτησης µε τη χρήση ενός ανώνυµου οδηγού, µε τον ακόλουθο τρόπο,

ezplot(@function_name, [ xmin, xmax] ) µε function_name το όνοµα της συνάρτησης. Παράδειγµα

Page 125: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.4 Γραφική παράσταση συνάρτησης – Εντολή ezplot

125

Μπορούµε να εκτελέσουµε τη γραφική παράσταση της συνάρτησης cos(x) µε τον ακόλουθο τρόπο, ezplot(@cos)

-6 -4 -2 0 2 4 6

-1

-0.5

0

0.5

1

x

cos

Τέλος, µπορούµε να εκτελέσουµε τη γραφική παράσταση ανώνυµης έκφρασης, µε τον παρακάτω τρόπο, ezplot(@(x) sin(x)/(1+x), [0,6*pi])

0 2 4 6 8 10 12 14 16 18-0.2

-0.1

0

0.1

0.2

0.3

0.4

0.5

Page 126: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

126

6.5 Αποτύπωση πειραµατικών σφαλµάτων Σ’ ένα πείραµα, οι πειραµατικές µετρήσεις συνοδεύονται από το σφάλµα που υπεισέρχεται στη µέτρηση τους. Π.χ. η θέση y(t) ενός κινητού, τη χρονική στιγµή t, είναι γνωστή µε µια ακρίβεια ∆y(t). Στην περίπτωση αυτή µπορούµε να αποθηκεύσουµε τις χρονικές στιγµές της µέτρησης στη λίστα t, τις θέσεις του κινητού στη λίστα y, και τα σφάλµατα στις µετρήσεις στη λίστα ey. Τα αποτελέσµατα αυτά µπορούν να παρασταθούν γραφικά, µε τις συντεταγµένες , ii yt να δηλώνουν το σηµείο στο διάγραµµα, και το

σφάλµα να δηλώνεται µε τον καθορισµό ενός εύρους iey γύρω από το

σηµείο της µέτρηση, µε την εντολή errorbar(t, y, ey, ‘χσγ’ )

[1] Σ’ ένα «εικονικό πείραµα», θεωρούµε ότι το αποτέλεσµα µιας

«µέτρησης» προσοµοιάζεται από τη συνάρτηση ( ) sin( / 2)y t t= , το δε «σφάλµα» της θεωρείται ότι είναι ίσο µε το 10% της τιµής του y. Η γραφική αναπαράσταση των «µετρήσεων» αυτών, µαζί µε τα σφάλµατα τους, δίνεται παρακάτω,

t=0:0.2:12; y=sin(t/2); ey=0.1*y; plot(t,y) errorbar(t,y,ey) axis([0 12 -1.2 1.2])

Page 127: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.6 Ιστογράµµατα

127

0 2 4 6 8 10 12

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

6.6 Ιστογράµµατα Σε µερικά προβλήµατα, τις αριθµητικές τιµές µιας παραµέτρου, που είναι διασπαρµένες σε µια περιοχή, τις ταξινοµούµε (οµαδοποιούµε) σε ένα µικρό πλήθος οµάδων, µε κάθε µια από τις εµφανιζόµενες τιµές να εντάσσεται σε µία µόνο οµάδα. Κάθε οµάδα αντιπροσωπεύει και µια περιοχή τιµών, της οποίας το εύρος επιλέγεται να είναι µικρό σε σχέση µε το συνολικό εύρος, οπότε οι τιµές που ανήκουν σε µια οµάδα µπορεί να θεωρηθεί ότι «αντιπροσωπεύονται» από την κεντρική τιµή της οµάδας. Η γραφική παράσταση των οµαδοποιηµένων δεδοµένων γίνεται µε το λεγόµενο ιστόγραµµα. Στον οριζόντιο άξονα της γραφικής παράστασης του ιστογράµµατος δηλώνονται τα όρια των επιµέρους περιοχών, και στη συνέχεια κατασκευάζονται διαδοχικά ορθογώνια µε το εµβαδόν τους να είναι ανάλογο µε το πλήθος των στοιχείων της οµάδας.

Το MATLAB έχει τη δυνατότητα κατασκευής ιστογραµµάτων. Αποθηκεύοντας στη λίστα x τους αριθµούς που καθορίζουν τα όρια των περιοχών, και στη y τα δεδοµένα που θα παρασταθούν γραφικά µε το ιστόγραµµα, δηµιουργούµε το ιστόγραµµα δεδοµένων µε την εντολή

hist (y, x )

Page 128: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

128

Όταν η εντολή δοθεί µε µόνο όρισµα τη λίστα y των δεδοµένων, π.χ. hist( y)

τότε το πρόγραµµα επιλέγει αυτόµατα τα όρια των περιοχών. Η διαδικασία αυτή είναι ένας γρήγορος τρόπος επισκόπησης του ιστογράµµατος του y, ώστε κατόπι να µπορέσουµε να επιλέξουµε τις κατάλληλες περιοχές. Παράδειγµα ∆ηµιουργείστε ένα σύνολο Ν=5000 τυχαίων αριθµών που παράγονται από την κανονική κατανοµή µε µέση τιµή µηδέν και διασπορά ένα, και κατασκευάστε το ιστόγραµµα τους. Συγκρίνετε το αποτέλεσµα αυτό µε τη θεωρητική καµπύλη.

Η θεωρητική συνάρτηση της κανονικής κατανοµής Ν(1, 0) είναι η ακόλουθη

21( ) exp( / 2)2

P x xπ

= − ,

και η πρόβλεψη της για τον αριθµό των σηµείων µέσα σε ένα εύρος h γύρο

από τη θέση x, δίνεται από τη σχέση 21 exp( / 2)2

n N h xπ

= × × − , όπου Ν ο

συνολικός αριθµός των τυχαίων αριθµών. Το ιστόγραµµα της κατανοµής των τυχαίων αριθµών, µαζί µε τη

θεωρητική πρόβλεψη, δίνεται παρακάτω, x=-2.9:0.2:2.9; y=randn(5000,1); hist(y,x) hold on ezplot(@(x) 5000*0.2*exp(-x^2/2)/sqrt(2*pi),[-3 3],'r') hold off

Page 129: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.7 Ηµιλογαριθµικές και λογαριθµικές κλίµακες

129

-3 -2 -1 0 1 2 30

50

100

150

200

250

300

350

400

450

6.7 Ηµιλογαριθµικές και λογαριθµικές κλίµακες Οι γραφικές παραστάσεις που παρουσιάστηκαν µέχρι τώρα αναφέρονται σε περιπτώσεις όπου οι άξονες είναι γραµµικοί. Όµως, σε αρκετές περιπτώσεις η προκύπτουσα µεταβολή τιµών είναι τέτοια που είναι προτιµότερο, για την καλύτερη παρουσίαση των αποτελεσµάτων, να χρησιµοποιηθεί λογαριθµική κλίµακα. Η λογαριθµική αυτή κλίµακα µπορεί να αφορά είτε τον έναν, τον x ή y άξονα, είτε και τους δύο άξονες, και η αντίστοιχη εντολή για τη δηµιουργία της γραφικής παράστασης είναι

semilogx, semilogy, και loglog Στις δύο πρώτες δηλαδή περιπτώσεις δηµιουργείται ένα ηµιλογαριθµικό διάγραµµα µε τον άξονα x ή y ηµιλογαριθµικό αντίστοιχα, και στην τελευ-ταίαν ένα λογαριθµικό διάγραµµα.

Page 130: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

130

[1] Ένα παράδειγµα µιας ηµιλογαριθµικής γραφικής παράστασης, µε λογαριθµικό άξονα των y, είναι η γραφική παράσταση δεδοµένων που προκύπτουν από τη συνάρτηση ( ) exp( )f x x= :

x=0.0:0.5:10; y=exp(x); semilogy(x,y)

0 1 2 3 4 5 6 7 8 9 10100

101

102

103

104

105

[2] Ένα δεύτερο παράδειγµα µιας ηµιλογαριθµικής γραφικής παράστασης,

µε λογαριθµικό άξονα των x, είναι η γραφική παράσταση δεδοµένων που προκύπτουν από τη συνάρτηση log( ) 2y x= + :

x=1:2:100; y=log(x)+2; semilogx(x,y)

Page 131: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.7 Ηµιλογαριθµικές και λογαριθµικές κλίµακες

131

100 101 1022

2.5

3

3.5

4

4.5

5

5.5

6

6.5

7

[3] Τέλος ένα άλλο παράδειγµα λογαριθµικής γραφικής παράστασης, είναι

η γραφική παράσταση δεδοµένων που προκύπτουν από τη συνάρτηση 4y x= :

x=1:2:100; y=x.^4; loglog(x,y)

Page 132: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

132

100 101 102100

101

102

103

104

105

106

107

108

6.8 Πολικά διαγράµµατα Η εξίσωση µιας επίπεδης καµπύλης, σε πολικές συντεταγµένες, έχει τη µορφή r=f(θ), και µας δίνει την απόσταση των σηµείων της καµπύλης από την αρχή των αξόνων ως συνάρτηση της πολικής γωνίας θ. Μπορούµε να δηµιουργήσουµε το πολικό διάγραµµα της καµπύλης αυτής, είτε µε τη χρήση αριθµητικών δεδοµένων που απεικονίζουν τη συνάρτηση, είτε µε τη γραφική παράσταση της ίδιας της συνάρτησης.

6.8.1 Πολικό διάγραµµα δεδοµένων – εντολή polar Για τη δηµιουργία του πολικού διαγράµµατος από δεδοµένα, πρέπει

πρώτα να δηµιουργήσουµε τα δεδοµένα αυτά, , i irθ , τα οποία

αποθηκεύουµε σε ξεχωριστές λίστες. Έστω ότι οι λίστες αυτές είναι οι theta και rho αντίστοιχα, τότε η εντολή για το γράφηµα είναι

polar (theta, rho, ‘χσγ’ )

Παράδειγµα Να σχεδιαστεί το πολικό διάγραµµα της συνάρτησης 2sin (2 )r θ= , δηµιουργώντας πρώτα τις λίστες µε τα δεδοµένα,

Page 133: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.8 Πολικά διαγράµµατα

133

th=linspace(0, 2*pi, 150); rth=sin(2*th).^2; polar(th, rth)

0.2

0.4

0.6

0.8

1

30

210

60

240

90

270

120

300

150

330

180 0

6.8.2 Πολικό διάγραµµα συνάρτησης – εντολή ezpolar Η εντολή ezpolar εκτελεί το πολικό γράφηµα µιας συνάρτηση r=f(θ), µε

τον ακόλουθο τρόπο, ezpolar( @(θ) f(θ), [ θmin, θmax] )

όπου χρησιµοποιείται ένας ανώνυµος οδηγός για την εισαγωγή της συνάρτησης που θέλουµε να παραστήσουµε γραφικά. Παράδειγµα Να σχεδιαστεί το πολικό διάγραµµα της συνάρτησης 2sin (2 )r θ= . ezpolar( @(t) (sin(2*t)).^2,[0,2*pi])

Page 134: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

134

0.2

0.4

0.6

0.8

1

30

210

60

240

90

270

120

300

150

330

180 0

r = (sin(2 t))2 6.9 Παραµετρικές καµπύλες - Πεπλεγµένες συναρτήσεις Στις συνηθισµένες γραφικές παραστάσεις στο επίπεδο, δίνεται η συντεταγ-µένη y ως συνάρτηση της x µε µια εξίσωση της µορφής ( )y f x= . Σε µερικές όµως περιπτώσεις, η εξάρτηση του y από το x δίνεται είτε σε παραµετρική µορφή, είτε σε πεπλεγµένη µορφή. Τις γραφικές παραστάσεις στις δύο αυτές περιπτώσεις θα εξετάσουµε παρακάτω.

6.9.1 Γραφική παράσταση παραµετρικής καµπύλης Στην περίπτωση µιας παραµετρικής καµπύλης στο επίπεδο, οι

συντεταγµένες x και y δίνονται ως συναρτήσεις µιας ανεξάρτητης µετα-βλητής, π.χ. της t, µε τη µορφή ( )x x t= και ( )y y t= . Η γραφική παράσταση της καµπύλης αυτής εκτελείται µε την εντολή,

ezplot(@(t) x(t), @(t) y(t), [tmin, tmax])

στην οποία χρησιµοποιούνται οδηγοί για την εισαγωγή των συναρτήσεων x(t) και y(t) στην εντολή ezplot. Στην περίπτωση που δεν καθοριστεί πεδίο τιµών της µεταβλητής t, τότε το γράφηµα εκτελείται στο πεδίο τιµών 0<t<2π.

Page 135: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.9 Παραµετρικές καµπύλες - Πεπλεγµένες συναρτήσεις

135

Παράδειγµα [1] Η γραφική παράσταση της παραµετρικής καµπύλης cos(2t), sin(3t),

για t στο διάστηµα [0, 2π], δίνεται παρακάτω, ezplot(@(t) sin(2*t), @(t) cos(3*t), [0,2*pi])

-1 -0.5 0 0.5 1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

x

y

x = sin(2 t), y = cos(3 t)

6.9.2 Γραφική παράσταση πεπλεγµένης συνάρτησης Αρκετά συχνά, η συνάρτηση που θέλουµε να παραστήσουµε γραφικά

δίνεται σε πεπλεγµένη µορφή ως εξίσωση F(x, y)=0, η οποία γενικά δεν µπορεί να επιλυθεί ως προς y. Το MATLAB έχει τη δυνατότητα να εκτελέσει γραφικές παραστάσεις τέτοιων πεπλεγµένων συναρτήσεων µε την εντολή:

ezplot(@(x, y) F(x, y), [ xmin, xmax, ymin, ymax])

στην οποία χρησιµοποιείται οδηγός για την εισαγωγή της συνάρτησης δύο µεταβλητών F(x, y) στην εντολή ezplot. Στην περίπτωση που δεν καθοριστεί πεδίο τιµών για τις µεταβλητές x και y, τότε το γράφηµα εκτελείται για το πεδίο τιµών -2π<x<2π και -2π<y<2π.

Page 136: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Επίπεδο

136

Παράδειγµα Να κατασκευαστεί η γραφική παράσταση της συνάρτησης 2 2 4x y− = , στο πεδίο περιοχής τιµών 5 , 5x y− < < . ezplot(@(x,y) x.^2-y.^2-4,[-5,5,-5,5])

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

-3

-2

-1

0

1

2

3

4

x

y

x2-y2-4 = 0

Αν δοθεί η εντολή χωρίς να καθοριστεί περιοχή τιµών, παίρνουµε ezplot(@(x,y) x.^2-y.^2-4)

-6 -4 -2 0 2 4 6-6

-4

-2

0

2

4

6

x

y

x2-y2-4 = 0

Page 137: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

6.9 Παραµετρικές καµπύλες - Πεπλεγµένες συναρτήσεις

137

Page 138: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

ΚΕΦΑΛΑΙΟ 7

138

ΚΕΦΑΛΑΙΟ 7

∆ιαχείριση του MATLAB

Στο παρόν κεφάλαιο παραθέτονται µερικές χρήσιµες πληροφορίες σχετικά µε τη διαχείριση του MATLAB. Περισσότερες πληροφορίες µπορείτε να βρείτε στο Help του προγράµµατος και σε ειδικά βιβλία.

7.1 Βασικά µέρη του προγράµµατος Τα βασικά µέρη του MATLAB, τα οποία και αξιοποιεί ο χρήστης για την εκτέλεση των πράξεων, είναι τα ακόλουθα,

1. Παράθυρο διαχείρισης (Command Window) 2. Βασικός χώρος λειτουργίας (Workspace) του προγράµµατος, 3. Ενεργός διεύθυνση αποθήκευσης (Current Directory), και 4. Αρχείο καταχώρισης εντολών (Command History).

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

7.1.1 Παράθυρο διαχείρισης (Command Window) Το παράθυρο διαχείρισης εµφανίζεται µε την έναρξη του προγράµ-

µατος, και µέσα σ’ αυτό γράφονται οι εντολές, δίνεται η εντολή εκτέλεσης

Page 139: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

7.1 Βασικά µέρη του προγράµµατος

139

τους, και εµφανίζονται τα αποτελέσµατα των πράξεων, γίνονται δηλαδή όλες οι αλληλεπιδράσεις του χρήστη µε το πρόγραµµα.

7.1.2 Βασικός χώρος λειτουργίας (Workspace) Ο χώρος διεκπεραίωσης των πράξεων είναι ο βασικός χώρος

λειτουργίας του προγράµµατος (Workspace). Ο χώρος αυτός βρίσκεται στη µνήµη του υπολογιστή, µέσα στον οποίο εκτελούνται οι πράξεις και ταυτόχρονα διατηρούνται όλα τα αποτελέσµατα, τα οποία µπορούν να χρησιµοποιηθούν σε επόµενες πράξεις.

7.1.3 Ενεργός διεύθυνση αποθήκευσης (Current directory) Μέσα από το παράθυρο διαχείρισης του MATLAB υπάρχει η

δυνατότητα να δοθεί εντολή αποθήκευσης δεδοµένων σε αρχείο, ή ανάγνωσης δεδοµένων από αρχείο. Τα αρχεία αυτά αποθηκεύονται σε κάποια διεύθυνση, ή ανακτώνται από κάποια διεύθυνση του σκληρού δίσκου του υπολογιστή. Θα πρέπει λοιπόν να καθορίζεται σε ποια διεύθυνση θα κατευθυνθεί ο υπολογιστής για να εκτελέσει τη λειτουργία αυτή. Για το σκοπό αυτό έχει προκαθορισθεί, από τον κατασκευαστή του προγράµµατος, ως ενεργός διεύθυνση αποθήκευσης (current directory) η διεύθυνση work που βρίσκεται µέσα στη κεντρική διεύθυνση εγκατάστασης του MATLAB. Όταν λοιπόν µέσα από το MATLAB δοθεί η εντολή για αποθήκευση ενός αρχείου, χωρίς να προσδιοριστεί από το χρήστη διεύθυνση αποθήκευσης, τότε το πρόγραµµα αποθηκεύει το αρχείο στην προεπιλεγµένη για το σκοπό αυτό διεύθυνση. Όταν όµως καθοριστεί από το χρήστη και η διεύθυνση στην οποία θα πρέπει να γίνει η αποθήκευση, τότε το πρόγραµµα αγνοεί την ενεργό διεύθυνση αποθήκευσης και κατευθύνεται στη διεύθυνση που έχει οριστεί.

Ο χρήστης έχει επίσης τη δυνατότητα να αλλάξει την προεπιλεγµένη διεύθυνση αποθήκευσης, και να την αντικαταστήσει µε µια άλλη διεύθυνση της αρεσκείας του. Η διαδικασία αυτή εκτελείται µέσα από το παράθυρο διαχείρισης του προγράµµατος, όπου στη µπάρα της πρώτης σελίδας του προγράµµατος, και δίπλα στο παράθυρο µε την ετικέτα Current Directory, εµφανίζεται εικονίδιο µε τρεις τελείες, το οποίο µε την ενεργοποίηση του µε

Page 140: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

∆ιαχείριση του MATLAB

140

τον κέρσορα του «ποντικιού», εµφανίζει το παράθυρο που δείχνεται παρακάτω, το οποίο µας καθοδηγεί στο να ορίσουµε την καινούργια ενεργό διεύθυνση αποθήκευσης (µέσα από το εικονίδιο Make New Folder).

7.1.4 Αρχείο καταχώρησης εντολών (Command History) Οι εντολές που εκτελούνται µέσα από το παράθυρο διαχείρισης,

καταχωρούνται στο αρχείο καταχώρησης εντολών (Command History) του προγράµµατος. Μια εντολή που εκτελέστηκε προγενέστερα, µπορεί να επαναφερθεί στο παράθυρο διαχείρισης για εκτέλεση, µε τη χρήση των πλήκτρων ↑ και ↓. Μετά την επαναφορά, έχουµε τη δυνατότητα πρώτα να την τροποποιήσουµε και µετά να την εκτελέσουµε.

Page 141: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

7.2 ∆ιαµόρφωση της εµφάνισης των αποτελεσµάτων

141

7.2 ∆ιαµόρφωση της εµφάνισης των αποτελεσµάτων Η εκτέλεση των πράξεων µε δεκαδικούς αριθµούς γίνεται στη µνήµη του υπολογιστή µε ακρίβεια 16 ψηφίων. Τα αποτελέσµατα των πράξεων όµως, όταν εµφανίζονται στο παράθυρο διαχείρισης, εµφανίζονται µε µικρότερο αριθµό ψηφίων. Η τρόπος εµφάνισης τους καθορίζεται από το FORMAT που χρησιµοποιείται για το σκοπό αυτό, και δεν επηρεάζει τα αποτελέσµατα που υπάρχουν στη µνήµη του υπολογιστή. Με την εντολή

help format

εµφανίζονται στην οθόνη οι δυνατές επιλογές FORMAT που µπορούν να χρησιµοποιηθούν από το χρήστη. Οι βασικότερες απ’ αυτές δίνονται παρακάτω. FORMAT may be used to switch between different output display formats of all float variables as follows: FORMAT SHORT Scaled fixed point format with 5 digits. FORMAT LONG Scaled fixed point format with 15 digits for double and 7 digits for single. FORMAT SHORT E Floating point format with 5 digits. FORMAT LONG E Floating point format with 15 digits for double and 7 digits for single. FORMAT SHORT G Best of fixed or floating point format with 5 digits. FORMAT LONG G Best of fixed or floating point format with 15 digits for double and 7 digits for single. FORMAT SHORT ENG Engineering format that has at least 5 digits and a power that is a multiple of three FORMAT LONG ENG Engineering format that has exactly 16

significant digits and a power that is a multiple of three. Με την έναρξη του προγράµµατος ενεργοποιείται η επιλογή FORMAT SHORT. Έχουµε όµως τη δυνατότητα να αντικαταστήσουµε την επιλογή αυτή µε FORMAT της αρεσκείας µας. Η εντολή για το σκοπό αυτό είναι

format new-format

Page 142: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

∆ιαχείριση του MATLAB

142

Παρακάτω δίνεται ένα παράδειγµα τροποποίησης του FORMAT σε LONG E, και του υπολογισµού της τιµής του 2 µε τη νέα επιλογή, format long e a=sqrt(2) ans = 1.414213562373095e+000

Μετά την ενεργοποίηση του νέου FORMAT, όλα τα αποτελέσµατα τυπώνονται µε τη νέα επιλογή, µέχρι της αντικατάστασης του. 7.3 ∆ιαχείριση χώρου λειτουργίας (workspace) Όπως αναφέρθηκε στη παράγραφο 7.1.2, ο χώρος διεκπεραίωσης των πράξεων, στη µνήµη του υπολογιστή, είναι ο βασικός χώρος λειτουργίας του προγράµµατος (Workspace). Στο χώρο αυτό διατηρούνται όλα τα αποτελέσµατα των πράξεων, µέχρι τη διαγραφή τους ή το κλείσιµο του προγράµµατος. Πολλές φορές όµως, προκύπτει η ανάγκη διατήρησης των αποτελεσµάτων που έχουν παραχθεί σε µια χρήση του προγράµµατος, για αξιοποίηση σε µεταγενέστερες χρήσεις, για να αποφευχθεί η επανάληψη των πράξεων αυτών. Η διαδικασία αυτή διεκπεραιώνεται µε την αποθήκευση, σ’ ένα αρχείο, του χώρου λειτουργίας του προγράµµατος που προέκυψε από τη χρήση αυτή, µαζί µε το περιεχόµενο του. Με τον τρόπο αυτό αποθηκεύονται όλα τα δεδοµένα που υπάρχουν στο χώρο λειτουργίας, και ανακαλώντας το αρχείο στο οποίο είναι αποθηκευµένα, ανακτούµε τα αποτελέσµατα αυτά, και µπορούµε να τα χρησιµοποιήσουµε σε µετέπειτα χρήσεις. Προτού αποθηκεύσουµε το χώρο λειτουργίας, είναι χρήσιµο να διαγράψουµε τυχόν περιττές παραµέτρους που βρίσκονται σ’ αυτόν. Για να δούµε πρώτα-πρώτα τις µεταβλητές που βρίσκονται στο χώρο αυτόν εκτελούµε την εντολή who, π.χ. who Your variables are: a ans

Page 143: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

7.3 ∆ιαχείριση χώρου λειτουργίας (workspace)

143

Για να διαγράψουµε δε τις περιττές µεταβλητές χρησιµοποιούµε την εντολή clear, όπως αναλύθηκε στην παράγραφο 1.5. Αποθήκευση χώρου λειτουργίας Η εντολή για την αποθήκευση του χώρου λειτουργίας, ως σύνολο, είναι η ακόλουθη,

save file_name Με την εντολή αυτή γίνεται αποθήκευση του χώρου λειτουργίας, µαζί µε τις παραµέτρους που υπάρχουν σ’ αυτό, στο αρχείο µε τ’ όνοµα file_name.mat. Το αρχείο αυτό τοποθετείται στην ενεργό διεύθυνση αποθήκευσης του προγράµµατος. Εάν δεν δοθεί όνοµα αρχείου, αποθηκεύεται στο αρχείο MATLAB.mat, π.χ. save Saving to: MATLAB.mat

Εάν θέλουµε να αποθηκεύσουµε µόνο ένα µέρος των αποτελεσµάτων του χώρου, χωρίς να διαγράψουµε τις υπόλοιπες µεταβλητές από τη µνήµη του υπολογιστή, µπορούµε να εκτελέσουµε την αποθήκευση µε την εντολή

save file_name var1 var2 … µε var1, var2, … τα ονόµατα των παραµέτρων που θέλουµε να αποθηκεύσουµε στο αρχείο. Ανάκληση χώρου λειτουργίας Χώρος λειτουργίας που έχει αποθηκευτεί, µπορεί να ανακληθεί µε την εντολή

load file_name Με την εντολή αυτή γίνεται ανάκληση του αρχείου, µε τ’ όνοµα file_name.mat, από την ενεργό διεύθυνση του υπολογιστή. Με τη διαδικασία αυτή ανακτώνται στη µνήµη του υπολογιστή όλα τα αποτελέσµατα που είχαν

Page 144: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

∆ιαχείριση του MATLAB

144

αποθηκευθεί στο αρχείο, και µπορούν κατόπι να αξιοποιηθούν για περαιτέρω υπολογισµούς. Εάν δεν δοθεί όνοµα αρχείου, ανακαλείται το αρχείο MATLAB.mat, π.χ. load Loading from: MATLAB.mat

∆ιαγραφή αρχείου Ένα αρχείο που βρίσκεται αποθηκευµένο σε µια διεύθυνση του δίσκου, µπορεί να διαγραφεί µε την εντολή,

delete file_name όπου το file_name περιέχει το όνοµα και τη διεύθυνση του αρχείου. Όταν δεν δηλωθεί διεύθυνση, τότε το αναζητά στην ενεργό διεύθυνση αποθή-κευσης του προγράµµατος. Π.χ. µε την εντολή delete MATLAB.mat

διαγράφεται το αρχείο MATLAB.mat από την ενεργό διεύθυνση αποθή-κευσης του προγράµµατος, ενώ µε την εντολή delete *.mat

διαγράφονται όλα τα αρχεία στην ενεργό διεύθυνση αποθήκευσης που έχουν στην κατάληξη .mat. 7.4 Αποθήκευση παραµέτρων σε αρχεία ASCII Στην προηγούµενη παράγραφο παρουσιάσαµε τη διαδικασία αποθήκευσης µέρους ή του συνόλου του χώρου λειτουργίας, σε αρχείο µε κατάληξη .mat. Τα αρχεία αυτά είναι γραµµένα σε γλώσσα µηχανής και δεν είναι προσιτά για άµεση ανάγνωση από το χρήστη. Εκτός από τα αρχεία αυτά, έχουµε τη δυνατότητα να αποθηκεύουµε αποτελέσµατα σε αρχεία ASCII που είναι

Page 145: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

7.5 Εντολές input και pause

145

προσιτά για άµεση ανάγνωση. Παράµετροι, που περιέχουν αριθµητικά αποτελέσµατα, µπορούν να αποθηκευτούν στο δίσκο, σε αρχείο ASCII, µε την εντολή:

save(’filename’, ’ a’ , ’b’ ,...’-ascii’) η οποία αποθηκεύει τις παραµέτρους a, b, … στο αρχείο filename. Τα δεδοµένα για τις παραµέτρους a, b,… τοποθετούνται το ένα µετά το άλλο.

Όταν το όνοµα του αρχείου, filename, δεν περιλαµβάνει διεύθυνση, τότε τοποθετείται στην ενεργό διεύθυνση αποθήκευσης του προγράµµατος, διαφορετικά στη διεύθυνση που δηλώνεται. Το όνοµα του αρχείου, µαζί µε τη διεύθυνση στην οποία αποθηκεύεται, µπορεί να έχει τη δοµή µιας από τις παρακάτω εντολές,

Directory\filename Directory/filename

Στον πρώτο τρόπο, µε το σύµβολο \, ακολουθείται ο συµβολισµός των Windows, ενώ στο δεύτερο, µε το σύµβολο /, ο συµβολισµός του Unix. Το MATLAB αποδέχεται και τους δύο τρόπους. [1] Στο παρακάτω παράδειγµα δηµιουργείται µία λίστα x µε αριθµούς και

αποθηκεύεται στο δίσκο. Με την πρώτη εντολή αποθηκεύεται στην ενεργό διεύθυνση αποθήκευσης, ενώ στις επόµενες εντολές καθορίζεται και η διεύθυνση αποθήκευσης,

x=0:0.1:10; save('test.dat','x','-ascii') save('c:\test1.dat','x','-ascii') save('c:/test2.dat','x','-ascii')

7.5 Εντολές input και pause Οι εντολές input και pause είναι δύο πολύ χρήσιµες εντολές, που αξιοποιούνται σε Μ-αρχεία εντολών ή Μ-συναρτήσεις. Τα αρχεία αυτά εκτελούνται ως σύνολο, και όχι µεµονωµένα όπως εκτελούνται οι εντολές

Page 146: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

∆ιαχείριση του MATLAB

146

που δίνονται από το παράθυρο διαχείρισης του προγράµµατος. Σε τέτοιες περιπτώσεις, είναι πολύ χρήσιµο να µπορούµε να αλλάζουµε τις τιµές των παραµέτρων κατά τη διάρκεια εκτέλεσης του προγράµµατος, ή να σταµατήσουµε προσωρινά την εκτέλεση του. Οι διαδικασίες αυτές διεκπεραιώνονται µε τις εντολές input και pause, τις οποίες και θα παρουσιάσουµε παρακάτω. 1) Εντολή input Για την εκτέλεση ενός προγράµµατος που περιέχεται σε Μ-αρχεία εντολών, ή Μ-συναρτήσεων, απαιτούνται συνήθως δεδοµένα τα οποία αφορούν τιµές παραµέτρων, και τα οποία πρέπει να δοθούν για να µπορέσει να γίνει η εκτέλεση του προγράµµατος. Οι τιµές αυτές των παραµέτρων θα µπορούσαν να είχαν ενσωµατωθεί µέσα στο πρόγραµµα, όµως σε µια τέτοια περίπτωση δεν θα ήταν εφικτό να γίνει αλλαγή των τιµών τους κατά τη διάρκεια εκτέλεσης του προγράµµατος. Για να διεκπεραιωθεί η διαδικασία αυτή, µπορεί να χρησιµοποιηθεί η εντολή input, η οποία θα ζητά από το χρήστη, κατά τη διάρκεια εκτέλεσης του προγράµµατος, την απόδοση της τιµής µιας παραµέτρου. Η εντολή αυτή έχει τη µορφή,

Β=input('Enter the applied magnetic field B '); Με την εκτέλεση της εντολής αυτής εµφανίζεται ένα παράθυρο και ζητείται, σε διαλογική µορφή, η πληκτρολόγηση της τιµής της παραµέτρου. Μετά την απόδοση της τιµής, η οποία καταχωρείται στην παράµετρο Β, συνεχίζεται το πρόγραµµα. 2) Εντολή pause Μια άλλη εντολή χρήσιµη για προγράµµατα που είναι γραµµένα ως Μ-αρχεία ή ως αρχεία Μ-συναρτήσεων, είναι η εντολή pause. Μερικές φορές είναι επιθυµητό να γίνει προσωρινή διακοπή της εκτέλεσης των προγραµµάτων αυτών, προς διερεύνηση της πορείας εκτέλεσης τους. Για το σκοπό αυτό χρησιµοποιείται η εντολή pause. Η διακοπή γίνεται στο σηµείο απ’ το οποίο εκτελείται η εντολή pause, και το MATLAB αναµένει εντολή

Page 147: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

7.6 Ηµερολόγιο κίνησης

147

από το χρήστη για να συνεχίσει την εκτέλεση του προγράµµατος. Η εντολή για συνέχιση δίνεται µε το πάτηµα οποιοδήποτε πλήκτρου. 7.6 Ηµερολόγιο κίνησης Σε όλα σχεδόν τα προγράµµατα Η/Υ, µε την εντολή εξόδου απ’ αυτά, ερωτάται ο χρήστης εάν επιθυµεί να αποθηκεύσει τα αποτελέσµατα που υπάρχουν στο παράθυρο εργασίας του προγράµµατος, κάτι που δεν συµβαίνει µε το MATLAB. Το δεδοµένο αυτό συνεπάγεται ότι ο χρήστης δεν θα πρέπει να χρησιµοποιεί το παράθυρο διαχείρισης για να συντάσσει προγράµµατα, τα οποία θα πρέπει µετά να διασωθούν, αλλά τον κειµενο-γράφο (editor) του προγράµµατος. ∆ηλαδή ο χρήστης θα πρέπει να συντάσσει τα προγράµµατα του είτε ως Μ-αρχεία εντολών, είτε ως αρχεία Μ-συναρτήσεων, µέσα από τον κειµενογράφο, για να µπορέσει να τα διατηρήσει. Ο κύριος σκοπός του παράθυρου διαχείρισης είναι η εκτέλεση των προγραµµάτων αυτών, και η συγκέντρωση των αποτελεσµάτων τους. Τα αποτελέσµατα εκτέλεσης τους που συγκεντρώνονται στο βασικό χώρο λειτουργίας του προγράµµατος, µπορούν να αποθηκευτούν πριν από την έξοδο από το πρόγραµµα, εάν ο χρήστης ενδιαφέρεται για τη διατήρηση τους. Η διαδικασία αποθήκευσης έχει παρουσιαστεί στις παραγράφους 7.4 και 7.5. Μερικές φορές όµως είναι επιθυµητό να διατηρηθούν σ’ ένα αρχείο όλες οι εντολές που δόθηκαν προς εκτέλεση από το παράθυρο διαχείρισης, σε χρονολογική σειρά, µαζί µε τα αποτελέσµατα τους. Το αρχείο καταχώρισης εντολών διατηρεί µεν τις εντολές προσωρινά, σε χρονολογική σειρά, αλλά όχι τα αποτελέσµατα τους. Επίσης, στο χώρο εργασίας διατηρούνται τα τελικά αποτελέσµατα, αλλά όχι µε χρονολογική σειρά, ούτε διατηρούνται τα ενδιάµεσα αποτελέσµατα που ξανά υπολογίστηκαν. Η επιθυµητή εργασία εκτελείται µε την εντολή

diary on Με την εκτέλεση της παραπάνω εντολής, δηµιουργείται ένα αρχείο στην τρέχουσα διεύθυνση αποθήκευσης του προγράµµατος, µε το όνοµα diary, το

Page 148: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

∆ιαχείριση του MATLAB

148

οποίον καταχωρεί όλες τις εντολές που εκτελούνται έπειτα από την κλήση του, σε χρονολογική σειρά, µαζί µετά τα αποτελέσµατα που εµφανίζονται στο παράθυρο εργασίας. ∆ηµιουργεί δηλαδή ένα αντίγραφο του παράθυρου εργασίας, από τη στιγµή που ενεργοποιήθηκε η εντολή αυτή. Η παραπάνω διαδικασία σταµατά µε την εντολή

diary off Με τον τρόπο αυτό δηµιουργείται ένα «ηµερολόγιο κίνησης» του προγράµµατος. Νέα ενεργοποίηση υπάρχοντος αρχείου diary οδηγεί σε προσθήκη των νέων εντολών στο τέλος του αρχείου, χωρίς να γίνεται διαγραφή των παλαιών. Για να δηµιουργηθεί καινούργιο αρχείο diary µε το ίδιο όνοµα θα πρέπει πρώτα να διαγραφεί το παλιό.

Το αρχείο diary είναι ένα αρχείο ASCII, και µπορεί να ανοιχτεί µε οποιοδήποτε κειµενογράφο αρχείων ASCII, όπως είναι ο κειµενογράφος του προγράµµατος. Τέλος αναφέρεται ότι µπορούµε να δηµιουργήσουµε διαφορετικά αρχεία diary, µε διαφορετικά ονόµατα, στα οποία θα αποθηκεύουµε διαφορετικές εργασίες. Η εντολή για τη δηµιουργία (ενεργοποίηση) ενός τέτοιου αρχείου είναι

diary file_name 7.7 Εντολές ελέγχου του προγράµµατος Παρακάτω δίδονται µερικές εντολές ελέγχου της απόδοσης του συστήµατος. [1] tic, toc: Οι εντολές tic, toc χρησιµοποιούνται για να χρονοµετρήσουν τη

διάρκεια του πραγµατικού χρόνου, σε δευτερόλεπτα, που χρειάστηκε για την εκτέλεση µιας σειράς εντολών. Στην αρχή της διαδικασίας καλούµε την εντολή tic, η οποία αρχίζει την παρακολούθηση του χρόνου, και στο τέλος την εντολή toc η οποία µετρά τη χρονική διάρκεια µεταξύ των δύο εντολών tic, toc, όπως φαίνεται στο παρακάτω διάγραµµα

tic operations

Page 149: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

7.7 Εντολές ελέγχου του προγράµµατος

149

toc

[2] cputime: Οι εντολές tic, toc, µετράνε διάρκεια πραγµατικού χρόνου, και

όχι το χρόνο που χρειάστηκε η κεντρική µονάδα του επεξεργαστή, για την εκτέλεση µιας διαδικασίας. Η εντολή cputime δίνει το συνολικό χρόνο λειτουργίας, σε δευτερόλεπτα, που χρειάστηκε ο επεξεργαστής για την εκτέλεση όλων των πράξεων που έγιναν από την έναρξη του προγράµµατος του MATLAB µέχρι τη στιγµή που καλείται η εντολή cputime. Για να προσδιοριστεί ο χρόνος που χρειάζεται η κεντρική µονάδα του επεξεργαστή για την εκτέλεση ενός τµήµατος του προγράµ-µατος, εκτελούµε στην αρχή του τµήµατος αυτού την εντολή t0=cputime, για να προσδιορίσουµε την αρχή του χρόνου, και στο τέλος την εντολή totaltime=cputime-t0 για να προσδιορίσουµε τη χρονική διάρκεια, όπως φαίνεται στο παρακάτω διάγραµµα

t0=cputime operations totaltime=cputime-t0

Page 150: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

ΚΕΦΑΛΑΙΟ 8

150

ΚΕΦΑΛΑΙΟ 8

Γραφικά στο Χώρο

Στο κεφάλαιο 6 κάναµε µια εισαγωγή στις γραφικές παραστάσεις στο επίπεδο, δηλαδή σε γραφικές παραστάσεις της µορφής ( )y f x= , όπου αποδίδεται η εξάρτηση της µεταβλητής y από τη x. Στο παρόν θα παρουσιά-σουµε γραφικές παραστάσεις της µορφής ( , )z f x y= , της εξάρτησης δηλαδή της παραµέτρου z από δύο µεταβλητές, τις x και y. Οι γραφικές αυτές παραστάσεις γίνονται στις τρεις διαστάσεις, όπου οι δύο άξονες αποδίδουν τις τιµές των µεταβλητών x και y, και ο τρίτος την παράµετρο z. Θα παρουσιάσουµε µερικές βασικές περιπτώσεις τέτοιων γραφικών, ενώ για πιο εξειδικευµένες περιπτώσεις ο χρήστης µπορεί να ανατρέξει στο Help του MATLAB. 8.1 Γραφικές παραστάσεις καµπυλών Στην παράγραφο 6.1 παρουσιάσαµε τη δηµιουργία γραφικών παραστάσεων καµπύλων στο επίπεδο µε την εντολή plot. Επέκταση της εντολής αυτής στο χώρο είναι η εντολή plot3, η οποία καλείται µε τον ακόλουθο τρόπο

plot3(x, y, z, ‘χσγ’ ) και δηµιουργεί καµπύλες στο χώρο, των οποίων τα σηµεία δίδονται από τις λίστες x, y, z, οι οποίες υποχρεωτικά πρέπει να είναι του ιδίου µήκους. Οι

Page 151: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

8.1 Γραφικές παραστάσεις καµπυλών

151

τρεις παράµετροι ‘χσγ’, που δίδονται ως συµβολοσειρά, διαµορφώνουν, όπως και στις δύο διαστάσεις, τα ακόλουθα χαρακτηριστικά της καµπύλης, χ: Επιλέγει το χρώµα της καµπύλης, σ: Επιλέγει το σύµβολο που θα τεθεί στη θέση του σηµείου, γ: Επιλέγει το είδος της γραµµής. Παράδειγµα H γραφική παράσταση της έλικας sin( ),cos( ), t t t , για t στο διάστηµα 0<t<8π, εκτελείται µε τον ακόλουθο τρόπο, t = 0:pi/50:8*pi; plot3(sin(t),cos(t),t);

-1-0.5

00.5

1

-1-0.5

0

0.510

5

10

15

20

25

30

8.1.1 Πολλαπλές καµπύλες Όπως και στο επίπεδο, έτσι και στο χώρο, µπορούµε στο ίδιο γράφηµα

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

plot3(x1, y1, z1, ‘χσγ’, x2, y2, z2, ‘χσγ’, …)

Page 152: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Χώρο

152

µε xi, yi, zi τις λίστες που έχουν αποθηκευµένες τις συντεταγµένες τις i καµπύλης, η καθεµιά απ’ τις οποίες µπορεί να διαµορφωθεί µε διαφορετικό τρόπο µε τις παραµέτρους ‘χσγ’. Με το δεύτερο τρόπο, αφού δώσουµε την εντολή για τη δηµιουργία της πρώτης καµπύλης, µετά δίνουµε την εντολή hold on, για να παραµείνει ενεργό το παράθυρο του γραφήµατος, και µετά προσθέτουµε στο γράφηµα, µε επόµενες εντολές, µία-µία τις άλλες γραφικές παραστάσεις. Παράδειγµα Να δηµιουργηθεί γράφηµα που να περιέχει τις δύο έλικες sin( ),cos( ), t t t , και sin( 3),cos( 3), t t t+ + , για t στο διάστηµα 0<t<8π, t = 0:pi/50:8*pi; plot3(sin(t),cos(t),t,'b-'); hold on plot3(sin(t+3),cos(t+3),t,'r*');

-1-0.5

00.5

1

-1-0.5

0

0.510

5

10

15

20

25

30

Page 153: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

8.2 Γραφικές παραστάσεις επιφανειών

153

8.2 Γραφικές παραστάσεις επιφανειών Για τη δηµιουργία µιας γραφικής παράστασης της µορφής ( , )z f x y= , ακολουθούµε τα εξής βήµατα:

[1] ∆ηµιουργούµε µια ακολουθία σηµείων ix και jy , που

αντιπροσωπεύουν τα σηµεία των αξόνων x και y αντίστοιχα, τα οποία θα χρησιµοποιηθούν για να δηµιουργηθεί το πλέγµα σηµείων στο επίπεδο xy. Τα σηµεία αυτά αποθηκεύονται σε διαφορετικές λίστες, π.χ. τις λίστες x και y αντίστοιχα.

[2] Χρησιµοποιώντας τις λίστες αυτές, δηµιουργούµε το πλέγµα σηµείων [X, Y] στο επίπεδο xy, στα οποία θα προσδιοριστούν οι τιµές της ποσότητας z. Στην περίπτωση που τα σηµεία στους x και y άξονες αποθηκεύονται σε λίστες µε όνοµα x και y αντίστοιχα, το πλέγµα σηµείων στο επίπεδο xy δηµιουργείται µε την εντολή

[X,Y]=meshgrid(x,y);

[3] Προσδιορίζουµε τις τιµές της ποσότητας ( , )f x y , σε όλα τα σηµεία του πλέγµατος [X, Y], οι οποίες αποθηκεύονται σε µια λίστα, π.χ. την Ζ. Τα σηµεία αυτά δηµιουργούνται µε µια εντολή της µορφής

Z=f(X, Y)

[4] Εκτελούµε τη γραφική παράσταση των σηµείων [Χ, Υ, Ζ]. Για την εκτέλεση της γραφικής παράστασης µπορούµε να χρησιµοποιήσουµε είτε την εντολή mesh ή είτε την surf. Θα εξετάσουµε την κάθε περίπτωση ξεχωριστά.

8.3 Γραφικές παραστάσεις µε την εντολή mesh Τα δεδοµένα που δηµιουργήθηκαν µε τη διαδικασία που παρουσιάσαµε στην προηγούµενη παράγραφο, µπορούµε να τα παραστήσουµε γραφικά µε την εντολή mesh. Η εντολή mesh δηµιουργεί ένα πλέγµα σηµείων στο χώρο, που αποδίδουν τα σηµεία [Χ, Υ, Ζ], και κατόπιν ενώνει τα γειτονικά τους µε ευθύγραµµα τµήµατα. Η εντολή καλείται µε τον ακόλουθο τρόπο

mesh(X, Y, Z)

Page 154: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Χώρο

154

Όταν η εντολή κληθεί µε ένα µόνο όρισµα, το Ζ, mesh(Z)

τότε γίνεται γραφική παράσταση του Ζ ως συνάρτηση των δεικτών των στοιχείων της λίστας Ζ. Η διαδικασία αυτή είναι ένας γρήγορος τρόπος επισκόπησης της µεταβλητής Ζ. Παράδειγµα

Η γραφική παράσταση της επιφάνειας 2 2 2 2sin( ) /z x y x y= + + , στο

διάστηµα [ 7.5,7.5] [ 7.5,7.5]− × − , εκτελείται µε τον ακόλουθο τρόπο, x=-7.5:0.5:7.5; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; mesh(X,Y,Z) xlabel('x label'),ylabel('y label'),zlabel('z label') title('mesh figure')

-10-5

05

10

-10-5

0

510

-0.5

0

0.5

1

x label

mesh figure

y label

z la

bel

Page 155: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

8.3 Γραφικές παραστάσεις µε την εντολή mesh

155

Η κλήση της εντολής mesh µε µόνον όρισµα το Z δίνει mesh(Z)

010

2030

40

010

20

3040

-0.5

0

0.5

1

Μια παραλλαγή του mesh είναι η εντολή meshc, που παρουσιάζεται παρακάτω.

8.3.1 Εντολή meshc Μια επιφάνεια µπορεί να περιγραφεί και από ένα σµήνος από ισοϋψείς

καµπύλες, οι οποίες συνδέουν σηµεία της επιφάνειας µε την ίδια τιµή της συνάρτησης. Η προβολή στο επίπεδο xy των καµπυλών αυτών δηµιουργεί ένα δισδιάστατο σχήµα, που αποκαλείται γράφηµα µε ισοϋψείς (contour). Με την εντολή meshc, µαζί µε το τρισδιάστατο γράφηµα, δίνεται και ένα γράφηµα µε ισοϋψείς στο επίπεδο xy, και εκτελείται µε τον ακόλουθο τρόπο

meshc(X, Y, Z) Όταν η εντολή κληθεί µε ένα όρισµα, το Ζ, π.χ.

meshc(Z) τότε γίνεται γραφική παράσταση του Ζ ως συνάρτηση των δεικτών των στοιχείων της λίστας. Η διαδικασία αυτή είναι ένας γρήγορος τρόπος επισκόπησης της µεταβλητής Ζ.

Page 156: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Χώρο

156

Παράδειγµα

H γραφική παράσταση της επιφάνειας 2 2 2 2sin( ) /z x y x y= + + , στο

διάστηµα [ 7.5,7.5] [ 7.5,7.5]− × − , µαζί µε τις ισοϋψείς της, δηµιουργείται µε τον ακόλουθο τρόπο, x=-7.5:0.5:7.5; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; meshc(X,Y,Z)

-10-5

05

10

-10-5

0

510

-0.5

0

0.5

1

8.4 Γραφικές παραστάσεις µε την εντολή surf Μια εντολή παρόµοια µε την mesh, είναι η surf. Η εντολή surf αποδίδει το γράφηµα µε µια επιφάνεια στο χώρο, που προκύπτει από το πλέγµα των σηµείων Χ, Υ, Ζ, τη συνένωση των γειτονικών τους σηµείων µε ευθύγραµµα τµήµατα, και το χρωµατισµό των δηµιουργούµενων ορθογωνίων, και εκτελείται µε τον ακόλουθο τρόπο

surf(X, Y, Z)

Page 157: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

8.4 Γραφικές παραστάσεις µε την εντολή surf

157

Όταν η εντολή κληθεί µε ένα όρισµα, το Ζ, π.χ. surf(Z)

τότε γίνεται γραφική παράσταση του Ζ ως συνάρτηση των δεικτών των στοιχείων. Η διαδικασία αυτή είναι ένας γρήγορος τρόπος επισκόπησης της µεταβλητής Ζ. Παράδειγµα

Η γραφική παράσταση της επιφάνειας 2 2 2 2sin( ) /z x y x y= + + , στο

διάστηµα [ 7.5,7.5] [ 7.5,7.5]− × − , εκτελείται µε τον ακόλουθο τρόπο, x=-7.5:0.5:7.5; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; surf(X,Y,Z)

-10-5

05

10

-10-5

0

510

-0.5

0

0.5

1

Page 158: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Χώρο

158

Μερικές παραλλαγές της εντολής surf, δίνονται παρακάτω.

8.4.1 Εντολή surfc Με την εντολή surfc, µαζί µε το τρισδιάστατο γράφηµα, δίνεται και ένα

γράφηµα µε ισοϋψείς στο επίπεδο xy. Παράδειγµα

Η γραφική παράσταση της επιφάνειας 2 2 2 2sin( ) /z x y x y= + + , στο

διάστηµα [ 7.5,7.5] [ 7.5,7.5]− × − , εκτελείται µε τον ακόλουθο τρόπο, x=-7.5:0.5:7.5; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; meshc(X,Y,Z) xlabel('x label'),ylabel('y label'),zlabel('z label') title('mesh figure')

-10-5

05

10

-10-5

0

510

-0.5

0

0.5

1

x label

surf with contours figure

y label

z la

bel

Page 159: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

8.4 Γραφικές παραστάσεις µε την εντολή surf

159

8.4.2 Εντολή surfl Με την εντολή surfl, εφαρµόζεται φωτισµός στο γράφηµα.

Παράδειγµα

Η γραφική παράσταση της επιφάνειας 2 2 2 2sin( ) /z x y x y= + + , στο

διάστηµα [ 7.5,7.5] [ 7.5,7.5]− × − , εκτελείται µε τον ακόλουθο τρόπο, x=-7.5:0.5:7.5; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; meshc(X,Y,Z) xlabel('x label'),ylabel('y label'),zlabel('z label') title('mesh figure')

-10-5

05

10

-10-5

0

510

-0.5

0

0.5

1

x label

surf with lighting figure

y label

z la

bel

Page 160: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Χώρο

160

8.5 Γραφήµατα µε ισοϋψείς Σε ένα τρισδιάστατο γράφηµα µιας συνάρτησης δύο µεταβλητών, η επιφάνεια µπορεί να περιγραφεί και µε ένα σµήνος από ισοϋψείς καµπύλες, οι οποίες συνδέουν σηµεία της επιφάνειας µε την ίδια τιµή της συνάρτησης. Τέτοια γραφήµατα δηµιουργήθηκαν συµπληρωµατικά µε τις εντολές meshc και surfc. Στην παρούσα παράγραφο τα παρουσιάζουµε ως αυτόνοµα γραφήµατα. Θα παρουσιαστούν δύο ειδών γραφήµατα µε ισοϋψείς.

8.5.1 Γράφηµα µε ισοϋψείς στο επίπεδο Η προβολή στο επίπεδο xy καµπυλών από ισοϋψείς, οι οποίες συνδέουν

σηµεία της επιφάνειας µε την ίδια τιµή της συνάρτησης, δηµιουργεί ένα δισδιάστατο γράφηµα µε ισοϋψείς. Η εντολή του MATLAB για τη χάραξη της γραφικής αυτής παράστασης είναι:

contour(X,Y,Z,n)

µε Χ, Υ, Ζ λίστες που περιέχουν τις συντεταγµένες του πλέγµατος της επιφάνειας, και n έναν ακέραιο αριθµό που δηλώνει τον αριθµό των ισοϋψών καµπυλών που θα χαραχθούν. Παράδειγµα

[1] Το γράφηµα µε ισοϋψείς της επιφάνειας 2 2 2 2sin( ) /z x y x y= + + , στο

διάστηµα [ 8,8] [ 8,8]− × − , εκτελείται µε τον ακόλουθο τρόπο, x=-8.0:0.5:8.0; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; contour(X,Y,Z,25) xlabel('x label'),ylabel('y label') title('contour plot')

Page 161: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

8.5 Γραφήµατα µε ισοϋψείς

161

x label

y la

bel

contour plot

-8 -6 -4 -2 0 2 4 6 8-8

-6

-4

-2

0

2

4

6

8

8.5.2 Τρισδιάστατο γράφηµα µε ισοϋψείς Οι τρισδιάστατες ισοϋψείς που χαράσσονται πάνω στην επιφάνεια,

µπορούν να αποδοθούν στο χώρο, και όχι να προβάλλονται στο επίπεδο, οπότε εµφανίζονται στο σωστό «υψόµετρο». Η εντολή για την εκτέλεση των γραφηµάτων αυτών είναι:

contour3(X,Y,Z,n)

µε Χ, Υ, Ζ λίστες που περιέχουν τις συντεταγµένες του πλέγµατος της επιφάνειας, και n έναν ακέραιο αριθµό που δηλώνει τον αριθµό των ισοϋψών που θα χαραχθούν. Παράδειγµα [1] Το γράφηµα µε τις τρισδιάστατες ισοϋψείς, στην περιοχή [ 8,8] [ 8,8]− × − ,

της συνάρτησης 2 2 2 2sin( ) /z x y x y= + + , εκτελείται µε τον ακόλουθο

τρόπο, x=-7.5:0.5:7.5; y=x; [X,Y]=meshgrid(x,y);

Page 162: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Χώρο

162

R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; contour3(X,Y,Z,25) xlabel('x label'),ylabel('y label'),zlabel('z label') title('contour3 plot')

-50

5

-5

0

5

-0.5

0

0.5

1

z la

bel

contour3 plot

x labely label

8.6 Γραφική αναπαράσταση λίστας Μια δισδιάστατη λίστα µπορεί να χρησιµοποιηθεί για να αποθηκευτούν τιµές µιας συνάρτησης δύο µεταβλητών. Στην τεχνική που αξιοποιείται για το σκοπό αυτό χρησιµοποιούνται οι δείκτες (i, j) των στοιχείων της λίστας για να αποδώσουν τα διακριτά ζεύγη τιµών , i ix y των µεταβλητών (x, y), και η

τιµή του αντίστοιχου στοιχείου της λίστας για να αποδώσει την τιµή της συνάρτησης f(x, y) στο σηµείο αυτό. Τα δεδοµένα αυτά µπορούν να αποδοθούν γραφικά, είτε στο επίπεδο µε χρωµατικές αποχρώσεις, είτε στις τρεις διαστάσεις.

Page 163: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

8.6 Γραφική αναπαράσταση λίστας

163

8.6.1 Χρωµατική αναπαράσταση Τα δεδοµένα που είναι αποθηκευµένα σε µια δισδιάστατη λίστα

αποδίδονται µε ένα επίπεδο χρωµατικό διάγραµµα, για τη δηµιουργία του οποίου χρησιµοποιούνται οι δείκτες των στοιχείων της λίστας για να δηµιουργηθεί το πλέγµα σηµείων στο επίπεδο xy, η δε τιµή του στοιχείου για καθοριστεί το χρώµα που θα αποδοθεί στην αντίστοιχη κυψέλη. Η εντολή για τη χρωµατική αναπαράσταση της λίστας dataf είναι η ακόλουθη,

pcolor(dataf)

Παράδειγµα Στο παρακάτω παράδειγµα χρησιµοποιείται η συνάρτηση rand για τον καθορισµό των τιµών των στοιχείων της λίστας, και κατόπι γίνεται απόδοση των τιµών της λίστας χρωµατικά, n=50; dataf=rand(n); pcolor(dataf); axis square;

5 10 15 20 25 30 35 40 45 50

5

10

15

20

25

30

35

40

45

50

Page 164: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Χώρο

164

8.6.2 Αναπαράσταση στις τρεις διαστάσεις Τα δεδοµένα που είναι αποθηκευµένα σε µια δισδιάστατη λίστα αποδί-

δονται µε ένα διάγραµµα, για τη δηµιουργία του οποίου χρησιµοποιούνται οι δείκτες των στοιχείων της λίστας για να δηµιουργηθεί το πλέγµα σηµείων στο επίπεδο xy, και η τιµή του στοιχείου για να καθοριστεί το µήκος του στελέχους που προσδιορίζει το ύψος του σηµείου από το επίπεδο xy. Η εντολή για τη δηµιουργία του γραφήµατος είναι η ακόλουθη,

stem3(dataf)

µε dataf τη λίστα µε τα δεδοµένα.

Παράδειγµα Στο παρακάτω παράδειγµα χρησιµοποιείται η συνάρτηση rand για τον καθορισµό των τιµών των στοιχείων της λίστας, και κατόπι γίνεται απόδοση των τιµών του στις τρεις διαστάσεις, n=6; dataf=rand(n); stem3(dataf);

12

34

56

0

2

4

60

0.2

0.4

0.6

0.8

1

Page 165: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

8.7 Γραφική αναπαράσταση διανυσµατικών πεδίων

165

8.7 Γραφική αναπαράσταση διανυσµατικών πεδίων Με το MATLAB έχουµε τη δυνατότητα γραφικής αναπαράστασης ανυσµατικών πεδίων. Θα δώσουµε παρακάτω τη διαδικασία αναπαράστασης δισδιάστατων ανυσµατικών πεδίων, αφήνοντας ως άσκηση την εκτέλεση τρισδιάστατων πεδίων µε τη βοήθεια του help.

Στην αναπαράσταση δισδιάστατων ανυσµατικών πεδίων, στις θέσεις ενός πλέγµατος το οποίο δηµιουργείται στο επίπεδο του πεδίου, το οποίο εκλαµβάνεται ως το επίπεδο xy, αποδίδονται ανύσµατα που παραστούν το πεδίο, δηλαδή το µήκος τους δηλώνει την ένταση και η κατεύθυνση τους τη κατεύθυνση του πεδίου αυτού. Για να σχεδιαστεί το πεδίο αυτό µε το MATLAB, δηµιουργείται πρώτα το δισδιάστατο πλέγµα σηµείων, µε την εντολή meshgrid, και µετά σε κάθε θέση του πλέγµατος υπολογίζονται οι συνιστώσες του ανύσµατος, οι οποίες αποθηκεύονται σε λίστες. Η γραφική παράσταση εκτελείται µε την εντολή

quiver(X,Y,DX, DY)

µε Χ, Υ δηλώνονται οι λίστες που περιέχουν τις x και y συντεταγµένες αντίστοιχα των πλεγµατικών θέσεων, και DX, DY οι λίστες µε τις x και y συνιστώσες αντίστοιχα των ανυσµάτων του πεδίου στις πλεγµατικές θέσεις. Παράδειγµα [1] Η αναπαράσταση του διανυσµατικού πεδίου y, x, πάνω σε ένα πλέγµα

στην περιοχή [ 1,1] [ 1,1]− × − , δίνεται παρακάτω: x=-1:0.1:1; y=x; [X,Y]=meshgrid(x,y); DX=Y; DY=X; quiver(X,Y,DX,DY)

Page 166: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Χώρο

166

-1.5 -1 -0.5 0 0.5 1 1.5-1.5

-1

-0.5

0

0.5

1

1.5

8.8 Γραφική παράσταση συνάρτησης Στις παραγράφους 8.1-8.6 παρουσιάσαµε γραφικές παραστάσεις δεδοµένων στο χώρο. Όπως είδαµε και στην παράγραφο 6.4, το MATLAB έχει επίσης τη δυνατότητα να εκτελεί και γραφικές παραστάσεις συναρτήσεων. Στην παρούσα παράγραφο θα δώσουµε τις εντολές για γραφικές παραστάσεις συναρτήσεων στο χώρο, για περιπτώσεις αντίστοιχες εκείνων που παρου-σιάστηκαν στις παραγράφους 8.1-8.6. Όπως και στις δύο διαστάσεις, δεν µπορεί να γίνει χρήση της ίδιας της συνάρτησης άµεσα, αλλά θα πρέπει να κληθεί µε τη χρήση ενός οδηγού.

8.8.1 Εντολή ezplot3 Η εντολή ezplot3 είναι αντίστοιχη της plot3, και µε τη χρήση της

εκτελούνται γραφικές παραστάσεις παραµετρικών καµπυλών στις τρεις διαστάσεις. Η εντολή για την εκτέλεση της γραφικής παράστασης είναι

ezplot3( @(t) f1(t), @(t) f2(t), @(t) f3(t), [ tmin, tmax] )

Page 167: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

8.8 Γραφική παράσταση συνάρτησης

167

η οποία εκτελεί τη γραφική παράσταση της παραµετρικής καµπύλης f1(t), f2(t), f3(t), για min maxt t t< < . Όταν δεν καθορίζεται η περιοχή τιµών για την παράµετρο t, τότε χρησιµοποιείται η περιοχή [0, 2π]. Παράδειγµα Η γραφική παράσταση της έλικας sin( ),cos( ), t t t , για t στο διάστηµα 0<t<8π, εκτελείται µε τον ακόλουθο τρόπο, ezplot3(@(t) sin(t),@(t) cos(t),@(t) t, [0,8*pi]);

-1-0.5

00.5

1

-1-0.5

0

0.510

5

10

15

20

25

30

x

x = sin(t), y = cos(t), z = t

y

z

8.8.2 Εντολή ezmesh Η εντολή ezmesh δηµιουργεί γραφικές παραστάσεις επιφανειών της

µορφής ( , )z f x y= , και είναι αντίστοιχη της mesh. Η εντολή για την εκτέλεση της γραφικής παράστασης είναι

ezmesh(@(x, y) f(x, y), [xmin, xmax, ymin, ymax]) η οποία εκτελεί τη γραφική παράσταση της επιφάνειας για την περιοχή [ min max] [ min max]x x x y y y< < × < < . Όταν δεν καθορίζεται η περιοχή τιµών για τις παραµέτρους x και y, τότε χρησιµοποιείται η περιοχή [ 2 2 ] [ 2 2 ]x yπ π π π− < < × − < < .

Page 168: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Χώρο

168

Εκτός από την εντολή ezmesh, υπάρχει και η εντολή ezmeshc, αντίστοιχη της meshc. Παράδειγµα

Η γραφική παράσταση της επιφάνειας 2 2 2 2sin( ) /z x y x y= + + , στο

διάστηµα [ 8,8] [ 8,8]− × − , εκτελείται µε τον ακόλουθο τρόπο, ezmesh(@(x,y) sin(sqrt(x.^2+y.^2))./... (sqrt(x.^2+y.^2)+eps))

-5

0

5

-5

0

5

-0.5

0

0.5

1

x

sin(sqrt(x2+y2))/(sqrt(x2+y2)+eps)

y

8.8.3 Εντολή ezsurf Η εντολή ezsurf δηµιουργεί γραφικές παραστάσεις επιφανειών της

µορφής ( , )z f x y= , και είναι αντίστοιχη της surf. Η εντολή για την εκτέλεση της γραφικής παράστασης είναι

ezsurf( @(x, y) f(x, y), [xmin, xmax, ymin, ymax])

Page 169: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

8.8 Γραφική παράσταση συνάρτησης

169

η οποία εκτελεί τη γραφική παράσταση της επιφάνειας για την περιοχή [ min max] [ min max]x x x y y y< < × < < . Όταν δεν καθορίζεται η περιοχή τιµών για τις παραµέτρους x και y, τότε χρησιµοποιείται η περιοχή [ 2 2 ] [ 2 2 ]x yπ π π π− < < × − < < . Εκτός από την εντολή ezsurf, υπάρχει και η εντολή ezsurfc, αντίστοιχη της surfc. Παράδειγµα

Η γραφική παράσταση της επιφάνειας 2 2 2 2sin( ) /z x y x y= + + , στο

διάστηµα [ 8,8] [ 8,8]− × − , εκτελείται µε τον ακόλουθο τρόπο, ezsurf(@(x,y) sin(sqrt(x.^2+y.^2))./... (sqrt(x.^2+y.^2)+eps))

-5

0

5

-5

0

5

-0.5

0

0.5

1

x

sin(sqrt(x2+y2))/(sqrt(x2+y2)+eps)

y

8.8.4 Εντολή ezcontour Η εντολή ezcontour δηµιουργεί το γράφηµα της προβολής ισοϋψών µιας

επιφάνειας στο επίπεδο xy, και είναι αντίστοιχη της contour. Η εντολή για την εκτέλεση της γραφικής παράστασης είναι

ezcontour( @(x, y) f(x, y), [xmin, xmax, ymin, ymax], Ν)

Page 170: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραφικά στο Χώρο

170

η οποία εκτελεί τη γραφική παράσταση της επιφάνειας για την περιοχή [ min max] [ min max]x x x y y y< < × < < . N είναι ο αριθµός των ισοϋψών που χαράσσει. Όταν δεν καθορίζεται η περιοχή τιµών για τις παραµέτρους x και y, τότε χρησιµοποιείται η περιοχή [ 2 2 ] [ 2 2 ]x yπ π π π− < < × − < < . Εκτός από την εντολή ezcontour, υπάρχει και η εντολή ezcontour3, αντίστοιχη της contour3. Παράδειγµα

Το γράφηµα µε ισοϋψείς της συνάρτησης 2 2 2 2sin( ) /z x y x y= + + , στο

διάστηµα [ 8,8] [ 8,8]− × − , εκτελείται µε τον ακόλουθο τρόπο, ezcontour(@(x,y) sin(sqrt(x.^2+y.^2))./... (sqrt(x.^2+y.^2)+eps),20)

x

y

sin(sqrt(x2+y2))/(sqrt(x2+y2)+eps)

-6 -4 -2 0 2 4 6-6

-4

-2

0

2

4

6

Page 171: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

8.8 Γραφική παράσταση συνάρτησης

171

Page 172: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

ΚΕΦΑΛΑΙΟ 9

172

ΚΕΦΑΛΑΙΟ 9

Γραµµική Άλγεβρα - Μήτρες

Μια µήτρα, ως προς τη δοµή της, είναι µια λίστα δύο διαστάσεων, και όπως η λίστα, αποτελείται από αριθµούς διατεταγµένους σε γραµµές και στήλες. Έτσι µια µήτρα κατασκευάζεται µε τον ίδιο τρόπο που κατασκευάζονται και οι λίστες. Το γεγονός αυτό ενδέχεται να µας οδηγήσει στο συµπέρασµα ότι λίστα και µήτρα είναι το ίδιο και το αυτό αντικείµενο. Στα µαθηµατικά όµως, λίστα και µήτρα αντιπροσωπεύουν δύο τελείως διαφορετικά αντικείµενα, και υπακούουν σε διαφορετικούς κανόνες και πράξεις. Οι λίστες αντιπρο-σωπεύουν λογιστικά φύλλα, και οι πράξεις που αυτές ακολουθούν παρουσιά-στηκαν στο κεφάλαιο 2, ενώ οι µήτρες αντιπροσωπεύουν γραµµικούς µετα-σχηµατισµούς και ακολουθούν τους κανόνες και τις πράξεις που ορίζει η γραµµική άλγεβρα, και που θα παρουσιάσουµε στο παρόν κεφάλαιο.

Το MATLAB περιέχει εσωτερικές εντολές για εκτέλεση πράξεων της γραµµικής άλγεβρας, που περιλαµβάνουν πολλαπλασιασµό µε µήτρες, υπολογισµό ανάστροφης (transpose), ορίζουσας (det), αντίστροφης (inverse), ίχνους (trace), ιδιοτιµών (eigenvalues) και ιδιοανυσµάτων (eigenvectors) µιας µήτρας, κ.λ.π. Επίσης θα αναφερθούµε στην επίλυση γραµµικών συστηµάτων, και σε εντολές για εκτέλεση πράξεων µεταξύ ανυσµάτων.

Page 173: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

9.1 Πράξεις µε ανύσµατα στο καρτεσιανό σύστηµα

173

9.1 Πράξεις µε ανύσµατα στο καρτεσιανό σύστηµα Στο MATLAB µια µήτρα 1m× αντιπροσωπεύει ένα άνυσµα-στήλη µε m γραµµές, ενώ µια µήτρα 1 n× ένα άνυσµα-γραµµή µε n στήλες. Τα στοιχεία µιας τέτοιας µήτρας δίνουν τις συνιστώσες του ανύσµατος στο σύστηµα συντεταγµένων που αναφέρεται. Στην παρούσα παράγραφο θα αναφερθούµε σε πράξεις µεταξύ ανυσµάτων στο καρτεσιανό σύστηµα συντεταγµένων, και στις αντίστοιχες εντολές του MATLAB. Για χρήση σε επόµενα παραδείγµατα, ορίζονται τα παρακάτω ανύσµατα, a=[5;2;4]; b=[8;2;7];

1. Εσωτερικό γινόµενο ανυσµάτων. Το εσωτερικό γινόµενο δύο ανυσµά-

των a και b, υπολογίζεται µε την εντολή dot(a, b)

Χρησιµοποιώντας τα ανύσµατα a, b που ορίστηκαν παραπάνω παίρνουµε

dot(a,b) ans = 72 dot(b,a) ans = 72

που επιβεβαιώνει τη γνωστή µας σχέση, ότι δηλαδή dot(a,b)=dot(b,a). 2. Εξωτερικό γινόµενο ανυσµάτων . Το εξωτερικό γινόµενο δύο ανυσµά-

των a και b, στο καρτεσιανό σύστηµα συντεταγµένων, υπολογίζεται µε την εντολή

cross(a, b) Χρησιµοποιώντας τα ανύσµατα a, b που ορίστηκαν παραπάνω παίρνουµε

Page 174: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραµµική Άλγεβρα - Μήτρες

174

cross(a,b) ans = 6 -3 -6 cross(b,a) ans = -6 3 6

που επιβεβαιώνει τη γνωστή µας σχέση, ότι cross(a,b)=−cross(b,a). 3. Μέτρο ανύσµατος. Το µέτρο ενός ανύσµατος a, υπολογίζεται µε την

εντολή norm(a)

Χρησιµοποιώντας τα ανύσµατα a, b που ορίστηκαν παραπάνω παίρνουµε norm(a) ans = 6.7082 norm(b) ans = 10.8167

Εφαρµογή Η γωνία µεταξύ των δύο ανυσµάτων, σε ακτίνια, υπολογίζεται παρακάτω,

acos(dot(a, b)/(norm(a)*norm(b))) ans = 0.1244

ενώ σε µοίρες µε την εντολή

Page 175: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

9.2 Πράξεις µε µήτρες

175

acosd(dot(a, b)/(norm(a)*norm(b))) ans = 7.1250

9.2 Πράξεις µε µήτρες Οι βασικές εντολές του MATLAB για τη διεκπεραίωση µαθηµατικών πράξεων µε µήτρες, δίνονται παρακάτω. Για χρήση σε επόµενα παραδείγ-µατα, ορίζονται επίσης οι παρακάτω µήτρες, A=[7, 7, 6; 1, 9, 4; 5, 4, 0]; B=[0 ,6, 0; 7, 5, 9; 8, 6, 2];

1. Πολλαπλασιασµός µήτρας µε αριθµό. Σύµφωνα µε τους κανόνες

της άλγεβρας, πολλαπλασιασµός µιας µήτρας µε έναν αριθµό ισοδυναµεί µε πολλαπλασιασµό των στοιχείων της µήτρας µε τον αριθµό αυτό. Ο τελεστής του MATLAB που εκτελεί την πράξη αυτή είναι το * , όπως και για το πολλαπλασιασµό αριθµών, και η εντολή είναι η ακόλουθη,

c*A ή ισοδύναµα A*c Η παραπάνω πράξη είναι η ίδια µε τον πολλαπλασιασµό λίστας µε αριθµό, όπως συνάγεται από την παράγραφο 2.5. [1] Χρησιµοποιώντας τη µήτρα Α που ορίσαµε παραπάνω, έχουµε τα εξής

αποτελέσµατα, 3*A ans = 21 21 18 3 27 12 15 12 0 A*3 ans = 21 21 18

Page 176: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραµµική Άλγεβρα - Μήτρες

176

3 27 12 15 12 0

Από την άλγεβρα γνωρίζουµε ότι ο πολλαπλασιασµός µιας µήτρας µε έναν αριθµό είναι µια πράξη που ικανοποιεί την αντιµεταθετική ιδιότητα, όπως επιβεβαιώνεται και από το παραπάνω παράδειγµα.

2. Άθροισµα (διαφορά) µητρών. Το άθροισµα (διαφορά) δύο µητρών, µε τις ίδιες διαστάσεις, αντιπροσωπεύει µια µήτρα της οποίας τα στοιχεία είναι ίσα µε το άθροισµα (διαφορά) των αντίστοιχων στοιχείων των δύο µητρών. Για δύο µήτρες Α και Β, που ικανοποιούν τις συνθήκες, οι εντολές για την εκτέλεση των πράξεων είναι οι ακόλουθες,

A+B και Α-Β

Οι παραπάνω πράξεις είναι οι ίδιες µε τις αντίστοιχες πράξεις µε λίστες, όπως συνάγεται από την παράγραφο 2.5. [2] Χρησιµοποιώντας τις δύο µήτρες Α και Β, που ορίσαµε παραπάνω,

έχουµε τα εξής αποτελέσµατα, A+B ans = 7 13 6 8 14 13 13 10 2 B+A ans = 7 13 6 8 14 13 13 10 2

Από την άλγεβρα γνωρίζουµε ότι η πρόσθεση δύο µητρών είναι µια πράξη που ικανοποιεί την αντιµεταθετική ιδιότητα, όπως επιβεβαιώνεται και από το παραπάνω παράδειγµα.

Page 177: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

9.2 Πράξεις µε µήτρες

177

3. Πολλαπλασιασµός µητρών. Ο πολλαπλασιασµός µεταξύ δύο µητρών, από τις οποίες η πρώτη έχει διαστάσεις mxn και η δεύτερη nxk, καθορίζεται από τους κανόνες της άλγεβρας, και αντιστοιχεί σε µία µήτρα διαστάσεων mxk. Ο τελεστής που δηλώνει την πράξη του πολλαπλασιασµού των µητρών είναι το αστεράκι, όπως και στον πολλαπλασιασµό αριθµών, π.χ. για τον πολλαπλασιασµό των µητρών Α και Β έχουµε την εντολή:

A*B [3] Χρησιµοποιώντας τις δύο µήτρες Α και Β, που ορίσαµε παραπάνω,

έχουµε τα εξής αποτελέσµατα, A*B ans = 97 113 75 95 75 89 28 50 36 B*A ans = 6 54 24 99 130 62 72 118 72

Από την άλγεβρα γνωρίζουµε ότι ο πολλαπλασιασµός δύο µητρών είναι µια πράξη που γενικώς δεν ικανοποιεί την αντιµεταθετική ιδιότητα, όπως επιβεβαιώνεται και από το παραπάνω παράδειγµα.

4. Συζηγής ανάστροφης µήτρας. Παρουσιάσαµε στην παράγραφο 2.5 την εντολή που υπολογίζει την ανάστροφη µιας λίστας Α, και είναι η A.’ , η οποία υπολογίζει τη λίστα που προκύπτει µε αναστροφή στις σειρές µε τις στήλες της Α. Με την ίδια εντολή υπολογίζεται και η ανάστροφη µήτρας.

Σε υπολογισµούς της γραµµικής άλγεβρας όµως, η αναστροφή µιας µήτρας συνοδεύεται συνήθως και µε την πράξη υπολογισµού της µιγαδικής συζυγούς. Η συνδυασµένη αυτή πράξη υπολογίζεται µε την εντολή

A’

Page 178: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραµµική Άλγεβρα - Μήτρες

178

και υπολογίζει την µιγαδική συζυγή της ανάστροφης µήτρας. Για πραγµατικές µήτρες οι δύο παραπάνω πράξεις δίνουν το ίδιο αποτέλεσµα. [4] Χρησιµοποιώντας τις µήτρες Α και Β που ορίσαµε παραπάνω και είναι

πραγµατικές, έχουµε A.' ans = 7 1 5 7 9 4 6 4 0 A' ans = 7 1 5 7 9 4 6 4 0

Ενώ για τη µήτρα 1

1i

i⎛ ⎞⎜ ⎟⎝ ⎠

έχουµε

sc=[1 i; i 1]; sc.' ans = 1.0000 0 + 1.0000i 0 + 1.0000i 1.0000 sc' ans = 1.0000 0 - 1.0000i 0 - 1.0000i 1.0000

[5] Από την άλγεβρα γνωρίζουµε ότι

1 2 2 1( * *...* ) ( )*...* ( )* ( )n ntransopse A A A transpose A transpose A transpose A= ,

που επιβεβαιώνεται και από το παρακάτω παράδειγµα,

Page 179: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

9.2 Πράξεις µε µήτρες

179

(A*B)' ans = 97 95 28 113 75 50 75 89 36 B'*A' ans = 97 95 28 113 75 50 75 89 36

5. Ορίζουσα τετραγωνικής µήτρας. Η ορίζουσα µιας τετραγωνικής

µήτρας Α υπολογίζεται µε την εντολή, det(A)

[6] Χρησιµοποιώντας τις δύο µήτρες Α και Β, που ορίσαµε παραπάνω,

έχουµε τα εξής αποτελέσµατα, det(A) ans = -218 det(B) ans = 348 det(A*B) ans = -75864 det(B*A) ans = -75864 det(A)*det(B) ans = -75864

Page 180: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραµµική Άλγεβρα - Μήτρες

180

Από την άλγεβρα ξέρουµε ότι η ορίζουσα του γινοµένου τετραγωνικών µητρών ισούται µε το γινόµενο των οριζουσών των µητρών αυτών, όπως επιβεβαιώνεται και από το παραπάνω παράδειγµα.

6. Αντίστροφη τετραγωνικής µήτρας. Για να υπάρχει αντίστροφη µιας τετραγωνικής µήτρας, πρέπει η ορίζουσα της µήτρας αυτής να είναι διάφορη του µηδενός. Η αντίστροφη µιας τετραγωνικής µήτρας Α υπολογίζεται µε την εντολή:

inv(A)

[7] Οι µήτρες Α και Β, που ορίσαµε παραπάνω, έχουν ορίζουσα διάφορη του µηδενός, όπως βρήκαµε στο παράδειγµα [6], και η αντίστροφη τους είναι ίση µε,

inv(A) ans = 0.0734 -0.1101 0.1193 -0.0917 0.1376 0.1009 0.1881 -0.0321 -0.2569 inv(B) ans = -0.1264 -0.0345 0.1552 0.1667 0 0 0.0057 0.1379 -0.1207

Η επιβεβαίωση ότι η inv(A) είναι η αντίστροφη της µήτρας Α γίνεται παρακάτω inv(A)*A ans = 1.0000 -0.0000 -0.0000 0.0000 1.0000 0 -0.0000 0 1.0000

[8] Από την άλγεβρα γνωρίζουµε ότι

Page 181: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

9.2 Πράξεις µε µήτρες

181

1 2 2 1[ . ... ] [ ]... [ ]. [ ]n nInverse A A A Inverse A Inverse A Inverse A= ,

που επιβεβαιώνεται και από το παρακάτω παράδειγµα, inv(A*B) ans = 0.0231 0.0042 -0.0584 0.0122 -0.0183 0.0199 -0.0349 0.0222 0.0456 inv(B)*inv(A) ans = 0.0231 0.0042 -0.0584 0.0122 -0.0183 0.0199 -0.0349 0.0222 0.0456

Επίσης, στην άλγεβρα αποδεικνύεται η ιδιότητα

det(Inv(A))=1/det[A] που επιβεβαιώνεται και από την παρακάτω πράξη, det(inv(A)) ans = -0.0046 1/det(A) ans = -0.0046

7. ∆υνάµεις Μήτρας.. Σύµφωνα µε τους κανόνες της γραµµικής

άλγεβρας, η δύναµη Αn µιας µήτρας είναι ισοδύναµη µε το αποτέλεσµα του παρακάτω γινοµένου µε n όρους

Αn = Α*A*A* ...*A Για αρνητικές τιµές του n ισοδυναµεί µε την πράξη

( ( ))n nA inv A− −=

Page 182: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραµµική Άλγεβρα - Μήτρες

182

[9] Χρησιµοποιώντας τις µήτρες Α και Β, που ορίσαµε παραπάνω, έχουµε τα εξής αποτελέσµατα,

A^3 ans = 1088 2106 1060 566 1356 632 574 1096 518 A*A*A ans = 1088 2106 1060 566 1356 632 574 1096 518 A^(-3) ans = -0.0009 -0.0068 0.0103 -0.0067 0.0043 0.0085 0.0153 -0.0016 -0.0273 (inv(A))^3 ans = -0.0009 -0.0068 0.0103 -0.0067 0.0043 0.0085 0.0153 -0.0016 -0.0273

8. Εντολή expm(A). Για µια τετραγωνική µήτρα A, η εντολή

expm(A)

υπολογίζει το άθροισµα 0

/ !n

nA n

=∑ .

Σχόλιο. Σηµειώστε ότι για το γρήγορο υπολογισµό του παραπάνω

αθροίσµατος, ο αλγόριθµος που αξιοποιείται χρησιµοποιεί την τεχνική του

Page 183: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

9.2 Πράξεις µε µήτρες

183

µετασχηµατισµού στο σύστηµα συντεταγµένων που ορίζουν τα ιδιο-ανύσµατα της µήτρας Α, όπου εκτελούνται και οι πράξεις.

[10] Να υπολογιστεί η µήτρα 0

exp ( )0

π⎛ ⎞⎜ ⎟−⎝ ⎠

,

s2=[0 pi; -pi 0]; expm(s2) ans = -1.0000 0.0000 -0.0000 -1.0000

[11] Να υπολογιστεί η µήτρα 1 0

exp ( )0 1

m iπ ⎛ ⎞⎜ ⎟−⎝ ⎠

,

s2=[1 0; 0 -1]; expm(-i*pi*s2) ans = -1.0000 - 0.0000i 0 0 -1.0000 + 0.0000i

[12] Χρησιµοποιώντας τη µήτρα Α που ορίσαµε παραπάνω, έχουµε τα εξής

αποτελέσµατα, expm(A) ans = 1.0e+006 * 0.5392 1.1442 0.5494 0.3169 0.6729 0.3231 0.2788 0.5917 0.2841

Ιδιότητες. Η ποσότητα expm(A+B) είναι γενικά διαφορετική από το γινόµενο expm(A)*expm((B). Σε περίπτωση όµως που δύο µήτρες Α και Β αντιµετατίθενται, δηλαδή ικανοποιούν την σχέση Α*Β=Β*Α, τότε ισχύει η ιδιότητα,

expm(A+B)=expm(A)*expm(B)

Page 184: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραµµική Άλγεβρα - Μήτρες

184

[13] Χρησιµοποιώντας τις µήτρες Α και Β που ορίσαµε παραπάνω έχουµε, expm(A+B) ans = 1.0e+012 * 1.9147 2.6758 1.6782 2.4912 3.4815 2.1835 1.8062 2.5242 1.5831 expm(A)*expm(B) ans = 1.0e+012 * 1.7147 1.9593 1.4048 1.0083 1.1522 0.8261 0.8866 1.0131 0.7264 expm(A+A) ans = 1.0e+012 * 0.8065 1.7120 0.8220 0.4742 1.0066 0.4833 0.4170 0.8852 0.4250 expm(A)*expm(A) ans = 1.0e+012 * 0.8065 1.7120 0.8220 0.4742 1.0066 0.4833 0.4170 0.8852 0.4250

9. Ίχνος µήτρας. Το ίχνος (trace) µιας τετραγωνικής µήτρας ορίζεται

ως το άθροισµα των διαγωνίων στοιχείων της, και υπολογίζεται µε την εντολή

trace(A)

[14] Χρησιµοποιώντας τις δύο µήτρες Α και Β, που ορίσαµε παραπάνω, έχουµε τα εξής αποτελέσµατα,

Page 185: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

9.3 Λύση γραµµικών συστηµάτων

185

trace(A) ans = 16 trace(B) ans = 7

Ιδιότητες. Για το ίχνος µιας µήτρας ισχύει η παρακάτω ιδιότητα trace(A*B)=trace(B*A), αλλά γενικά trace(A*B) ≠ trace(A)*trace(B)

[15] Χρησιµοποιώντας τις µήτρες Α και Β που ορίσαµε παραπάνω έχουµε, trace(A*B) ans = 208 trace(B*A) ans = 208 trace(A)*trace(B) ans = 112

9.3 Λύση γραµµικών συστηµάτων Έστω Α τετραγωνική µήτρα διαστάσεων nxn, και x και b δύο ανύσµατα στήλης µήκους n, τα οποία ικανοποιούν το γραµµικό σύστηµα

A*x=b Η ίδια εξίσωση σε µια άλλη εναλλακτική µορφή γράφεται

i

k

jjjjjjjjjjj

a11 a12 … a1 na21 a22 … a2 n

ª ª ∏ ª

an 1 an 2 … an n

y

zzzzzzzzzzz

i

k

jjjjjjjjjj

x1x2ª

xn

y

zzzzzzzzzz

i

k

jjjjjjjjjj

b1b2ª

bn

y

zzzzzzzzzz

Page 186: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραµµική Άλγεβρα - Μήτρες

186

Όταν η µήτρα A έχει µη µηδενική ορίζουσα, δηλαδή det(A)≠0, τότε το άνυσµα x µπορεί να προσδιοριστεί, συναρτήσει των A και b, από τη λύση του συστήµατος, η οποία υπολογίζεται µε την εντολή

x=inv(A)*b

όπου η εντολή inv(A) υπολογίζει την αντίστροφη µήτρα της Α. Για την εύρεση της λύσης µπορεί επίσης να χρησιµοποιηθεί και η εντολή

x=Α\b Σχόλια: 1. Πρέπει να τονιστεί ότι στην άλγεβρα δεν ορίζεται η πράξη της διαίρεσης

µε µήτρα, και εποµένως η πράξη A\b είναι συµβολική και δεν εκτελεί καµιά πράξη διαίρεσης µε µήτρα, αλλά στην ουσία καθορίζει την τεχνική που θα χρησιµοποιηθεί για να προσδιοριστεί η λύση του γραµµικού συστήµατος (µέθοδος απαλοιφής).

2. Η λύση του συστήµατος γραµµικών εξισώσεων µε τη χρήση της αντίστροφης µήτρας οδηγεί στην εκτέλεση περισσότερων πράξεων απ’ ότι απαιτείται, γίνεται π.χ. ο υπολογισµός της αντιστρόφου µήτρας, ενώ µε τη µέθοδο της απαλοιφής («διαίρεσης» από αριστερά) δεν απαιτείται ο υπολογισµός της. Επειδή οι πράξεις που εκτελούνται µε την τελευταία διαδικασία είναι λιγότερες, συνεπάγεται ότι η µέθοδος αυτή είναι και ταχύτερη και ακριβέστερη.

Για να αποφευχθεί τυχόν σύγχυση που δηµιουργεί η εµφανιζόµενη «διαίρεση» µε µήτρα, το MATLAB έχει επίσης εισαγάγει την εντολή LINSOLVE που υλοποιεί τη λύση γραµµικών συστηµάτων µε τη µέθοδο της απαλοιφής. Η εντολή για την εύρεση της λύσης του παραπάνω συστήµατος είναι

x= linsolve(A, b) Σε περιπτώσεις όπου η εξίσωση είναι της µορφής

y*B=c

Page 187: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

9.3 Λύση γραµµικών συστηµάτων

187

όπου Β τετραγωνική µήτρα διαστάσεων nxn, και y και c δύο ανύσµατα γραµµής µήκους n, τότε η ταχύτερη διαδικασία για τον υπολογισµό της λύσης είναι µε την εντολή της «διαίρεσης» από τα δεξιά

y=c/B

[1] Να λυθεί το σύστηµα 1 1 11 2 2

xy

⎛ ⎞⎛ ⎞ ⎛ ⎞=⎜ ⎟⎜ ⎟ ⎜ ⎟−⎝ ⎠⎝ ⎠ ⎝ ⎠

A1=[1 1; 1 -2]; b1=[1;2]; x=A1\b1 x = 1.3333 -0.3333

Το ίδιο αποτέλεσµα βρίσκουµε και µε την εντολή x=inv(A1)*b1 x = 1.3333 -0.3333

[2] Έστω Α η µήτρα που ορίσαµε στην παράγραφο 8.2, και b η µήτρα

στήλης b=[6;3;1], τότε η λύση του συστήµατος A*x=b είναι η ακόλουθη b=[6;3;1]; A\b ans = 0.2294 -0.0367 0.7752

Το ίδιο αποτέλεσµα βρίσκουµε και µε την εντολή inv(A)*b

Page 188: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραµµική Άλγεβρα - Μήτρες

188

ans = 0.2294 -0.0367 0.7752

[3] Έστω Α η µήτρα που ορίσαµε στην παράγραφο 8.2, και c η µήτρα

γραµµής c=[6,3,1], τότε η λύση του συστήµατος x*A=c είναι η ακόλουθη

c=[6 3 1]; x=c/A x = 0.3532 -0.2798 0.7615

Το ίδιο αποτέλεσµα βρίσκουµε και µε την εντολή x=c*inv(A) x = 0.3532 -0.2798 0.7615

9.4 Ιδιοτιµές και Ιδιοανύσµατα µητρών Οι ιδιοτιµές και τα ιδιοανύσµατα µιας τετραγωνικής µήτρας A, διαστάσεων n n× , προσδιορίζονται από την εξίσωση,

i i iA b bλ⋅ = , i=1, 2, …, n

µε bi τα ιδιοανύσµατα και λi τις αντίστοιχες ιδιοτιµές. Τα ανύσµατα bi είναι ανύσµατα-στήλης µε n συνιστώσες, ενώ οι ιδιοτιµές είναι αριθµητικά µεγέθη. Το MATLAB περιέχει εσωτερική εντολή για τον υπολογισµό των ιδιοτιµών και των ιδιοανυσµάτων τους, και δίνεται παρακάτω.

Οι ιδιοτιµές µιας τετραγωνικής µήτρας Α υπολογίζονται µε την εντολή E=eig(A)

Page 189: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

9.4 Ιδιοτιµές και Ιδιοανύσµατα µητρών

189

η οποία αποδίδει ένα άνυσµα-στήλη, Ε, του οποίου τα στοιχεία είναι οι ιδιοτιµές της µήτρας Α Η εντολή για ταυτόχρονο υπολογισµό ιδιοτιµών και ιδιοανυσµάτων µιας τετραγωνικής µήτρας είναι η παρακάτω,

[V, D]=eig(A) η οποία αποδίδει µια διαγώνιο µήτρα D, η οποία στη διαγώνιο της περιέχει τις ιδιοτιµές της µήτρα Α, και µία µήτρα V της οποίας οι στήλες δίνουν τα αντίστοιχα ιδιοανύσµατα, δηλαδή: Το στοιχείο D(i, i) δίνει την i-ιδιοτιµή, και το V(:, i) είναι το i-ιδιοάνυσµα της µήτρας A. Η εξίσωση που ικανοποιούν οι παραπάνω µήτρες είναι η εξής

Α*V = V*D Παραδείγµατα

[1] Να βρεθούν οι ιδιοτιµές και τα ιδιοανύσµατα της µήτρας 1

11i

si

⎛ ⎞= ⎜ ⎟− −⎝ ⎠

,

>> s1=[1,i; -i, -1] s1 = 1.0000 0 + 1.0000i 0 - 1.0000i -1.0000 [V,D]=eig(s1) V = 0 + 0.3827i 0 + 0.9239i -0.9239 0.3827 D = -1.4142 0 0 1.4142

Page 190: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Γραµµική Άλγεβρα - Μήτρες

190

Για να επιβεβαιωθούν τα αποτελέσµατα υπολογίζονται οι ποσότητες s1*V και V*D που επιβεβαιώνουν τη λύση, όπως φαίνεται παρακάτω s1*V ans = 0 - 0.5412i 0 + 1.3066i 1.3066 0.5412 V*D ans = 0 - 0.5412i 0 + 1.3066i 1.3066 0.5412

[2] Για τη µήτρα Α που δίνεται στη παράγραφο 9.2 έχουµε [V,D]=eig(A) V = -0.3474 0.7704 -0.7874 -0.2678 -0.5318 -0.4630 0.8987 0.3516 -0.4071 D = -3.1249 0 0 0 4.9065 0 0 0 14.2183

Η δεύτερη ιδιοτιµή, και το αντίστοιχο ιδιοάνυσµα της µήτρας, δίνονται παρακάτω, D(2,2) ans = 4.9065 V(:,2) ans = 0.7704 -0.5318 0.3516

Page 191: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

191

ΚΕΦΑΛΑΙΟ 10

Ανάλυση µε το MATLAB

Με τη χρήση εντολών του MATLAB µας δίνεται η δυνατότητα να εκτελέ-σουµε υπολογισµούς της µαθηµατικής ανάλυσης. Μια εισαγωγή στην εκτέλεση τέτοιων υπολογισµών, για συναρτήσεις µιας µεταβλητής, δίνεται στο παρόν κεφάλαιο. 10.1 Πολυώνυµα Το MATLAB παρέχει µια σειρά από εντολές για πράξεις µε πολυώνυµα. Λόγω της δοµής τους, τα πολυώνυµα µπορούν εύκολα να διερευνηθούν αριθµητικά, να υπολογιστούν όλες οι ρίζες τους ανεξάρτητα βαθµού, να υπολογιστούν οι παράγωγοι και τα ολοκληρώµατα τους, και να αξιοποι-ηθούν για προσαρµογή δεδοµένων.

10.1.1 Συµβολισµός πολυωνύµων Ένα πολυώνυµο µιας µεταβλητής, είναι ένα άθροισµα δυνάµεων της

µεταβλητής αυτής. Η γενική µορφή ενός πολυωνύµου n-οστού βαθµού είναι η ακόλουθη,

11 1 0...n n

n na x a x a x a−−+ + + + .

Εποµένως, ένα πολυώνυµο ορίζεται µονοσήµαντα µε τον καθορισµό των συντελεστών των δυνάµεων του x, 1 1 0[ , ,..., , ]n na a a a− , και στο MATLAB

αξιοποιείται ο τρόπος αυτός για τον ορισµό ενός πολυωνύµου, δηλαδή µε µια

Page 192: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

192

λίστα που δίνει τους συντελεστές των δυνάµεων του, όπως π.χ. η λίστα µε n+1 αριθµούς,

1 1 0[ , ,..., , ]n np a a a a−= .

Σηµειώστε ότι οι µηδενικοί συντελεστές, δυνάµεων µικρότερου βαθµού από το βαθµό του πολυωνύµου, υποχρεωτικά πρέπει να αναφέρονται στη λίστα, διότι η παράληψη τους θα δώσει λανθασµένα στοιχεία και για το βαθµό του πολυωνύµου και για τους συντελεστές των δυνάµεων του. Επίσης, το πρώτο στοιχείο της λίστας δηλώνει το συντελεστή της µεγαλύτερης δύναµης, και το τελευταίο της µηδενικής δύναµης. Παραδείγµατα Στα επόµενα παραδείγµατα χρησιµοποιούνται για εφαρµογές τα παρακάτω δύο πολυώνυµα, p1=[1 2 3 0 1] p2=[1 0 4 2 1]

10.1.2 Άθροισµα πολυωνύµων Για την άθροιση πολυωνύµων ισχύει ο ίδιος κανόνας που ισχύει και για

το άθροισµα µε λίστες: Για τα πολυώνυµα, ισούται µε πολυώνυµο του οποίου οι συντελεστές των δυνάµεων του ισούνται µε το άθροισµα των αντίστοιχων συντελεστών των επιµέρους πολυωνύµων, και για λίστες µε τον ίδιο αριθµό στοιχείων, ισούται µε µία λίστα της οποίας τα στοιχεία είναι το άθροισµα των αντίστοιχων στοιχείων των επί µέρους λιστών. ∆ηλαδή, το άθροισµα δύο πολυωνύµων, 1p και 2p , υπολογίζεται µε την εντολή,

1 2p p+

Για να εφαρµοστεί όµως ο κανόνας αυτός, θα πρέπει πρώτα τα

πολυώνυµα να αναχθούν στον ίδιο βαθµό, που γίνεται µε την αναγωγή τους σε πολυώνυµα βαθµού ίσου µε το µεγαλύτερο απ’ αυτούς, προσθέτοντας όρους µε µηδενικούς συντελεστές στα πολυώνυµα µε µικρότερη δύναµη. Π.χ. το πολυώνυµο [1,2,3,4] που είναι τρίτου βαθµού ανάγεται στο

Page 193: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

10.1 Πολυώνυµα

193

πολυώνυµο [0,0,1,2,3,4] που αντιπροσωπεύει πολυώνυµο πέµπτου βαθµού, µε µηδενικούς όµως συντελεστές για τις δυνάµεις πέµπτου και τετάρτου βαθµού. Μετά την αναγωγή αυτή, το άθροισµα των πολυωνύµων

1 1 1 0

2 1 1 0

[ , ,..., , ],[ , ,..., , ]

n n

n n

p a a a ap b b b b

==

είναι ίσο µε το πολυώνυµο,

1 2 1 1 1 1 0 0[ , ,..., , ]n n n nP p p a b a b a b a b− −= + = + + + + .

Παράδειγµα Για τα πολυώνυµα που ορίστηκαν στην παράγραφο 10.1.1 έχουµε p1+p2 ans = 2 2 7 2 2

10.1.3 Γινόµενο πολυωνύµων Το γινόµενο δύο πολυωνύµων, 1p και 2p , υπολογίζεται µε τον ίδιο

τρόπο όπως και η συνέλιξη δύο λιστών, και εποµένως υπολογίζεται από τη συνέλιξη των δύο λιστών που τα αποδίδουν, και εκτελείται µε την εντολή,

conv( 1p , 2p )

Παράδειγµα Για τα πολυώνυµα που ορίστηκαν στην παράγραφο 10.1.1 έχουµε conv(p1,p2) ans = 1 2 7 10 18 8 7 2 1

10.1.4 Ρίζες πολυωνύµου Όλες οι ρίζες ενός πολυωνύµου οποιοδήποτε βαθµού, µπορούν να

υπολογιστούν αριθµητικά, και ο υπολογισµός αυτός εκτελείται µε την εντολή roots(p)

µε p τη λίστα που το ορίζει.

Page 194: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

194

Σηµειώστε ότι τα πολυώνυµα αποδίδονται ως ανύσµατα-γραµµές, ενώ οι ρίζες τους ως ανύσµατα-στήλες. Παράδειγµα Για τα πολυώνυµα που ορίστηκαν στην παράγραφο 10.1.1 έχουµε r1=roots(p1) r1 = -1.1102 + 1.3935i -1.1102 - 1.3935i 0.1102 + 0.5504i 0.1102 - 0.5504i r2=roots(p2) r2 = 0.2643 + 1.9904i 0.2643 - 1.9904i -0.2643 + 0.4221i -0.2643 - 0.4221i

Έχοντας τις ρίζες ενός πολυωνύµου, αποθηκευµένες στην παράµετρο

r ως άνυσµα-στήλη, µπορούµε να δηµιουργήσουµε το ίδιο το πολυώνυµο µε την εντολή

p(1)*poly(r) όπου p(1) είναι ο συντελεστής της µεγαλύτερης µη µηδενικής δύναµης του πολυωνύµου αυτού. Παράδειγµα Χρησιµοποιώντας τις ρίζες που βρήκαµε στο παραπάνω παράδειγµα έχουµε poly(r1) ans = 1.0000 2.0000 3.0000 0.0000 1.0000 poly(r2)

Page 195: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

10.1 Πολυώνυµα

195

ans = 1.0000 0.0000 4.0000 2.0000 1.0000

10.1.5 Υπολογισµός τιµών πολυωνύµου Έστω ότι έχουµε ένα πολυώνυµο, που αποδίδεται από τη λίστα p, του

οποίου θέλουµε να υπολογίσουµε την αριθµητική τιµή για τη τιµή x=x1 της ανεξάρτητης µεταβλητής. Ο υπολογισµός αυτός γίνεται µε την εντολή

polyval(p, x1) Όταν θέλουµε να υπολογίσουµε τις τιµές του πολυωνύµου για πολλές τιµές της µεταβλητής του, που δίνονται ως στοιχεία µίας λίστας x, τότε ο υπολογισµός εκτελείται µε την εντολή

polyval(p, x) Παράδειγµα Για τα πολυώνυµα που ορίστηκαν στη παράγραφο 10.1.1 έχουµε polyval(p1,sqrt(2)) ans = 16.6569 polyval(p2, [1 2 3 4]) ans = 8 37 124 329

10.1.6 Παράγωγοι και ολοκληρώµατα πολυωνύµων Η παράγωγος ενός πολυωνύµου, που ορίζεται µε τη λίστα p, υπολο-

γίζεται µε την εντολή, polyder(p)

ενώ το ολοκλήρωµα του, υπολογίζεται µε την εντολή

polyint(p, K) όπου K είναι η σταθερά ολοκλήρωσης.

Page 196: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

196

Παράδειγµα Για τα πολυώνυµα που ορίστηκαν στην παράγραφο 10.1.1 έχουµε polyder(p1) ans = 4 6 6 0 polyint(p2,2) ans = 0.2000 0 1.3333 1.0000 1.0000 2.0000

10.1.7 Προσαρµογή δεδοµένων µε πολυώνυµο Για την πειραµατική µελέτη ενός συστήµατος, ακολουθούµε τη

διαδικασία συγκέντρωσης δεδοµένων, που γίνεται µε µετρήσεις των ιδιοτήτων που αποδίδουν τη συµπεριφορά του κάτω από ορισµένες συνθήκες, και κατόπιν από τη διερεύνηση των αποτελεσµάτων αυτών προσπαθούµε να αποκρυπτογραφήσουµε τους νόµους που διέπουν το σύστηµα. Μια από τις πιο συνηθισµένες διαδικασίες διερεύνησης των δεδοµένων είναι µε τη µέθοδο της προσαρµογής (fitting). Στην παρούσα παράγραφο θα διερευνήσουµε την περίπτωση προσαρµογής δεδοµένων που εξαρτώνται από µία µεταβλητή, µε τη χρήση πολυωνύµου µιας µεταβλητής.

Εξετάζουµε την περίπτωση ενός συστήµατος, όπου τα δεδοµένα των µετρήσεων [ , ]i ix y , που περιγράφουν την εξάρτηση µιας ιδιότητας y από την

παράµετρο x, είναι αποθηκευµένα στις λίστες

1 2[ , ,..., ]Nx x x x= , και 1 2[ , ,..., ]Ny y y y= .

Η µέθοδος της προσαρµογής, µε τη διαδικασία των ελαχίστων τετραγώνων, αποβλέπει στο να προσδιορίσει τους συντελεστές 1 0[ , ,..., ]n nc c c− ενός

πολυωνύµου n-οστού βαθµού, 1

1 0 1 1 0( , ,..., , ) ...n nn n n n nP c c c x c x c x c x c−

− −= + + + +

ώστε το πολυώνυµο να αποδίδει την ιδιότητα αυτή µε τον καλύτερο τρόπο, και ο προσδιορισµός γίνεται από την απαίτηση να ελαχιστοποιείται η ποσότητα

Page 197: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

10.1 Πολυώνυµα

197

( )21 0 11

( , ,..., ) ( , ..., , )Nn n n i ii

J c c c P c c x y− == −∑ .

Η εντολή του MATLAB που διεκπεραιώνει τη διαδικασία αυτή, είναι η ακόλουθη

p=polyfit(x, y, n) όπου x και y είναι οι λίστες µε τις συντεταγµένες των µετρήσεων, και n ο βαθµός του πολυωνύµου που χρησιµοποιείται για την προσαρµογή. Η παράµετρος p είναι µια λίστα-γραµµή µε n+1 στοιχεία, και αποδίδει το πολυώνυµο παρεµβολής, το οποίο δίνεται από τη σχέση,

1(1) (2) ... ( ) ( 1)n np x p x p n x p n−+ + + + + Έχοντας προσδιορίσει το πολυώνυµο παρεµβολής, µπορούµε µε τη χρήση του να εκτελέσουµε τους απαιτούµενους υπολογισµούς, όπως π.χ. να προσδιορίσουµε την αναµενόµενη τιµή της ιδιότητας την οποία περιγράφει το πολυώνυµο, για καθορισµένη τιµή της ανεξάρτητης µεταβλητής, χρησιµοποιώντας την εντολή,

polyval(p, x) Παράδειγµα Υποθέτουµε ότι τα δεδοµένα που «αποδίδουν» ένα πείραµα µπορούν να παραχθούν από τη συνάρτηση 2 44y x x= − + , και το σφάλµα στις «µετρήσεις» τους από την εντολή 4( 0.5)rand − . Τα δεδοµένα που δηµιουργούνται µε τον τρόπο αυτό προσαρµόζονται µε ένα πολυώνυµο τετάρτου βαθµού µε την παρακάτω διαδικασία, x=linspace(0,3,20); y=-4*x.^2+x.^4; y=y+4*(rand(1,20)-0.5); plot(x,y) pol=polyfit(x,y,4) y1=polyval(pol,x); plot(x,y,'+',x,y1,'r--')

Page 198: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

198

0 0.5 1 1.5 2 2.5 3-10

0

10

20

30

40

50

10.2 Εντοπισµός ρίζας συνάρτησης Στην προηγούµενη παράγραφο αναφερθήκαµε στον προσδιορισµό των ριζών ενός πολυωνύµου. Πολλές φορές όµως ανακύπτει η ανάγκη προσδιορισµού ρίζας µιας τυχούσας συνάρτησης, οποιασδήποτε µορφής, που βρίσκεται κοντά σε κάποια τιµή του ορίσµατος της. Με το MATLAB έχουµε τη δυνατότητα εντοπισµού της ρίζας αυτής, και η εντολή που την προσδιορίζει είναι,

fzero(@f, x0) όπου x0 είναι η τιµή του ορίσµατος της συνάρτησης στη περιοχή του οποίου ενδιαφερόµαστε να εντοπίσουµε τη ρίζα. Στην εντολή αυτή, η συνάρτηση δίνεται πάντοτε µε µορφή οδηγού, και ο αλγόριθµος που χρησιµοποιείται για τον υπολογισµό της ρίζας αναζητεί πρώτα να βρει µια περιοχή γύρο από το x0, στην οποία οι τιµές της συνάρτησης ν’ αλλάζουν πρόσηµο, και κατόπιν διερευνά την περιοχή αυτή για εντοπισµό της ρίζας. Εάν δεν κατορθώσει να εντοπίσει µια τέτοια περιοχή, τότε διακόπτεται η διαδικασία και το πρόγραµµα απαντά µε διαγνωστικό µήνυµα.

Page 199: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

10.2 Εντοπισµός ρίζας συνάρτησης

199

Παράδειγµα [1] Εντοπισµός της ρίζας που βρίσκεται κοντά στο τρία, της συνάρτησης

(3 )exp( ) 3x x− − , >> fun=@(x) (3-x)*exp(x)-3; >> fzero(fun, 3) ans = 2.8214

[2] Ο εντοπισµός µιας ρίζας της συνάρτησης 2 4x + , µε x0=1 ως αρχική

επιλογή, >> ff1=@(x) x.^2+4 ff1 = @(x) x.^2+4 >> fzero(ff1, 1) Exiting fzero: aborting search for an interval containing a sign change because NaN or Inf function value encountered during search. (Function value at -1.7162e+154 is Inf.) Check function or try again with a different starting value. ans = NaN

δεν επιτυγχάνεται, ενώ ο εντοπισµός µε µιγαδική αρχική επιλογή είναι επιτυχής, >> fzero(ff1, i) ans = 0 + 2.0000i

Η εντολή για τον εντοπισµό της ρίζας µπορεί επίσης να δοθεί µε το καθορισµό του διαστήµατος µέσα στο οποίο θα αναζητηθεί η ρίζα. Η εντολή τότε γίνεται,

Page 200: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

200

fzero(@f, [x1, x2])

Για να γίνει αποδεκτό ένα διάστηµα [x1, x2], θα πρέπει τα πρόσηµα της συνάρτησης στα δύο άκρα του διαστήµατος να είναι αντίθετα. [3] Εντοπισµός της ρίζας της συνάρτησης 3 2 3x x− + + , που βρίσκεται στο

διάστηµα [0, 3], >> ff2=@(x) -x.^3+2*x+3; ff2 = @(x) -x.^3+2*x+3 >> fzero(ff2, [0 3]) ans = 1.8933

Σχόλιο: Γενικά κρίνεται σκόπιµο, προτού χρησιµοποιηθεί η εντολή

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

10.3 Τοπικά ακρότατα συναρτήσεων Ο προσδιορισµός του τοπικού ακρότατου µιας συνάρτησης f(x) είναι ένα πρόβληµα παρόµοιο µε αυτό του εντοπισµού της ρίζας, διότι το ακρότατο προσδιορίζεται από τη ρίζα της πρώτης παραγώγου. Με τη χρήση του MATLAB µπορούµε να προσδιορίσουµε τα τοπικά ακρότατα µιας τυχούσας συνάρτησης. Θα παρουσιάσουµε την περίπτωση συνάρτησης µιας µεταβλητής.

10.3.1 Τοπικό ελάχιστο Ο προσδιορισµός του τοπικού ελάχιστου µιας συνάρτησης f(x), που

βρίσκεται σε µια περιοχή τιµών [x1, x2], γίνεται µε την εντολή

Page 201: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

10.3 Τοπικά ακρότατα συναρτήσεων

201

fminbnd(@f, x1, x2) Η συνάρτηση αποδίδεται πάντα µε οδηγό. Εάν η εντολή αποδοθεί σε δύο παραµέτρους, όπως γίνεται στην επόµενη εντολή,

[X, FVAL]=fminbnd(@f, x1, x2) τότε αποδίδει τόσο την τιµή του ορίσµατος, όσο και τη τιµή της συνάρτησης στο ελάχιστο. Παραδείγµατα [1] Προσδιορισµός του ελάχιστου της συνάρτησης 5 ( )x six x+ , που

βρίσκεται µεταξύ 4 και 5,

[X, FV]=fminbnd(@(x) x+5*sin(x), 4, 5) X = 4.5110 FV = -0.3879

Όπως και στη διαδικασία εύρεσης µιας ρίζας, έτσι και στον εντοπισµό

του ελάχιστου µιας συνάρτησης, είναι σκόπιµο πρώτα να γίνεται γραφική παράσταση της συνάρτησης, για να αποκτάται µια εικόνα της συµπεριφοράς της, και µετά να επιλέγεται η περιοχή διερεύνησης για τον προσδιορισµό του ζητούµενου ελάχιστου.

10.3.2 Τοπικό µέγιστο Με την εντολή fminbnd µπορούµε επίσης να προσδιορίσουµε και το

τοπικό µέγιστο µιας συνάρτησης µιας µεταβλητής ( )f x , το οποίον αντιστοιχεί στο ελάχιστο της ( )f x− .

[2] Να βρεθεί το τοπικό µέγιστο της συνάρτησης 5sin( )x x+ , στην περιοχή

[6, 9],

Page 202: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

202

[X, FV]=fminbnd(@(x) -(x+5*sin(x)), 6,9) X = 8.0553 FV = -12.9543

10.4 Αριθµητική ολοκλήρωση Ο αριθµητικός υπολογισµός ολοκληρώµατος µιας συνάρτησης, που είτε δίνεται από αριθµητικά δεδοµένα, είτε ως συγκεκριµένη αναλυτική έκφραση, δίνεται παρακάτω

10.4.1 Υπολογισµός ολοκληρώµατος από δεδοµένα Η αριθµητική τιµή του ολοκληρώµατος µιας συνάρτησης, της οποίας

δίνονται οι αριθµητικές τιµές και είναι αποθηκευµένες στη λίστα y, για τις n τιµές του ορίσµατος της που είναι αποθηκευµένες στη λίστα x, υπολογίζεται µε τον κανόνα των τραπεζίων από τη σχέση

1 12

1 ( )( )2

ni i i ii

I y y x x− −== + −∑ .

Ο υπολογισµός αυτός γίνεται από το MATLAB µε την εντολή trapz(x, y)

Όταν η εντολή κληθεί µε ένα όρισµα, µε τον ακόλουθο τρόπο

trapz( y) τότε θεωρείται ότι η διαφορά 1( )i ix x −− , µεταξύ των διαδοχικών τιµών του x,

είναι ίση µε τη µονάδα. Παράδειγµα Μια συνάρτηση δίνεται αριθµητικά, και θεωρούµε ότι οι τιµές της αποδίδονται µε την εντολή rand. Έστω ότι η λίστα y περιέχει 1000 τιµές της συνάρτησης, που δηµιουργούνται µε την κλήση της εντολής rand. Το

Page 203: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

10.4 Αριθµητική ολοκλήρωση

203

ολοκλήρωµα 1000

1( ) /1000y n dn∫ δίνει τη µέση τιµή των αριθµών αυτών. Ο

αριθµητικός υπολογισµός της ποσότητας αυτής γίνεται παρακάτω, y=rand(1000,1); trapz(y)/1000 ans = 0.5012

Η οριακή τιµή της ποσότητας αυτής, για άπειρο αριθµό σηµείων, είναι 0.5.

10.4.2 Υπολογισµός ολοκληρώµατος συνάρτησης Ο αριθµητικός υπολογισµός του ολοκληρώµατος µιας συνάρτησης που

δίνεται από µια αναλυτική έκφραση, ( )f x , από το όριο x1 στο x2, 2

1( )

x

xf x dx∫ , υπολογίζεται µε την εντολή

quad(@f, x1, x2) Στην παραπάνω εντολή η συνάρτηση καλείται πάντα µε οδηγό, και χρησιµο-ποιείται ο αλγόριθµος Simpson µεταβλητού βήµατος για τον υπολογισµό του ολοκληρώµατος. Παράδειγµα

Αριθµητικός υπολογισµός του ολοκληρώµατος 1 2 4

01 x x dx+ +∫ .

f=@(x) sqrt(1+x.^2+x.^4) f = @(x) sqrt(1+x.^2+x.^4) quad(f,0,1) ans = 1.2197

Page 204: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

204

10.5 Παρεµβολή σε µία διάσταση (Interpolation) Σε πολλά προβλήµατα που διερευνούµε, γνωρίζουµε τις αριθµητικές τιµές µιας ποσότητας για περιορισµένο αριθµό τιµών των µεταβλητών απ’ τις οποίες εξαρτάται. Ενδιαφερόµαστε δε να βρούµε µια διαδικασία προσδιορισµού, από τις υπάρχουσες τιµές, των τιµών της ποσότητας αυτής για ενδιάµεσες τιµές των µεταβλητών. Μια τέτοια διαδικασία µπορεί να γίνει µε τη µέθοδο της προσαρµογής, όπως παρουσιάστηκε στην παράγραφο 10.1.7. Μια άλλη διαδικασία είναι αυτή της παρεµβολής. Με τη µέθοδο της παρεµβολής αποβλέπουµε στο να περιγράψουµε τα δεδοµένα ως µια συνάρτηση των µεταβλητών απ΄ τις οποίες εξαρτάται, µε τέτοιο τρόπο ώστε η συνάρτηση που θα προκύψει να αναπαράγει πλήρως τα δεδοµένα που έχουµε, δηλαδή για τιµές των µεταβλητών για τις οποίες υπάρχουν δεδοµένα, η συνάρτηση να αναπαράγει τα δεδοµένα αυτά. Θα παρουσιάσουµε µόνο την περίπτωση που το σύστηµα εξαρτάται από µία µόνο µεταβλητή (µονοδιάστατη περίπτωση).

Για το σύστηµα που εξετάζουµε, τη µετρήσιµη ποσότητα τη συµβολίζουµε µε y, και θεωρούµε ότι εξαρτάται από µια µόνο µεταβλητή που τη συµβολίζουµε µε x, οπότε τα δεδοµένα αποτελούνται από δυάδες , i ix y , που δίνουν τις τιµές της ποσότητας, iy , για συγκεκριµένες τιµές

της µεταβλητής, ix . Η απλούστερη συνάρτηση παρεµβολής που περνά από

n+1 δεδοµένα, , i ix y , i=1,…n+1, είναι ένα πολυώνυµο n-οστού βαθµού,

0

( )n

kkf x c x=∑ .

Οι n+1 συντελεστές , 0,1,..., kc k n= του πολυωνύµου αυτού προσδιο-

ρίζονται από την απαίτηση η παραπάνω συνάρτηση να περνά από τα n+1 σηµεία, ( )( ii xfy = , i=1,…n+1), το δε σύστηµα που προκύπτει από τις

συνθήκες αυτές, σε µορφή µήτρας, είναι το ακόλουθο

Page 205: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

10.5 Παρεµβολή σε µία διάσταση (Interpolation)

205

1 1 1

12 2 2

0 11 1

. . . 1

. . . 1. . . . . .. . . . . .

. . . 1

nn

nn

nnn n

x x c ycx x y

c yx x

++ +

⎛ ⎞ ⎛ ⎞ ⎛ ⎞⎜ ⎟ ⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟ ⎜ ⎟=⎜ ⎟ ⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟⎜ ⎟ ⎝ ⎠⎝ ⎠⎝ ⎠

.

Η λύση του γραµµικού αυτού συστήµατος δίνει τις τιµές των συντελεστών ic . Συγκεκριµένες εκφράσεις πολυωνύµων παρεµβολής, π.χ. πολυώνυµα

παρεµβολής Newton και Lagrange, µε συγκεκριµένες εκφράσεις για τους συντελεστές του πολυωνύµου, δίνονται σε βιβλία αριθµητικής ανάλυσης.

Στη διαδικασία παρεµβολής, για ένα µεγάλο αριθµό δεδοµένων, n, ποτέ δεν χρησιµοποιείται πολυώνυµο τάξεως n-1, ίσης µε τον αριθµό των σηµείων µειωµένο κατά ένα. Μια τέτοια επιλογή θα προκαλούσε ταλαντώσεις στις ενδιάµεσες περιοχές µεταξύ των σηµείων, που γίνονται µεγαλύτερες όσο αυξάνει ο βαθµός του πολυωνύµου. Η διαδικασία που επιλέγεται είναι ο διαχωρισµός των δεδοµένων σε διαδοχικές οµάδες µε ίσο, και µικρό αριθµό σηµείων, σε κάθε µια από τις οποίες γίνεται παρεµβολή µε πολυώνυµο του αντίστοιχου βαθµού. Στο MATLAB η διαδικασία παρεµβολής είναι η ακόλουθη: Για δεδοµένα, των οποίων οι x και y συντεταγµένες είναι αποθηκευµένες στις µονοδιάστατες λίστες που αποκαλούµε x και y αντίστοιχα, ορίζουµε τις ενδιάµεσες τιµές της µεταβλητής στις οποίες θέλουµε να προσδιορίσουµε τις ποσότητες, και τις αποθηκεύουµε στη λίστα xi. Οι τιµές των ποσοτήτων που προκύπτουν από παρεµβολή, για τις ενδιάµεσες αυτές τιµές των παραµέτρων, υπολογίζονται µε την εντολή

yi=interp1(x, y, xi) Συγκρίνοντας τις δύο µεθόδους, προσαρµογής και παρεµβολής, παρατηρούµε τα εξής: 1. Στην προσαρµογή προσδιορίζεται µια συνάρτηση που ισχύει σε όλο το

εύρος της περιοχής που εκτείνονται τα δεδοµένα, ενώ στην παρεµβολή

Page 206: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

206

δηµιουργούµε µια τµηµατική συνάρτηση για την περιοχή αυτή, η οποία έχει διαφορετικούς συντελεστές σε κάθε τµήµα της.

2. Η συνάρτηση προσαρµογής αποδίδει µια µέση συµπεριφορά των δεδοµένων και γενικά δεν περνά πάνω από τα σηµεία που καθορίζουν τα δεδοµένα, σε αντίθεση µε τη συνάρτηση παρεµβολής, που περνά από όλα αυτά τα σηµεία.

Παράδειγµα Στο παρακάτω παράδειγµα χρησιµοποιούνται µερικά σηµεία της συνάρτησης

( ) cos( )f x x x= + για τον υπολογισµό, µε τη µέθοδο της παρεµβολής, ενδιάµεσων τιµών της συνάρτησης, x=0:0.05:4*pi; y=x+cos(x); zx=linspace(0,4*pi,21); % zy= interpolating values of y at the positions of zx zy=interp1(x,y,zx); plot(x,y,zx,zy,'*')

0 2 4 6 8 10 12 140

2

4

6

8

10

12

14

Υπάρχουν στο MATLAB διάφορες επιλογές για το πολυώνυµο

παρεµβολής, που µπορούν να αποτυπωθούν µε την εντολή help, και συνοπτικά δίνονται παρακάτω

Page 207: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

10.5 Παρεµβολή σε µία διάσταση (Interpolation)

207

'nearest' - αποδίδει το πλησιέστερο από τα υπάρχοντα σηµεία, 'linear' - εκτελεί γραµµική παρεµβολή µεταξύ δύο σηµείων, 'spline' - εκτελεί τµηµατική κυβική spline παρεµβολή (SPLINE), 'pchip' - εκτελεί τµηµατική κυβική παρεµβολή που διατηρεί το σχήµα. Στο MATLAB έχουµε τη δυνατότητα να καθορίζουµε και τη µέθοδο για τον υπολογισµό των σηµείων παρεµβολής, µε την εντολή

yi=interp1(x, y, xi, ‘method’) Παράδειγµα Στο παρακάτω παράδειγµα χρησιµοποιούνται µερικά σηµεία της συνάρτησης

( ) cos( )f x x x= + για τον υπολογισµό, µε τη µέθοδο της παρεµβολής SPLINE, ενδιάµεσων τιµών της συνάρτησης, x=0:0.05:4*pi; y=x+cos(x); zx=linspace(0,4*pi,21); % zy= interpolating values of y at the positions of zx zy=interp1(x,y,zx,'spline'); plot(x,y,zx,zy,'*')

0 2 4 6 8 10 12 140

2

4

6

8

10

12

14

Page 208: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

208

10.5.1 Τµηµατικά πολυώνυµα παρεµβολής Από τις µεθόδους παρεµβολής που διαθέτει το MATLAB, οι πιο

εξελιγµένες είναι οι µέθοδοι παρεµβολής SPLINE και PCHIP, οι οποίες µπορούν να αποδώσουν εξωτερικά και τα τµηµατικά πολυώνυµα παρεµβολής, τα οποία µπορούν να αποθηκευτούν, µε µια από τις εντολές,

pp=spline(x,y) ή

pp=pchip(x,y) και να χρησιµοποιηθούν σε µεταγενέστερους υπολογισµούς, όπως π.χ. για να εκτελεστούν παραγωγίσεις και ολοκληρώσεις, όπως θα δούµε στην επόµενη παράγραφο, ή για να υπολογιστούν τιµές παρεµβολής για οποιαδήποτε οµάδα, xi, ενδιάµεσων σηµείων που τυχόν έχουµε, µε την εντολή

yi=ppval(pp, xi) Παράδειγµα Ένα παράδειγµα χρήσης των τµηµατικών πολυωνύµων παρεµβολής δίνεται παρακάτω, όπου χρησιµοποιούνται µερικά σηµεία της συνάρτησης

( ) cos( )f x x x= + για να δηµιουργηθούν τα τµηµατικά αυτά πολυώνυµα, και κατόπιν χρησιµοποιούνται για τον υπολογισµό ενδιάµεσων τιµών της συνάρτησης, x=0:0.05:4*pi; y=x+cos(x); zx=linspace(0,4*pi,21); pp=spline(x,y); zy=ppval(pp,zx); plot(x,y,zx,zy,'*')

Page 209: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

10.5 Παρεµβολή σε µία διάσταση (Interpolation)

209

0 2 4 6 8 10 12 140

2

4

6

8

10

12

14

10.5.2 Υπολογισµός παραγώγων και ολοκληρωµάτων Τα τµηµατικά πολυώνυµα παρεµβολής, που υπολογίσαµε παραπάνω,

µπορούν να χρησιµοποιηθούν για να υπολογιστούν παράγωγοι και ολοκληρώµατα της συνάρτησης παρεµβολής.

1) Υπολογισµός παραγώγων Οι παράγωγοι των τµηµατικών πολυωνύµων παρεµβολής υπολογίζονται, και αποδίδονται επίσης υπό µορφή τµηµατικών πολυωνύµων, µε την εντολή

ppd=fnder(pp) Τα τµηµατικά πολυώνυµα που έτσι προκύπτουν, µπορούν να χρησιµοποιηθούν για τον υπολογισµό των τιµών των παραγώγων σε ενδιάµεσα σηµεία, που είναι αποθηκευµένα στη λίστα xi, µε την εντολή

yid=ppval(ppd, xi) Παράδειγµα Στο παρακάτω παράδειγµα χρησιµοποιούνται µερικά σηµεία της συνάρτησης

( ) cos( )f x x x= + για να δηµιουργηθούν τα τµηµατικά αυτά πολυώνυµα, τα οποία κατόπιν χρησιµοποιούνται για τον υπολογισµό τιµών των παραγώγων της συνάρτησης,

Page 210: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

210

x=0:0.05:4*pi; y=x+cos(x); zx=linspace(0,4*pi,100); pp=spline(x,y); ppd=fnder(pp) zyd=ppval(ppd,zx); plot(zx,zyd

0 2 4 6 8 10 12 140

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

1) Υπολογισµός ολοκληρωµάτων Τα αόριστα ολοκληρώµατα των τµηµατικών πολυωνύµων παρεµβολής υπολογίζονται, και αποδίδονται επίσης υπό µορφή τµηµατικών πολυωνύµων, µε την εντολή

ppi=fnint(pp, K) Η συνάρτηση κανονικοποιείται έτσι ώστε να δίνει την τιµή Κ στο αριστερό άκρο του συνολικού διαστήµατος παρεµβολής. Όταν δεν δοθεί τιµή για το Κ, τότε χρησιµοποιείται το µηδέν.

Τα τµηµατικά πολυώνυµα που έτσι προκύπτουν µπορούν να χρησιµοποιηθούν για τον υπολογισµό ολοκληρωµάτων σε οµάδα ενδιάµεσων σηµείων, που είναι αποθηκευµένα στη λίστα xi, µε την εντολή

yii=ppval(ppi, xi)

Page 211: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

10.6 ∆ιακριτός µετασχηµατισµός Fourier

211

Παράδειγµα Στο παρακάτω παράδειγµα χρησιµοποιούνται µερικά σηµεία της συνάρτησης

( ) 10 os( )f x c x= για να δηµιουργηθούν τµηµατικά πολυώνυµα παρεµβολής, τα οποία κατόπιν χρησιµοποιούνται για τον υπολογισµό ολοκληρωµάτων της συνάρτησης, x=0:0.05:4*pi; y=10*cos(x); zx=linspace(0,4*pi,100); pp=spline(x,y); ppd=fnint(pp) zyd=ppval(ppd,zx); plot(zx,zyd)

0 2 4 6 8 10 12 14-10

-8

-6

-4

-2

0

2

4

6

8

10

10.6 ∆ιακριτός µετασχηµατισµός Fourier Γνωρίζουµε από τα µαθηµατικά ότι µια περιοδική συνάρτηση µε περίοδο T, δηλαδή µια συνάρτηση )(tf που ικανοποιεί τη σχέση ( ) ( )f t f t nT= + για κάθε t και κάθε ακέραιο αριθµό n, µπορεί να αναλυθεί σε σειρά Fourier. Σε πολλές όµως περιπτώσεις η συνάρτηση )(tf είναι γνωστή µόνο πάνω σ’ ένα διακριτό πλέγµα σηµείων του t, Ν το πλήθος, που δηµιουργούνται µε σταθερό βήµα,

[ (1), (2),..., ( )]f f f f N= .

Page 212: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

212

Εφόσον η συνάρτηση είναι περιοδική µε περίοδο Ν, δηλαδή εφόσον ισχύει η σχέση

( ) ( )f n N f n+ = , τότε αναλύεται σε σειρά Fourier µε τη χρήση του διακριτού µετασχηµα-τισµού Fourier, ο οποίος, σύµφωνα µε τη σύµβαση των µηχανικών που ακολουθεί το MATLAB, δίνεται από τη σχέση:

1( ) ( ) exp( 2 ( 1) ( 1) / ) 1,2,...,

N

nF k f n i n k N k Nπ

=

= − − − =∑

ο δε αντίστροφος διακριτός µετασχηµατισµός Fourier δίνεται από τη σχέση,

1

1( ) ( )exp( 2 ( 1) ( 1) / ), 1, 2,...,N

k

f n F k i n k N n NN

π=

= − − =∑ .

Από τις παραπάνω σχέσεις συνάγεται η σχέση περιοδικότητας για τα πλάτη

( ) ( )F k N F k+ = .

Οι διακριτές τιµές των συχνοτήτων δίδονται από τη σχέση

2 ( 1) / , 1, 2,...,k k N k Nω π= − = ,

οπότε το εύρος των συχνοτήτων µιας περιόδου του αντίστροφου φάσµατος, ισούται µε

2Nqω ω π∆ ≡ = ,

η δε συχνότητα Nqω αποκαλείται συχνότητα Nyquist.

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

Στην περίπτωση που η συνάρτηση ( )f n είναι πραγµατική, έχουµε τη

σχέση *( ) ( )f n f n= , όπου *( )f n η µιγαδική συζυγής της ( )f n , από την οποία συνεπάγεται ότι

Page 213: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

10.6 ∆ιακριτός µετασχηµατισµός Fourier

213

*( ) ( ) ( )F k F k F N k= − = − , οπότε | ( ) | | ( ) | | ( ) |F k F k F N k= − = −

∆ηλαδή τα µέτρα των αρµονικών είναι συµµετρικά ως προς την αρχή, και ως προς το µέσον, Ν/2, του διαστήµατος [0, Ν].

10.6.1 ∆ιεκπεραίωση του µετασχηµατισµού Για τη διεκπεραίωση του µετασχηµατισµού, µε τη χρήση του MATLAB,

οι τιµές της συνάρτησης δίδονται, σ’ ένα πλέγµα σηµείων µε σταθερό βήµα, µε τη µορφή µονοδιάστατης λίστας, f ,

1 2[ , ,..., ]Nf f f f= ,

τα δε πλάτη των Ν αρµονικών αποδίδονται από το πρόγραµµα, επίσης µε τη µορφή µονοδιάστατης λίστας 1 2[ , ,..., ]NF F F F= , µε την εντολή:

F=fft(f)

Το ν-οστό στοιχείο της λίστας δίνει το πλάτος της αρµονικής µε συχνότητα (2 / )( 1)Nνω π ν= − .

Γνωρίζοντας τα πλάτη των αρµονικών, µπορούµε να ακολουθήσουµε την αντίστροφη διαδικασία, και να υπολογίσουµε τις τιµές της αρχικής συνάρτησης, χρησιµοποιώντας τον αντίστροφο µετασχηµατισµό Fourier

ff=ifft(F)

Σχόλιο. Στην περίπτωση που ο αριθµός των σηµείων Ν που χρησιµοποι-ούνται στο διακριτό µετασχηµατισµό Fourier είναι ίσος µε µια δύναµη του δύο, δηλαδή είναι της µορφής 2nN = , τότε το MATLAB αξιοποιεί την τεχνική του γρήγορου µετασχηµατισµού Fourier (Fast Fourier Transform) για την εκτέλεση των πράξεων. Η τεχνική αυτή είναι πολύ αποδοτική, και για το λόγο αυτό είναι σκόπιµο να επιλέγεται το Ν έτσι ώστε να ικανοποιεί την παραπάνω σχέση.

Page 214: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

214

10.6.2 Εφαρµογή Εξετάζουµε ένα περιοδικό σήµα που έχει τη µορφή ακολουθίας τριγωνι-

κών παλµών µε περίοδο ένα και µέση τιµή µηδέν, και δίνεται από τη συνάρ-τηση ( ) mod( ,1) 0.5f t t= − , όπως φαίνεται στο παρακάτω σχήµα, ezplot(@(t) mod(t,1)-0.5, [-3, 3])

-3 -2 -1 0 1 2 3

-0.5

-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3

0.4

0.5

x

mod(x,1)-0.5

Η συνάρτηση αυτή είναι περιοδική και αντισυµµετρική, της οποίας ο µετα-σχηµατισµός Fourier περιέχει µόνο ηµίτονα και δίνεται παρακάτω

1 1

1( ) sin(2 ) (exp( 2 ) exp( 2 ))2k k

if t kt i kt i ktk k

π π ππ π

+∞ +∞

= =

= − = − −∑ ∑ .

Η έκφραση αυτή, για διακριτές τιµές του t, /t n N= µε n, N ακέραιες τιµές, ανάγεται στη σχέση,

1

1

( ) (exp( 2 / ) exp( 2 / ))2

(exp( 2 / ) exp( 2 ( ) / ))2

k

k

if n i nk N i nk Nk

i i nk N i n N k Nk

π ππ

π ππ

+∞

=

+∞

=

= − −

= − −

Αναλύουµε τώρα το ίδιο σήµα χρησιµοποιώντας το διακριτό µετασχηµα-τισµό Fourier, στον οποίο χρησιµοποιούµε 62N = σηµεία για να αποδώ-σουµε τον πρώτο παλµό. Ο υπολογισµός των πλατών, µε τη χρήση του

Page 215: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

10.6 ∆ιακριτός µετασχηµατισµός Fourier

215

MATLAB, γίνεται παρακάτω, και τα αποτελέσµατα συγκρίνονται µε τα πλάτη του αναλυτικού υπολογισµού, που προκύπτουν από την παραπάνω σχέση, στην οποία όµως η άθροιση έχει περιοριστεί στις τιµές 1,2,...,k N= ,

1

( ) (exp( 2 / ) exp( 2 ( ) / ))2

N

k

if n i nk N i n N k Nk

π ππ=

− −∑ ,

N=2^6; x=linspace(0,1,N); y=x-0.5; fy=fft(y); k=1:2:N-1; fy1=1./(2*pi*k)-1./(2*pi*(N-k)); plot(imag(fy(2:end))/N) xlabel('k') ylabel('amplitude, imag(F(k))/N') hold on plot(k,fy1,'+r') hold off

0 10 20 30 40 50 60-0.2

-0.15

-0.1

-0.05

0

0.05

0.1

0.15

0.2

k

ampl

itude

, im

ag(F

(k))

/ N

Page 216: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ανάλυση µε το MATLAB

216

Από το σχήµα φαίνεται ότι υπάρχουν µικρές διαφορές µεταξύ αριθµητικού και αναλυτικού υπολογισµού, οι οποίες γίνονται µεγαλύτερες όσο µικρότερος είναι ο αριθµός των σηµείων που χρησιµοποιούνται στο διακριτό µετασχηµατισµό. Για να εξαλειφθούν οι διαφορές αυτές, θα πρέπει να ληφθούν υπ’ όψιν όλες οι αρµονικές του αναλυτικού υπολογισµού, µε

1,2,..., , 1, 2,...k N N N= + + , αφού όµως πρώτα γίνει η αναγωγή τους στο διάστηµα [0, 2π], που επιτυγχάνεται µε τη µετατόπιση τους κατά ακέραια πολλαπλάσια του 2π. 10.7 Αριθµητικές λύσεις διαφορικών εξισώσεων Το MATLAB διαθέτει µια σειρά από εκτεταµένα πακέτα για την αριθµητική λύση διαφορικών εξισώσεων, τόσο συνηθισµένων, όσο και εξισώσεων µε µερικές παραγώγους. Στο παρόν βιβλίο δεν θα γίνει παρουσίαση των δυνατοτήτων του MATLAB στη λύση διαφορικών εξισώσεων, και ο ενδιαφερόµενος αναγνώστης µπορεί να απευθυνθεί στο ηλεκτρονικό βοήθηµα του προγράµµατος, που διαθέτει εκτεταµένες πληροφορίες για το σκοπό αυτό, στα λήµµατα ODE (Ordinary Differential Equations), BVP (Boundary Value Problems), PDE (Partial Differential Equations), και DDE (Delay Differential Equations).

Page 217: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

217

Βιβλιογραφία

Γ. Θεοδώρου, και Χρ. Θεοδώρου, Πρακτικός Οδηγός για τη Mathematica®. Έκδοση Υπηρεσίας ∆ηµοσιευµάτων, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης (2004).

Γ. Θεοδώρου, και Χρ. Θεοδώρου, Mathematica® και εφαρµογές. Θεσσαλονίκης (2005).

Matthew P. Coleman, An Introduction to Partial Differential Equations with MATLAB (Chapman & Hall/Crc Applied Mathematics & Nonlinear Science), Publisher: Chapman & Hall/CRC (2004).

Timothy A. Davis, Kermit Sigmon, MATLAB Primer, Seventh Edition, Publisher: Chapman & Hall/CRC (2004).

Amos Gilat, MATLAB: An Introduction with Applications 2nd Edition, Publisher: Wiley (2004).

Duane C. Hanselman, Bruce L. Littlefield, Mastering, MATLAB 7, Publisher: Prentice Hall (2004) .

Thomas L. Harman, James B. Dabney, Norman John Richert, Advanced Engineering Mathematics with MATLAB, Publisher: Thomson-Engineering (1999).

Desmond J. Higham (Author), Nicholas J. Higham, MATLAB Guide, Publisher: SIAM, (2005).

Brian R. Hunt, Ronald L. Lipsman, John E. Osborn, Jonathan M. Rosenberg, Differential Equations with Matlab, Publisher: John Wiley & Sons (2005).

Wendy L. Martinez, Angel R. Martinez, Exploratory Data Analysis with MATLAB, Publisher: Chapman & Hall/CRC (2004).

Stephen R. Otto, James P. Denier, An Introduction to Programming and Numerical Methods in MATLAB, Publisher: Springer (2005).

Page 218: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Βιβλιογραφία

218

Rudra Pratap, Getting Started with MATLAB 7: A Quick Introdu-ction for Scientists and Engineers, Publisher: Oxford University Press (2005).

Page 219: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

219

Ευρετήριο Ευρετήριο Στο παρακάτω ευρετήριο προτάσσονται οι εντολές του MATLAB (στο Αγγλικό αλφάβητο), και ακολουθούν οι Ελληνικοί όροι. -, 15 ", 15 %, 33 &, 81 &&, 81 *, 15 /, 15 @, 94 ^, 15 |, 82 ||, 82 ~, 82 ~=, 15 +, 15 <, 15 <=, 15 =, 15 ==, 15 >, 15 >=, 15 a_initial:a_step:a_final, 39 abs, 23

acos, 23 acosd, 23 acosh, 23 angle, 23 asin, 23 asind, 23 asinh, 23 atan, 23 atand, 23 atanh, 23 box, 106 break, 79 ceil, 31 chop, 32 clear, 27 clear all, 27 clear function, 27 clear global, 27 clear variable, 27 command history, 131 command window, 129 conj, 23

Page 220: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ευρετήριο

212

continue, 78 contour, 151 contour3, 152 conv, 185 cos, 23 cosd, 23 cosh, 23 cputime, 139 cross, 164 current directory, 130 delete, 135 det, 170 diag, 41 diary, 138 disp, 34 dot, 164 echo, 30 eig, 179 end, 45, 68, 70, 74, 75 eps, 24, 25 error, 92 errorbar, 119 exp, 23 expm, 173 eye, 41 ezcontour, 160 ezmesh, 158 ezplot, 116, 126, 127 ezplot3, 157 ezpolar, 125 ezsurf, 159 Fast Fourier Transform, 205

fft, 205 find, 58 fitting, 188 fix, 32 floor, 32 fminbnd, 193 fnder, 201 fnint, 202 for, 70 format, 132 FORMAT, 132 fzero, 190, 192 help, 32 hist, 120 hold on, 113 if, 67 ifft, 205 imag, 23 inf, 20 input, 137 interp1, 197, 199 Interpolation, 196 inv, 171 length, 38 linsolve, 177 linspace, 39 load, 134 log, 23 loglog, 122 magic, 42 max, 23, 60 mean, 101

Page 221: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ευρετήριο

213

mesh, 144 meshc, 146 min, 23, 60 mod, 24 NaN, 20 norm, 165 numel, 38 ones, 40 pause, 137 pchip, 200 pcolor, 154 plot, 103, 111 plot3, 141, 142 polar, 124 poly, 186 polyder, 187 polyfit, 189 polyint, 187 polyval, 187, 189 ppval, 200, 201, 202 prod, 61 quad, 195 quiver, 156 rand, 24, 42 randn, 25, 43 real, 23 realmax, 21 realmin, 21 return, 90 roots, 185 round, 32 save, 134, 135

scatter, 109 script files, 29 semilogx, 122 semilogy, 122 sin, 23 sind, 23 sinh, 23 size, 37 sort, 61 spline, 200 sqrt, 23 std, 101 stem, 110 stem3, 155 subplot, 114 sum, 60 surf, 147 surfc, 149 surfl, 150 tan, 23 tand, 23 tanh, 23 tic, 139 toc, 139 trace, 175 trapz, 194 var, 102 while, 74 workspace, 130, 133 zeros, 40

Page 222: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ευρετήριο

214

Άθροισµα (διαφορά) µητρών, 167 Άθροισµα πολυωνύµων, 184 Αναγωγή σε µονοδιάστατη λίστα,

46 Ανάστροφη λίστα, 56 Ανάστροφη µήτρας, 168 Αντίστροφη τετραγωνικής µήτρας,

171 Ανώνυµος oδηγός, 96 Αποθήκευση παραµέτρων, 135 Αποτύπωση πειραµατικών σφαλµάτων, 118

Αριθµητική ολοκλήρωση, 194 Αριθµητικοί τελεστές, 15 Αριθµητικός υπολογισµός ολοκληρώµατος, 97

Αρχείο καταχώρησης εντολών, 131

Βασικές πράξεις, 15 Βασικός χώρος λειτουργίας, 14,

130 Βρόχοι, 70 Γινόµενο (διαίρεση) µε λίστες, 54 Γινόµενο πολυωνύµων, 185 Γράφηµα µε ισοϋψείς, 151 Γραφικές παραστάσεις επιφανειών, 144

Γραφικές παραστάσεις καµπύλων, 141

Γραφική αναπαράσταση λίστας, 153

Γραφική παράσταση δεδοµένων, 103

Γραφική παράσταση συνάρτησης, 116, 157

∆ηµιουργία συµβολοσειράς, 63 ∆ιαγραφή αρχείου, 135 ∆ιαγραφή παραµέτρων, 27 ∆ιακοπή εκτέλεσης, 34 ∆ιακριτός µετασχηµατισµός

Fourier, 203 ∆ιακύµανση, 102 ∆ιαµόρφωση γραφικής παράστασης, 105

∆ιαµόρφωση εµφάνισης αποτελεσµάτων, 132

∆ιαµόρφωση της καµπύλης, 107 ∆ιανυσµατικά πεδία, 156 ∆ιαχείριση λίστας, 44 ∆ιαχείριση συµβολοσειράς, 64 ∆ιαχείριση χώρου λειτουργίας,

133 ∆υνάµεις λίστας, 56 ∆υνάµεις Μήτρας, 172 Ειδικές εντολές δηµιουργίας λίστας, 38

Εισαγωγή νέων παραµέτρων, 21 Εισαγωγή σχολίων, 33 Ενεργός διεύθυνση αποθήκευσης,

130 Εντολές διαχείρισης, 32 Εντολές ελέγχου, 77 Εντολές ελέγχου ροής, 67

Page 223: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ευρετήριο

215

Εντολές ελέγχου του προγράµµατος, 139

Εντολή break, 79 Εντολή continue, 78 Εντολή expm, 173 Εντολή while, 74 Εντολή ανάθεσης, 21 Εντολή απόκρυψης, 19 Εντοπισµός ρίζας συνάρτησης,

190 Εξωτερικό γινόµενο, 164 Επαναληπτικές διαδικασίες, 70 Επίδραση συνάρτησης σε λίστα,

57 Εσωτερικές συναρτήσεις, 22 Εσωτερικό γινόµενο, 164 Εύρος αξόνων, 105 Ηµερολόγιο κίνησης, 137 Ηµιλογαριθµικές και λογαριθµικές κλίµακες, 122

Ιδιοτιµές και Ιδιοανύσµατα, 179 'Ισον ανάθεσης, 15 Ιστογράµµατα, 120 Ίχνος µήτρας, 175 Λίστα-γραµµή, 37 Λίστα-στήλη, 37 Λογικές εντολές, 18 Λογικοί τελεστές, 80 Λογικός τελεστής «ή», 82 Λογικός τελεστής «και», 81 Λογικός τελεστής «οχι», 82

Λύσεις διαφορικών εξισώσεων, 208

Λύση γραµµικών συστηµάτων, 176

Μ - Αρχεία Εντολών, 29 Μ – Συναρτήσεις, 85 Μαθηµατικές σταθερές, 19 Μέση τιµή, 101 Μέτρο ανύσµατος, 165 Μιγαδικοί αριθµοί, 17 Οδηγός ανώνυµης έκφρασης, 95 Οδηγός Μ-συνάρτησης, 94 Οδηγός συνάρτησης, 93 Ορίζουσα, 170 Όρισµα τριγωνοµετρικών συναρτήσεων, 26

Ορισµός λίστας, 35 Παράγωγοι και ολοκληρώµατα πολυωνύµων, 187

Παράθυρο διαχείρισης, 14, 129 Παραµετρικές καµπύλες, 126 Παράµετροι εισόδου, 86 Παράµετροι εξόδου, 87 Παρεµβολή σε µία διάσταση, 196 Πεπλεγµένες συναρτήσεις, 126 Περίγραµµα σχήµατος, 106 Πλέγµα αξόνων, 106 Πολικά διαγράµµατα, 124 Πολλαπλασιασµός και διαίρεση λίστας, 52

Πολλαπλασιασµός µητρών, 168 Πολλαπλές εικόνες, 114

Page 224: MATLAB 2 5 - TEIIONeclass.teiion.gr/modules/document/file.php/THMO106/MATLAB_AUTH.pdf · Πρακτικός Οδηγός στο matlab 4 που καθιστά αναγκαία την

Ευρετήριο

216

Πολλαπλές καµπύλες, 111, 142 Πολυώνυµα, 183 Πράξεις µε ανύσµατα, 164 Πράξεις µε λίστες, 51 Πράξεις µε µήτρες, 166 Πράξεις σύγκρισης, 18 Προσαρµογή δεδοµένων µε πολυώνυµο, 188

Προσέγγιση αριθµητικών τιµών, 31

Πρόσθεση αριθµού σε λίστα, 52 Προτεραιότητα πράξεων, 17 Ρίζες πολυωνύµου, 185 Στατιστική περιγραφή δεδοµένων,

99 Συζυγής ανάστροφης µήτρας, 168 Συµβολισµός πολυωνύµων, 183 Συναρτήσεις για στατιστικά

µεγέθη, 101 Συνάρτηση eps(x), 25 Συνάρτηση rand, 24 Συνάρτηση randn, 25 Συνένωση λιστών, 49

Συνέχιση µιας εντολής, 28 Σύνθετες εντολές, 28 Σύνθετη εντολή, 28 Συχνότητα Nyquist, 204 Σχεσιακοί τελεστές, 15 Τερµατισµός συνάρτησης, 90 Τίτλος αξόνων, 105 Τίτλος σχήµατος, 106 Τµηµατικά πολυώνυµα παρεµβολής, 200

Τοπικά ακρότατα συναρτήσεων, 192

Τοπικό ελάχιστο, 192 Τοπικό µέγιστο, 193 Τρισδιάστατες γραφικές παραστάσεις, 144, 147

Τροποποίηση στοιχείων λίστας, 36 Τυπική απόκλιση, 101 Υπολογισµός τιµών πολυωνύµου,

187 Φωλιασµένες εντολές, 73, 76 Χαρακτηριστικά λίστας, 37