Π Α Ρ Α Ρ Τ Η Μ Α. Για μια Εισαγωγή στο MATLAB



Σχετικά έγγραφα
Εισαγωγή στην Αριθμητική Ανάλυση

Τυπικές χρήσεις της Matlab

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ. Παράδειγμα #1. Πράξεις μεταξύ ακεραίων αριθμών

Εισαγωγή στη Matlab Βασικές Συναρτήσεις

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

3 ο Εργαστήριο Μεταβλητές, Τελεστές

Ο ΗΓΙΕΣ ΧΡΗΣΗΣ ΤΟΥ MATLAB

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Υπολογιστές Ι. Άδειες Χρήσης. Τύποι δεδομένων. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Εισαγωγή στο GNU Octave/MATLAB

Σημαντικές δυνατότητες των σύγχρονων υπολογιστικών μηχανών: Αξιόπιστη καταγραφή πολύ μεγάλου όγκου δεδομένων

Εργαστήρια Αριθμητικής Ανάλυσης Ι. 4 ο Εργαστήριο. Διανύσματα-Πίνακες 1 ο Μέρος

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

1. ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB... 13

Εισαγωγή στο MATLAB. Κολοβού Αθανασία, ΕΔΙΠ,

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών

Πρόβλημα 29 / σελίδα 28

1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή

Εισαγωγή στο Περιβάλλον Επιστημονικού Προγραμματισμού MATLAB-Simulink. Δημήτριος Τζεράνης Λεωνίδας Αλεξόπουλος

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL

Έναρξη Τερματισμός του MatLab

Τι είναι βαθμωτό μέγεθος? Ένα μέγεθος που περιγράφεται μόνο με έναν αριθμό (π.χ. πίεση)

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

ΕΙΣΑΓΩΓΗ ΣΤΟ MATHLAB Α ΜΕΡΟΣ

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

ΑΕΝ / ΑΣΠΡΟΠΥΡΓΟΥ ΣΧΟΛΗ ΜΗΧΑΝΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΑΥΤΟΜΑΤΙΣΜΟΥ. Σημειώσεις για τη χρήση του MATLAB στα Συστήματα Αυτομάτου Ελέγχου

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Εργαστήριο Μαθηματικής Ανάλυσης Ι. Εισαγωγή στη Matlab Βασικές Συναρτήσεις-Γραφικές παραστάσεις. Πανεπιστήμιο Θεσσαλίας. Σχολή Θετικών Επιστημών

1. Εισαγωγή στο Sage.

Διαδικασιακός Προγραμματισμός

Πρώτη επαφή με το μαθηματικό πακέτο Mathematica

Χρονικές σειρές 4 o μάθημα: ΠΙΝΑΚΕΣ ΚΑΙ ΔΙΑΝΥΣΜΑΤΑ

Συναρτήσεις στη Visual Basic 6.0

Μιγαδική ανάλυση Μέρος Α Πρόχειρες σημειώσεις 1. Μιγαδικοί αριθμοί. ΤΕΤΥ Εφαρμοσμένα Μαθηματικά Μιγαδική Ανάλυση Α 1

I. ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ. math-gr

Συστήματα Αναμονής (Queuing Systems)

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Διαδικασιακός Προγραμματισμός

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Διαδικασιακός Προγραμματισμός

Περιεχόμενα. 1.1 Εισαγωγή Τυπογραφικές συμβάσεις Τι νέο υπάρχει στο MATLAB Τι περιέχει το βιβλίο...17

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Ενότητα 2. Ζωγραφίζοντας με το ΒΥΟΒ

Εισαγωγή στην Tcl. Τί είναι η Tcl;

Συστήματα συντεταγμένων

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

Ανάπτυξη και Σχεδίαση Λογισμικού

Εισαγωγή στο Matlab Μέρος Α. Κυριακίδης Ιωάννης 2011

ΣΥΝΑΡΤΗΣΕΙΣ. Η σύνταξη μιας συνάρτησης σ ένα κελί έχει την γενική μορφή: =όνομα_συνάρτησης(όρισμα1; όρισμα2;.)

1 Πίνακες 1.1 Συνοπτική θεωρία

Εντολές της LOGO (MicroWorlds Pro)

Πίνακες >>A = [ 1,6; 7, 11]; Ή τον πίνακα >> B = [2,0,1; 1,7,4; 3,0,1]; Πράξεις πινάκων

Προγραμματισμός I (Θ)

Αριθμητική Ανάλυση και Εφαρμογές

Αλγόριθμοι Αναπαράσταση αλγορίθμων Η αναπαράσταση των αλγορίθμων μπορεί να πραγματοποιηθεί με:

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

επιµέλεια Θοδωρής Πιερράτος

Εισαγωγή στη Matlab Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής

Πιο συγκεκριμένα, η χρήση του MATLAB προσφέρει τα ακόλουθα πλεονεκτήματα.

Πληροφορική. Ενότητα 1: Α. Οργάνωση μαθήματος. Β. Στοιχεία Προγραμματισμού -Προγραμματιστικές Δομές, Πρόγραμμα, Γλώσσες.

Εργαστήρια Αριθμητικής Ανάλυσης Ι. 1 ο Εργαστήριο. Εισαγωγή στο Matlab

Εισαγωγή στους Υπολογιστές

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ

Μαθηματικά Γ Γυμνασίου

Μαθηµατικοί Υπολογισµοί στην R

8 FORTRAN 77/90/95/2003

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

MATLAB Desktop (Επιφάνεια Εργασίας MATLAB) [1.]

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα;

Κεφάλαιο 2. Διανύσματα και Συστήματα Συντεταγμένων

Εισαγωγή στο Πρόγραμμα Maxima

Εισαγωγή στους Υπολογιστές

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Στοιχειώδης προγραμματισμός σε C++

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Οι εντολές ελέγχου της ροής ενός προγράμματος.

ΕΠΑΝΑΛΗΠΤΙΚΗ ΕΞΕΤΑΣΗ (14/9/2012)

ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 5

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

ΘΕΩΡΙΑ Β ΓΥΜΝΑΣΙΟΥ. Μια παράσταση που περιέχει πράξεις με μεταβλητές (γράμματα) και αριθμούς καλείται αλγεβρική, όπως για παράδειγμα η : 2x+3y-8

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Προγραμματισμός ΗΥ και Υπολογιστική Φυσική. Χρήστος Γκουμόπουλος

Προγραμματισμός ΙI (Θ)

Εισαγωγή στον Προγραμματισμό

Εργαστήριο 9 Συναρτήσεις στη PASCAL. Η έννοια του κατακερματισμού. Συναρτήσεις. Σκοπός

5 &6. Τύποι δεδομένων, τελεστές και

4 η ΕΝΟΤΗΤΑ Μητρώα και συνθήκες στο MATLAB

Πρόσθεση, αφαίρεση και πολλαπλασιασμός φυσικών αριθμών

Ανάπτυξη και Σχεδίαση Λογισμικού

Transcript:

195 Π Α Ρ Α Ρ Τ Η Μ Α Για μια Εισαγωγή στο MATLAB

196 Παράρτημα 1. Υπολογίζοντας στο Αλληλεπιδραστικό Περιβάλλον του MATLAB 198 1.1 Τρέχοντας το MATLAB... 198 1.1.1 Το MATLAB ως υπολογιστής παραστάσεων... 200 1.1.2 Οι μεταβλητές του MATLAB... 202 1.1.3 Ενσωματωμένες Μεταβλητές και Συναρτήσεις... 203 1.1.4 Συναρτήσεις και Εντολές... 205 1.1.5 On-line Βοήθεια... 205 1.2 Πίνακες και Διανύσματα... 208 1.2.1 Δημιουργία Πινάκων... 210 1.2.2 Συμβολισμός Δεικτών για τα Στοιχεία Πινάκων... 215 1.2.3 Ο συμβολισμός άνω - κάτω τελεία (:)... 218 1.2.4 Διαγραφή Στοιχείων από Διανύσματα και Πίνακες... 221 1.2.5 Πράξεις με Πίνακες... 222 1.2.6 Μετασχηματισμός της Μορφής Πινάκων... 227 1.3 Πρόσθετοι Τύποι Μεταβλητών... 230 1.3.1 Μιγαδικοί Αριθμοί... 231 1.3.2 Αλφαριθμητικά ή Συμβολοσειρές (Strings)... 235 1.3.3 Πολυώνυμα... 237 1.4 Διαχείριση του Αλληλεπιδραστικού Περιβάλλοντος... 239 2.4.1 Ο Χώρος Εργασίας του MATLAB... 239 1.4.2 Δουλεύοντας με Δεδομένα από Εξωτερικά Αρχεία... 241 1.5 Σχεδίαση Διαγραμμάτων στο MATLAB... 248 1.5.1 Γραφικές Παραστάσεις Γραμμών... 248 1.5.2 Εμφάνιση Σχολίων σε Διαγράμματα... 251 1.5.3 Εμφάνιση Πολλών Διαγραμμάτων σε ένα Παράθυρο... 253 1.5.4 Γραφικές Παραστάσεις Επιφανειών... 254 1.5.5 Περιγράμματα (Contour Plots)... 260 1.6 Περίληψη... 261 2. Προγραμματίζοντας στο MATLAB 262 2.1 Script m-files... 262 2.1.1 Δημιουργία m-files... 264 2.1.2 Παρενέργειες ενός Script... 269 2.1.3 Προτάσεις Σχολίων... 270 2.2 Συναρτήσεις m-files... 270 2.2.1 Σύνταξη Συναρτήσεων... 271 2.2.2 Παράμετροι Εισόδου και Εξόδου... 272 2.2.3 Πρωταρχικές και Δευτερεύουσες Συναρτήσεις... 276 2.3 Είσοδοι και Έξοδοι... 278 2.3.1 Εισαγωγή Δεδομένων κατά την εκτέλεση του Προγράμματος... 278 2.3.2 Κείμενο Έξοδος... 279 2.4 Έλεγχος Ροής... 283 2.4.1 Σχεσιακοί Τελεστές... 284

Παράρτημα 197 2.4.2 Τελεστής Προτεραιότητας... 285 2.4.3 if else...... 287 2.4.4 Επιλογή case με την Δομή switch... 289 2.4.5 Βρόχοι for... 290 2.4.6 Βρόχοι while... 293 2.4.7 Η Εντολή break... 294 2.4.8 Η Εντολή return... 296 2.5 Διανυσματικοποίηση... 298 2.5.1 Χρήση Πράξεων Διανυσμάτων αντί για Βρόχους... 298 2.5.2 Δέσμευση Μνήμης για Διανύσματα και Πίνακες... 300 2.5.3 Διανυσματικοποιημένοι Δείκτες και Λογικές Συναρτήσεις... 301 2.6 Ειδικές Περιπτώσεις... 310 2.6.1 Μεταβλητός Αριθμός των παραμέτρων Εισόδου και Εξόδου... 310 2.6.2 Καθολικές μεταβλητές... 312 2.6.3 Η Συνάρτηση feval... 314 2.6.4 Αντικείμενα inline Συναρτήσεων... 317 2.7 Περίληψη... 320

198 Παράρτημα 1. Υπολογίζοντας στο Αλληλεπιδραστικό Περιβάλλον του MATLAB Θα προσπαθήσουμε να περιγράψουμε αρχικά τα βασικά στοιχεία του MATLAB: εισαγωγή εντολών ορισμός και χρήση μεταβλητών δημιουργία δισδιάστατων και τρισδιάστατων γραφικών Οι λειτουργίες αυτές εκτελούνται αλληλεπιδραστικά πληκτρολογώντας μια εντολή τη φορά. Η χρήση του MATLAB με αλληλεπίδραση είναι πολύ αποδοτική, επειδή πολλές σύνθετες αριθμητικές πράξεις μπορούν να εκτελεστούν με λίγες συνοπτικές - περιεκτικές εντολές. Όλες οι αλληλεπιδραστικές εντολές μπορούν να χρησιμοποιηθούν και σε προγράμματα. Για τον λόγο αυτό, ότι περιγράφεται στο παρόν κεφάλαιο είναι απαραίτητο για κάθε χρήση του MATLAB. 1.1 Τρέχοντας το MATLAB Οι ιδιαιτερότητες της εγκατάστασης και εκκίνησης του MATLAB εξαρτώνται από τον τύπο υπολογιστή που χρησιμοποιείται. Πάντως από τη στιγμή που το MATLAB τρέξει, κατά την εκτέλεση χρησιμοποιείται ένα συνηθισμένο περιβάλλον διασύνδεσης με μπάρες επιλογών και παράθυρα μέσω των οποίων είτε εισάγονται δεδομένα, είτε εμφανίζονται τα αποτελέσματα υπολογισμών. Η χρήση των μενού, βασικά, γίνεται για τη διαχείριση των αρχείων, την επεξεργασία του παραθύρου εντολών και τον έλεγχο των αποτελεσμάτων. Το σύστημα αυτό των μενού είναι σχετικά μικρό σε σχέση με τα αντίστοιχα άλλων προγραμμάτων. Εν δυνάμει, όλοι οι αριθμητικοί υπολογισμοί στο MATLAB εκτελούνται πληκτρολογώντας εντολές και όχι μέσω της διαχείρισης των μενού. Ο καλύτερος τρόπος για να μάθει κανείς το MATLAB είναι να πειραματιστεί εισάγοντας εντολές στο παράθυρο εντολών. Θα ήταν καλή ιδέα να τρέξετε το MATLAB και καθώς διαβάζετε να εισάγετε τις εντολές που παρατίθενται στο κείμενο. Όταν ξεκινάει το MATLAB, ανοίγει ένα παράθυρο που ονομάζεται παράθυρο εντολών (command window) και εμφανίζεται η ένδειξη εισαγωγής εντολής (command prompt) >> Αν έχετε την εκπαιδευτική έκδοση του προγράμματος η ένδειξη εισαγωγής εντολής είναι EDU>

Παράρτημα 199 Η ένδειξη εισαγωγής εντολής σημαίνει ότι το MATLAB είναι έτοιμο για εισαγωγή δεδομένων. Η βασική διαδικασία είναι να πληκτρολογείτε εντολές και να πατάτε στο τέλος κάθε μιας το πλήκτρο επιστροφής ( ή <enter>). Ανάλογα με το είδος της εντολής το MATLAB είτε θα αποκριθεί με ένα μήνυμα κειμένου, είτε θα ανοίξει ένα νέο παράθυρο, όταν τα αποτελέσματα είναι γραφικά. Όταν εκτελεστεί η εντολή, θα εμφανιστεί ένα νέο σύμβολο ένδειξης εισαγωγής εντολής. Αυτός ο τρόπος χρήσης του MATLAB είναι αλληλεπιδραστικός (δηλ. με την εισαγωγή μιας εντολής, επιστρέφεται η απόκριση - αποτέλεσμα). Σε μερικές περιπτώσεις, η απόκριση θα είναι απλώς η εμφάνιση μιας ένδειξης εισαγωγής εντολών, δηλώνοντας ότι το MATLAB είναι έτοιμο να δεχτεί την επόμενη εντολή. Τυπογραφικές Συμβάσεις Σε όλο αυτό το κείμενο, οι εντολές θα παρουσιάζονται με γραμματοσειρά Courier New όπως στην >> help hilbert Όταν το σύμβολο ένδειξης εισαγωγής εντολής προηγείται της εντολής, τότε η σύνταξη είναι σωστή και μπορεί να εισαχθεί απευθείας και ως έχει στο παράθυρο εντολών. Όταν σκοπός του κειμένου είναι να περιγράψει τις παραμέτρους εισόδου και εξόδου μιας συνάρτησης, δεν θα εμφανίζεται το σύμβολο ένδειξης εισαγωγής εντολής και θα χρησιμοποιούνται αντιπροσωπευτικά ονόματα για τις παραμέτρους εισόδου και εξόδου. Τα ονόματα των παραμέτρων εμφανίζονται λοξά. Για παράδειγμα η ones(nrows, ncols) δηλώνει ότι η συνάρτηση ones παίρνει δύο παραμέτρους: nrows και ncols. Εφόσον, η εντολή δεν περιλαμβάνει το σύμβολο ένδειξης εισαγωγής εντολής, δεν μπορεί να εισαχθεί όπως είναι γραμμένη στο πρόγραμμα. Μια έκδοση της συνάρτησης ones που μπορεί να εισαχθεί στη γραμμή εντολών του προγράμματος είναι: >> ones(3,5) Μερικές φορές θα χρησιμοποιηθούν σχόλια για την παροχή πρόσθετης πληροφορίας για την συνάρτηση. Τα σχόλια αρχίζουν με τον χαρακτήρα (%) και εκτείνονται μέχρι το τέλος της γραμμής, όπως >> x = sqrt(-4) % το MATLAB χρησιμοποιεί μιγαδικούς αριθμούς Κατά την εισαγωγή μιας εντολής στη γραμμή εντολών του προγράμματος, τα σχόλια μπορούν να παραλειφθούν.

200 Παράρτημα Οι μεταβλητές (περιγράφονται στην 1.1.2) παρουσιάζονται κι αυτές με γραμματοσειρά Courier New. Αν χρησιμοποιούνται μεταβλητές σε ένα πρόγραμμα, θα δηλώνονται πρώτες, όπως: >> nr = 2 >> nc = 2 >> ones(nr, nc) Το αποτέλεσμα της εντολής εμφανίζεται αμέσως μετά από αυτήν. Η εμφάνιση των εντολών, των μεταβλητών και των αποτελεσμάτων μιμείται αυτήν της οθόνης του MATLAB, δηλαδή: >> nr = 2 nr = 2 >> nc = 3 nc = 3 >> ones(nr, nc) ans = 1 1 1 1 1 1 όπου τα επιπλέον κατακόρυφα κενά διαστήματα έχουν παραλειφθεί για οικονομία χώρου. 1.1.1 Το MATLAB ως υπολογιστής παραστάσεων Το MATLAB μπορεί να χρησιμοποιηθεί για τον υπολογισμό απλών μαθηματικών παραστάσεων. Για να κάνετε έναν υπολογισμό, απλά πληκτρολογήστε τον στο παράθυρο εντολών και πατήστε το πλήκτρο επιστροφής: >> 2 + 6 4 ans = 4 Η απόκριση είναι της μορφής ans =, όπου ans είναι μια αυτο-ορισμένη μεταβλητή χρησιμοποιούμενη όταν μια παράσταση δεν έχει ανατεθεί σε μια μεταβλητή ορισμένη από τον χρήστη. Προκειμένου να συνεχιστεί ένας υπολογισμός, η τιμή που έχει αποθηκευθεί στην ans μπορεί να ανακληθεί:

Παράρτημα 201 >> ans/2 ans = 2 Πέρα από τον απλό υπολογισμό μιας παράστασης, μπορεί κανείς να αναθέσει την τιμή της σε μια μεταβλητή, όπως >> a = 5 a = 5 >> b = 6 b = 6 >> c = b/a c = 1.2000 όπου η απόκριση ans = έχει αντικατασταθεί από το όνομαμεταβλητής =..., όπως θα περίμενε κανείς. Το MATLAB έχει πολλές ενσωματωμένες (built-in) συναρτήσεις και μια σειρά από προκαθορισμένες μεταβλητές. Οι κοινές τριγωνομετρικές συναρτήσεις ανήκουν στο σύνολο αυτών των συναρτήσεων. Οι εισαγόμενες παράμετροι σε όλες τις συναρτήσεις περικλείονται σε παρενθέσεις, όπως: >> sin(pi/4) ans = 0.7071 όπου χρησιμοποιήθηκε η ενσωματωμένη μεταβλητή pi για τον υπολογισμό του εισαχθέντος ορίσματος. Τα ορίσματα σε όλες τις τριγωνομετρικές συναρτήσεις είναι σε ακτίνια. Ένας απλός τρόπος για την εμφάνιση της τιμής μιας μεταβλητής, είτε ενσωματωμένης ή ορισμένης από τον χρήστη, είναι να εισάγετε το όνομα της μεταβλητής στη γραμμή εντολών και να πληκτρολογήσετε : >> pi ans = 3.1416

202 Παράρτημα Σε μια ακολουθία εντολών, οι ενδιάμεσες τιμές μπορεί να μην είναι ενδιαφέρουσες ή η εμφάνιση/επανάληψη των τιμών στο παράθυρο εντολών μπορεί να είναι ενοχλητική. Η εμφάνιση του αποτελέσματος μιας εντολής μπορεί να αποτραπεί προσθέτοντας τον χαρακτήρα (;) στο τέλος της εντολής: >> x = 5; >> y = sqrt(59); >> z = log(y) + x^0.25 z = 3.5341 Το (;) δεν είναι απαραίτητο. Απλώς σημαίνει ότι δεν είναι επιθυμητή η εμφάνιση του αποτελέσματος της εντολής. Για οικονομία χώρου, πολλές παραστάσεις μπορούν να εισαχθούν σε μία γραμμή. Αυτό απαιτεί την χρήση (;) ή (,), ανάμεσα στις παραστάσεις, για τον διαχωρισμό τους. Η χρήση του (,) επιτρέπει την εισαγωγή πολλών εντολών σε μία γραμμή χωρίς να παραλείπονται τα αποτελέσματά τους: >> a = 5; b = sin(a), c = cosh(a) b = -0.9589 c = 74.2099 1.1.2 Οι μεταβλητές του MATLAB Όπως έδειξαν τα προηγούμενα παραδείγματα, οι μεταβλητές δημιουργούνται κατά την χρήση τους. Αν μια μεταβλητή δεν υπάρχει ήδη, δημιουργείται όποτε αυτή εμφανίζεται αριστερά του συμβόλου ισότητας (=). Η τιμή που αποθηκεύεται σε μια μεταβλητή μπορεί φυσικά να αλλάξει μέσω μιας επόμενης ανάθεσης: >> t = 5; >> t = t + 2 t = 7 Οποιαδήποτε μεταβλητή εμφανίζεται δεξιά του συμβόλου ισότητας (=) πρέπει να έχει ήδη οριστεί. Η εντολή >> x = 2 z??? Undefined function or variable z.

Παράρτημα 203 έχει ως αποτέλεσμα την εμφάνιση σφάλματος (στο παράδειγμα αυτό), γιατί η μεταβλητή z δεν έχει προηγουμένως οριστεί με κάποια εντολή ανάθεσης. Στο MATLAB, τα ονόματα των μεταβλητών μπορούν να είναι μέχρι 31 χαρακτήρες και έχει σημασία αν είναι κεφαλαία ή μικρά. Για παράδειγμα, οι x και X είναι δυο διαφορετικές μεταβλητές. Επίσης, πρέπει να αρχίζουν με αλφαβητικό χαρακτήρα a-z ή A-Z. Μετά τον πρώτο χαρακτήρα μπορεί να ακολουθεί οποιοσδήποτε συνδυασμός αλφαριθμητικών χαρακτήρων, συμπεριλαμβανομένης και της κάτω παύλας, ( _ ). Για παράδειγμα, οι επόμενες εντολές δείχνουν έναν γνωστό γεωμετρικό υπολογισμό που δεν χρειάζεται περαιτέρω επεξήγηση: >> radius = 5.2; >> area = pi radius^2; ΠΙΝΑΚΑΣ 1.1 ΕΝΣΩΜΑΤΩΜΕΝΕΣ ΜΕΤΑΒΛΗΤΕΣ ΤΟΥ MATLAB Μεταβλητή Σημασία ans τιμή μιας παράστασης όταν αυτή η παράσταση δεν έχει ανατεθεί σε μια μεταβλητή eps ακρίβεια αριθμού κινητής υποδιαστολής i, j φανταστικές μονάδες, i = j = 1 pi π, 3.14159265.. realmax ο μεγαλύτερος θετικός αριθμός κινητής υποδιαστολής realmin ο μικρότερος θετικός αριθμός κινητής υποδιαστολής Inf, ένας αριθμός μεγαλύτερος του realmax, το αποτέλεσμα του 1/0 NaN όχι ένας αριθμός, (π.χ. το αποτέλεσμα του 0/0) 1.1.3 Ενσωματωμένες Μεταβλητές και Συναρτήσεις Το MATLAB χρησιμοποιεί ένα περιορισμένο πλήθος ονομάτων για τις ενσωματωμένες μεταβλητές. Ένα παράδειγμα είναι η μεταβλητή ans, που δημιουργείται αυτόματα όποτε μια μαθηματική παράσταση δεν έχει ανατεθεί σε κάποια μεταβλητή. Ο πίνακας 2.1 περιλαμβάνει τις ενσωματωμένες μεταβλητές και τη σημασία τους. Αν και είναι δυνατό να οριστούν ξανά οι μεταβλητές αυτές, αυτό δεν είναι πολύ καλή ιδέα, γιατί χρησιμοποιούνται από ενσωματωμένες συναρτήσεις. Οι ε- ξαιρέσεις στον κανόνα αυτό είναι οι μεταβλητές i και j, στις οποίες αναθέτονται ακέραιες τιμές, προκειμένου να χρησιμοποιηθούν ως δείκτες πινάκων. (βλ 1.2.2).

204 Παράρτημα Η ενσωματωμένη μεταβλητή eps ονομάζεται «έψιλον μηχανής» και περιγράφεται στο κεφάλαιο 5. Οι μεταβλητές realmax, realmin, Inf και NaN χρησιμοποιούνται για το χειρισμό εξαιρέσεων αριθμών κινητής υποδιαστολής. Οι τιμές realmax και realmin είναι τα μεγέθη του μεγαλύτερου και μικρότερου αριθμού, αντιστοίχως, που μπορεί να αποθηκευθούν με διπλή ακρίβεια (double precision). 1 Οι τιμές Inf και NaN εμφανίζονται όταν μια εξαίρεση αριθμού κινητής υποδιαστολής είναι αποτέλεσμα των υπολογισμών. Οι παρακάτω υπολογισμοί χειρίζονται με έναν προβλεπόμενο και αξιόπιστο τρόπο τις μεταβλητές Inf και NaN: >> x = 0; >> 5/x Warning: Divide by zero ans = Inf >> x/x Warning: Divide by zero ans = NaN Οι μεταβλητές eps, Inf, realmin και realmax περιγράφονται περαιτέρω στα Υπολογιστικά Μαθηματικά (βλ. και Help του MATLAB). Το MATLAB έχει πολλές ισχυρές ενσωματωμένες συναρτήσεις. Καλόν είναι, να αποφεύγει κανείς τη χρήση μεταβλητών με ονόματα ίδια με εκείνα ενσωματωμένων συναρτήσεων. Αυτό δεν είναι πάντα εύκολο, καθώς υπάρχουν τόσο πολλές συναρτήσεις του MATLAB. Για παράδειγμα, κάποιος μπορεί να μην σκεφτεί ότι gamma είναι μια ενσωματωμένη συνάρτηση με τύπο Μια εντολή, όπως x = x 1 t t 0 e dt. >> gamma = 1.4 η οποία δημιουργεί μια μεταβλητή με όνομα gamma, δεν είναι μη νόμιμη, απλώς στην τρέχουσα συνεδρία του MATLAB δεν υπάρχει η δυνατότητα κλήσης της gamma συνάρτησης. 1 Η ακρίβεια των αριθμών κινητής υποδιαστολής και η σχέση της με τους realmax και realmin είναι θέματα συζήτησης των Υπολογιστικών Μαθηματικών.

Παράρτημα 205 1.1.4 Συναρτήσεις και Εντολές Είναι απαραίτητο να γίνει ένας σημασιολογικός διαχωρισμός ανάμεσα στις συναρτήσεις και τις εντολές που εισάγονται στο παράθυρο εντολών. Μια συνάρτηση έχει εισαγόμενα ορίσματα και, συνήθως, έχει και εξαγόμενα ορίσματα. Για παράδειγμα, η παράσταση >> y = sin(pi/6) χρησιμοποιεί τη συνάρτηση sin με εισαγόμενο όρισμα pi/6 και αναθέτει το α- ποτέλεσμα στη μεταβλητή y. Σε αντίθεση, η εντολή help χρησιμοποιείται με ένα κενό ανάμεσα στο όνομα της εντολής και το όρισμά της, όπως για παράδειγμα >> help sin Γενικά, οι εντολές χρησιμοποιούνται για τη διαχείριση της κατάστασης της τρέχουσας συνεδρίας του MATLAB, ενώ οι συναρτήσεις χρησιμοποιούνται για τη διαχείριση των μεταβλητών του MATLAB. Ο διαχωρισμός ανάμεσα στις εντολές και τις συναρτήσεις είναι κατά κάποιο τρόπο τεχνητός, γιατί όλες οι εντολές μπορούν να χρησιμοποιηθούν σαν συναρτήσεις αν το όρισμα της εντολής αποδοθεί ως εισαγόμενη συμβολοσειρά (string), όπως >> help('sin') Αν και οι εντολές μπορούν να χειριστούν ως συναρτήσεις, το αντίθετο δεν συμβαίνει. Η παράσταση >> sin pi ans = -0.8900 0.9705 έχει ένα μη αναμενόμενο αποτέλεσμα. Βασικά, η χρήση του MATLAB έχει να κάνει με τη χρήση συναρτήσεων. Η διαφορά στη σύνταξη μεταξύ των συναρτήσεων και των εντολών είναι ένα έλασσον μπέρδεμα, γιατί υπάρχει μόνον ένας μικρός αριθμός εντολών και όλες αυτές έχουν να κάνουν με μη αριθμητικές δουλειές. 1.1.5 On-line Βοήθεια Τα εγχειρίδια του MATLAB παρέχουν εκτεταμένη περιγραφή όλων των ενσωματωμένων συναρτήσεων. Τα εγχειρίδια (σε HTML και PDF) μπορείτε να τα δείτε ηλεκτρονικά. Ωστόσο, σε πολλές περιπτώσεις, τα εγχειρίδια δεν είναι τόσο εύχρη-

206 Παράρτημα στα όσο η on-line βοήθεια που είναι άμεσα διαθέσιμη μέσω του παραθύρου εντολών του MATLAB. Η on-line βοήθεια είναι ιδιαίτερα χρήσιμη όταν χρειάζεστε πληροφορία σχετικά με τον τρόπο χρήσης μιας ενσωματωμένης συνάρτησης. Για να δείτε την on-line βοήθεια της functionname, πληκτρολογήστε help functionname ή helpwin('functionname') στη γραμμή εντολών. Η μόνη διαφορά ανάμεσα σε αυτές τις δύο εντολές είναι ο τρόπος εμφάνισης της πληροφορίας. Η help functionname εντολή εμφανίζει την πληροφορία στο ίδιο παράθυρο, το παράθυρο εντολών, ενώ η helpwin('functionname') ανοίγει ένα ξεχωριστό παράθυρο που ονομάζεται help browser. Ας υποθέσουμε, για παράδειγμα, ότι δεν μπορείτε να θυμηθείτε αν η συνάρτηση log υπολογίζει τον φυσικό λογάριθμο ή το λογάριθμο με βάση το 10. Αντί να ψάξετε το log στο εγχειρίδιο, απλώς πληκτρολογήστε >> help log και το MATLAB θα αποκριθεί με LOG X. Natural logarithm. LOG(X) is the natural logarithm of the elements of Complex results are produced if X is not positive. See also LOG2, LOG10, EXP, LOGM. Overloaded methods help sym/log.m help fints/log.m help demtseries/log.m Αυτή η περιεκτική περίληψη παρέχει την απαραίτητη πληροφορία, καθώς και α- ναφορές σε συσχετιζόμενες συναρτήσεις log2, log10, exp, logm κ.λπ.

Παράρτημα 207 Η εντολή lookfor βοηθά στην εύρεση συναρτήσεων σχετικών με ένα συγκεκριμένο θέμα. Είναι ιδιαίτερα χρήσιμη όταν θέλετε να μάθετε αν το MATLAB έχει κάποια συνάρτηση που εκτελεί μια συγκεκριμένη λειτουργία. Πληκτρολογώντας lookfor searchstring ξεκινάει μια αναζήτηση στις συναρτήσεις που είναι διαθέσιμες στο MATLAB. Αν το τμήμα searchstring είναι μέρος ονόματος κάποιας συνάρτησης ή των σχολίων της, τότε η πρώτη γραμμή των σχολίων εμφανίζεται στο παράθυρο εντολών. Ας υποθέσουμε, για παράδειγμα, ότι θα θέλατε να μάθετε αν το MATLAB έχει κάποια ενσωματωμένη συνάρτηση για τον υπολογισμό της συνάρτησης υπερβολικού συνημίτονου. Η χρήση της lookfor για την εύρεση του hyperbolic ή του cosine θα επιστρέψει τα ονόματα των σχετικών συναρτήσεων του MATLAB. Για παράδειγμα, >> lookfor cosine ACOS Inverse cosine. ACOSH Inverse hyperbolic cosine. COS Cosine. COSH Hyperbolic cosine. TFFUNC time and frequency domain versions of a cosine modulated Gaussian pulse. RCOSFIR Design a raised cosine FIR filter. RCOSFLT Filter the input signal using a raised cosine filter. RCOSIIR Design a raised cosine IIR filter. RCOSINE Design raised cosine filter. rcosdemo.m: %Demonstration of raised cosine functions COSINT Cosine integral function. DCT2 Compute 2-D discrete cosine transform. DCTMTX Compute discrete cosine transform matrix. DCTMTX2 Discrete cosine transform matrix. IDCT2 Compute 2-D inverse discrete cosine transform. CHIRP Swept-frequency cosine generator. DCT Discrete cosine transform. FIRRCOS Raised Cosine FIR Filter design. IDCT Inverse discrete cosine transform. ACOS Symbolic inverse cosine. ACOSH Symbolic inverse hyperbolic cosine. COS Symbolic cosine function. COSH Symbolic hyperbolic cosine. COSINT Cosine integral function. DCT Discrete cosine transform. IDCT Inverse discrete cosine transform. BLKACOS This block defines an output angle that is the arccosine of the input. BLKCOS This block defines the output as the cosine of the input. BLKCOSASIN This block defines the cosine of an angle whose sine is u. BLKCOSATAN This block defines the cosine of an angle whose tangent is u1/u2. dctold.m: %DCT Discrete cosine transform. GENCOSWIN Returns one of the generalized cosine windows. idctold.m: %IDCT Inverse discrete cosine transform.

208 Παράρτημα Το αποτέλεσμα είναι μια λίστα συναρτήσεων (με ΚΕΦΑΛΑΙΑ) και μια μικρή περιγραφή με το τι κάνει η κάθε μια. Το πλεονέκτημα της εντολής lookfor είναι ότι δεν χρειάζεται να είναι γνωστό το όνομα της συνάρτησης. Όταν βρεθεί το ό- νομα της συνάρτησης με την lookfor, τότε με την εντολή help μπορεί κανείς να δει μια πιο λεπτομερή περιγραφή της. Για παράδειγμα, συγκεκριμένη πληροφορία για τη χρήση της συνάρτησης cosh μπορεί να βρεθεί με >> help cosh COSH Hyperbolic cosine. COSH(X) is the hyperbolic cosine of the elements of X. Overloaded methods help sym/cosh.m 1.2 Πίνακες και Διανύσματα Στα προηγούμενα παραδείγματα, οι μεταβλητές που χρησιμοποιήθηκαν ήταν α- ριθμοί ή βαθμωτά μεγέθη (scalars). Στην πραγματικότητα, όλες οι μεταβλητές στο MATLAB είναι arrays. Ένα array είναι μια συλλογή τιμών στην οποία η αναφορά γίνεται με ένα μόνο όνομα μεταβλητής. Κάθε ένα στοιχείο του πίνακα αποθηκεύεται και εξάγεται (υπολογίζεται) καθορίζοντας το δείκτη του στοιχείου με βάση την αρχή του array. Από την έκδοση 5 του MATLAB και μετά μπορούν να δημιουργηθούν arrays με οποιονδήποτε αριθμό δεικτών. Στις εφαρμογές αυτής της εισαγωγής μας στο MATLAB τα arrays θα έχουν έναν ή δύο δείκτες που περιέχουν είτε αριθμητικές, ή χαρακτήρες. (Τα arrays χαρακτήρων ή strings περιγράφονται παρακάτω, στην παράγραφο 1.3.2). Ένας πίνακας (matrix) είναι δισδιάστατο array με αριθμητικές τιμές που υπακούει στους κανόνες της γραμμικής άλγεβρας, όπως αυτοί περιγράφονται σε ένα βιβλίο Γραμμικής Άλγεβρας. Εδώ θα αναφερθούμε κυρίως σε ότι αφορά τον ορισμό και τη χρήση μεταβλητών για πίνακες του MATLAB σε απλές υπολογιστικές πράξεις. Ένα βαθμωτό μέγεθος θεωρείται ως ένας πίνακας με μια γραμμή και μια στήλη. Ένα διάνυσμα (vector) είναι ένας πίνακας είτε με μία γραμμή ή με μία στήλη. Ό- ταν εισάγεται μια μαθηματική έκφραση ή παράσταση (expression) ο διερμηνέας του MATLAB την διαπερνάει (parse) και την υπολογίζει κάνοντας χρήση των κανόνων της γραμμικής άλγεβρας. Βαθμωτές παραστάσεις όπως >> a = 2; b = 3; >> c = a*b c =

Παράρτημα 209 6 διέπονται από αυτούς τους κανόνες. Οι αγκύλες, [ ], χρησιμοποιούνται για να οροθετήσουν διανύσματα και πίνακες κατά την εισαγωγή τους στη γραμμή εντολών. Η επόμενη παράσταση δημιουργεί ένα διάνυσμα γραμμή (row vector) με τρία στοιχεία: >> v = [7 3 9] v = 7 3 9 Τα στοιχεία σε μια γραμμή διαχωρίζονται με κενά ή κόμματα. Τα ερωτηματικά χρησιμοποιούνται για το διαχωρισμό των γραμμών. Ένα παράδειγμα ενός διανύσματος στήλης (column vector) φαίνεται παρακάτω >> w = [2; 6; 1] w = 2 6 1 και ένα παράδειγμα ενός 3x3 πίνακα είναι >> A = [1 2 3; 4 5 6; 13 17 19] A = 1 2 3 4 5 6 13 17 19 Όταν ένας πίνακας εισάγεται απευθείας στη γραμμή εντολών, για το διαχωρισμό των γραμμών μπορεί να χρησιμοποιηθεί το πλήκτρο >> B = [11 12 13 % πληκτρολογήστε μετά την 4 5 6 % πληκτρολόγηση του 13 7 8 9] B = 11 12 13 4 5 6 7 8 9 Οι διαστάσεις του πίνακα (ή διανύσματος) δεν καθορίζονται ρητά. Το MATLAB κρατάει πληροφορία για τον αριθμό των γραμμών και των στηλών, αυτόματα.

210 Παράρτημα 1.2.1 Δημιουργία Πινάκων Στο MATLAB, μεταβλητές πινάκων μπορούν να δημιουργηθούν με οποινδήποτε από τους παρακάτω τρόπους: Απευθείας εισαγωγή (με πληκτρολόγηση) Υπολογισμός παραστάσεων πινάκων Ενσωματωμένες συναρτήσεις που επιστρέφουν πίνακες Συναρτήσεις που δημιουργούνται από το χρήστη και που επιστρέφουν πίνακες Εισάγοντας πίνακες δεδομένα από αρχεία σε δίσκο Τα προηγούμενα παραδείγματα δείχνουν πως εισάγονται πίνακες απευθείας (με πληκτρολόγηση). Για την εισαγωγή διανυσμάτων είναι σημαντικό να διακρίνουμε τα διανύσματα γραμμές από τα διανύσματα στήλες. Σύμφωνα με τους κανόνες της γραμμικής άλγεβρας, δεν είναι εναλλάξιμα τα διανύσματα στήλες με τα διανύσματα γραμμές και ο διερμηνευτής (interpreter) του MATLAB δεν επιτρέπει μη αποδεκτές παραστάσεις. Ένα διάνυσμα γραμμή μπορεί να μετατραπεί σε ένα διάνυσμα στήλη, και το αντίθετο, με τον τελεστή αναστροφής (transpose operator). Στον γνωστό από την γραμμική άλγεβρα συμβολισμό, αν v είναι ένα διάνυσμα, τότε το v Τ είναι το ανάστροφό του. Για παράδειγμα, 2 4 v = [2 4 1 7] και v Τ = 1 7 Στο MATLAB ο τελεστής αναστροφής συμβολίζεται με τη μονή απόστροφο ('). Δηλ. ο ανάστροφος του πίνακα Α συμβολίζεται με Α'. Έτσι σύμφωνα με όσα προηγήθηκαν, το διάνυσμα v και το ανάστροφό του δημιουργούνται στο MATLAB με >> v = [2 4 1 7] v = 2 4 1 7 >> v' ans = 2 4 1 7

Παράρτημα 211 και ένας πίνακας Α με τον ανάστροφό του με >> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> A' ans = 1 4 7 2 5 8 3 6 9 Υπάρχουν πολλές ενσωματωμένες συναρτήσεις για τη δημιουργία διανυσμάτων και πινάκων. Μερικές από αυτές παρατίθενται στον Πίνακα 1.2. Η eye συνάρτηση δέχεται ένα ή δύο ορίσματα και δημιουργεί έναν πίνακα με 1 στην κύρια διαγώνιο. Η μορφή της eye συνάρτησης με ένα όρισμα δημιουργεί έναν (τετραγωνικό) μοναδιαίο πίνακα με διαστάσεις που ορίζονται από την τιμή της εισαχθείσας παραμέτρου, όπως >> C = eye(4) C = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ΠΙΝΑΚΑΣ 1.2 ΜΕΡΙΚΕΣ ΕΝΣΩΜΑΤΩΜΕΝΕΣ ΣΥΝΑΡΤΗΣΕΙΣ ΓΙΑ ΤΗ ΔΗΜΙ- ΟΥΡΓΙΑ ΠΙΝΑΚΩΝ. Συνάρτηση Επιστρέφει diag πίνακα με καθορισμένα διαγώνια στοιχεία ή εξάγει τα διαγώνια στοιχεία ενός πίνακα eye μοναδιαίο πίνακα ones πίνακα με όλα τα στοιχεία = 1 rand πίνακα με στοιχεία τυχαίους αριθμούς zeros πίνακα με όλα τα στοιχεία = 0 length το πλήθος των στοιχείων ενός διανύσματος linspace διάνυσμα γραμμή με στοιχεία που αυξάνονται γραμμικά logspace διάνυσμα στήλη με στοιχεί που αυξάνονται λογαριθμικά size τις διαστάσεις του πίνακα

212 Παράρτημα Αν στην συνάρτηση eye εισαχθούν δύο παράμετροι, η πρώτη ορίζει το πλήθος των γραμμών και η δεύτερη το πλήθος των στηλών του πίνακα που θα δημιουργηθεί. Η διαγώνιος με i = j, όπου i είναι ο δείκτης της γραμμής ενώ j είναι ο δείκτης της στήλης, έχει στοιχεία μονάδες: >> D = eye (3,5) D = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 Η συνάρτηση diag είτε δημιουργεί έναν πίνακα με καθορισμένες τις τιμές της διαγωνίου ή εξάγει τα στοιχεία της διαγωνίου. Για τη δημιουργία ενός διαγώνιου πίνακα με την diag συνάρτηση, το εισαγόμενο όρισμα πρέπει να είναι διάνυσμα. Το διάνυσμα μπορεί να δημιουργηθεί ρητά, όπως >> v = [1 2 3]; >> A = diag(v) A = 1 0 0 0 2 0 0 0 3 ή να εισαχθεί κατευθείαν ως όρισμα, όπως >> B = diag([1 2 1 2]) B = 1 0 0 0 0 2 0 0 0 0 1 0 0 0 0 2 Για την εξαγωγή των στοιχείων της διαγωνίου ενός πίνακα χρησιμοποιείται η ίδια συνάρτηση με τη διαφορά ότι τώρα το εισαγόμενο όρισμα είναι πίνακας και όχι διάνυσμα: >> w = diag(b) w = 1 2 1 2

Παράρτημα 213 Η εξάρτηση της λειτουργίας της συνάρτησης diag από το εισαγόμενο όρισμα είναι ένα σημαντικό χαρακτηριστικό το οποίο συναντάται σε πολλές συναρτήσεις του MATLAB. Για κάποιον που μαθαίνει τώρα το MATLAB, η δυνατότητα μιας συνάρτησης να εκτελεί διαφορετικές αν και σχετιζόμενες εργασίες, μπορεί να προκαλεί σύγχυση. Όταν όμως εξοικειωθεί με την δυνατότητα αυτή θα είναι ένα σημαντικό πλεονέκτημα για τον ίδιο καθώς, θα πρέπει να θυμάται λιγότερες συναρτήσεις. Οι συναρτήσεις ones και zeros είναι παρόμοιες: η ones δημιουργεί έναν πίνακα με μονάδες και η zeros έναν πίνακα με μηδενικά. Και οι δυο αυτές συναρτήσεις δαίχονται δύο ορίσματα. Το πρώτο όρισμα είναι το πλήθος των γραμμών του πίνακα και το δεύτερο είναι το πλήθος των στηλών του: >> D = ones(3,3) D = 1 1 1 1 1 1 1 1 1 Φυσικά, ο πίνακας δεν είναι απαραίτητο να είναι τετραγωνικός. >> E = ones(2, 4) E = 1 1 1 1 1 1 1 1 Βέβαια, οι ones και zeros μπορούν να χρησιμοποιηθούν για τη δημιουργία διανυσμάτων γραμμών ή στηλών: >> s = ones(1, 4) s = 1 1 1 1 >> t = zeros(3, 1) t = 0 0 0 Η συνάρτηση linspace δημιουργεί διανύσματα γραμμές με στοιχεία που διαφέρουν ισομετρικά. Χρησιμοποιείται με δύο μορφές linspace(αρχικήτιμή, τελικήτιμή)

214 Παράρτημα και linspace(αρχικήτιμή, τελικήτιμή, πλήθοςσημείων) όπου οι παράμετροι αρχικήτιμή και τελικήτιμή είναι η αρχική και τελική τιμή της ακολουθίας των στοιχείων και η παράμετρος πλήθοςσημείων είναι ο αριθμός των στοιχείων που είναι να δημιουργηθούν. Για παράδειγμα, μπορεί να έχουμε >> u = linspace(0.0, 0.25, 5) u = 0 0.0625 0.1250 0.1875 0.2500 Στην μορφή με τις δύο παραμέτρους, η παράμετρος πλήθος Σημείων δέχεται εξ ορισμού την τιμή 100. Στην βασική της μορφή, η συνάρτηση linspace δημιουργεί διανύσματα γραμμή. Για την δημιουργία διανύσματος στήλη απλώς χρησιμοποιείστε τον τελεστή αναστροφής, όπως στο παρακάτω παράδειγμα >> v = linspace(0, 9, 4)' v = 0 3 6 9 Η συνάρτηση logspace είναι παρόμοια με την linspace, απλώς δημιουργεί στοιχεία που διαφέρουν λογαριθμικά μεταξύ τους. Η εντολή >> logspace(αρχικήτιμή, τελικήτιμή, πλήθοςσημείων) δημιουργεί πλήθος στοιχείων ίσο με πλήθοςσημείων ανάμεσα στις τιμές 10 αρχικήτιμή και 10 τελικήτιμή, όπως στην παρακάτω εντολή: >> w = logspace(1, 4, 4) w = 10 100 1000 10000 Αν το τρίτο όρισμα παραληφθεί, δημιουργούνται 50 στοιχεία ανάμεσα στις τιμές 10 αρχικήτιμή και 10 τελικήτιμή.

Παράρτημα 215 Παράδειγμα 1.1: Πίνακας Τιμών Τριγωνομετρικών Συναρτήσεων Οι εντολές του MATLAB που ακολουθούν, δημιουργούν διανύσματα που περιέχουν τιμές τριγωνομετρικών συναρτήσεων. Κατόπιν, τα διανύσματα αυτά συνδυάζονται για να σχηματίσουν τις στήλες ενός πίνακα έτσι ώστε οι τιμές να εμφανιστούν σε πινακοειδή μορφή: >> x = linspace(0, 2*pi, 6); >> s = sin(x); >> c = cos(x); >> t = tan(x); >> [x' s' c' t'] ans = 0 0 1.0000 0 1.2566 0.9511 0.3090 3.0777 2.5133 0.5878-0.8090-0.7265 3.7699-0.5878-0.8090 0.7265 5.0265-0.9511 0.3090-3.0777 6.2832-0.0000 1.0000-0.0000 Η έκφραση [x' s' c' t'] δημιουργεί έναν πίνακα του οποίου οι στήλες είναι τα ανάστροφα των διανυσμάτων x, s, c και t. Τι συμβαίνει αν παραληφθούν οι τελεστές αναστροφής; Μπορείτε να δημιουργήσετε έναν πίνακα στον οποίο η πρώτη γραμμή να περιέχει τις τιμές του x και η δεύτερη μέχρι την τέταρτη να περιέχουν τις τιμές των s, c, και t, αντιστοίχως; 1.2.2 Συμβολισμός Δεικτών για τα Στοιχεία Πινάκων Τα στοιχεία των πινάκων αναφέρονται χρησιμοποιώντας συμβολισμό δεικτών με τρόπο παρόμοιο με αυτόν της Fortran. Αν v είναι ένα διάνυσμα γραμμή ή στήλη, το v(k) αναφέρεται στο k-οστό στοιχείο του διανύσματος. Αν Α είναι ένας πίνακας, το A(m,n) αναφέρεται στο στοιχείο της m-οστής γραμμής και n-οστής στήλης, όπως φαίνεται >> Α = 1 2 3; 4 5 6; 7 8 9 ; >> Α(3,2) ans = 8

216 Παράρτημα Κατά την εξαγωγή τιμών από πίνακα, η χρήση δεικτών πέραν των διαστάσεων του πίνακα έχει σαν αποτέλεσμα σφάλμα: >> A=[1 2 3;4 5 6;7 8 9]; >> A(1,4)??? Index exceeds matrix dimensions. Ο συμβολισμός δεικτών μπορεί να χρησιμοποιηθεί για την ανάθεση τιμών σε στοιχεία πίνακα: >> A=[1 2 3;4 5 6;7 8 9]; >> A(1,1)=-2 A = -2 2 3 4 5 6 7 8 9 Αντίθετα από την προσπάθεια εξαγωγής στοιχείου εκτός του διαστήματος δεικτών ενός πίνακα, μια πράξη ανάθεσης μπορεί, νόμιμα, να αναφέρεται σε δείκτες γραμμών και στηλών που δεν αποτελούν μέρος του πίνακα. Αν μια εντολή ανάθεσης χρησιμοποιεί έναν δείκτη μεγαλύτερο από τις τρέχουσες διαστάσεις του πίνακα το MATLAB απλώς αυξάνει το μέγεθος του πίνακα, προκειμένου να συμπεριλάβει το νέο στοιχείο(α). >> D = eye(3,5) D = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 >> D(4,2) = -2 D = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0-2 0 0 0 Οι πίνακες που μεγαλώνουν αυτόματα για να ανταποκριθούν σε ανάγκες είναι ένα ισχυρό χαρακτηριστικό που ελαττώνει τη μονοτονία και την πολυπλοκότητα κάποιων διεργασιών της γραμμικής άλγεβρας. Ωστόσο, όπως πολλά από τα εξαίρετα χαρακτηριστικά στοιχεία του MATLAB, αυτό μπορεί να οδηγεί σε ολέθρια σφάλματα.

Παράρτημα 217 Οι συναρτήσεις length και size χρησιμοποιούνται για να προσδιορίσουν το πλήθος των στοιχείων σε διανύσματα και πίνακες. Οι συναρτήσεις αυτές είναι ι- διαίτερα χρήσιμες όταν κάποιος δουλεύει με πίνακες μεταβλητού ή αγνώστου μεγέθους, ειδικότερα δε, όταν γράφει βρόχους. (βλ. 2.4.5 2.4.6). Για παράδειγμα, οι παρακάτω εντολές δημιουργούν ένα διάνυσμα και αντικαθιστούν το τελευταίο του στοιχείο με μηδέν: >> x = 0:5 x = 0 1 2 3 4 5 >> n = length(x) n = 6 >> x(n) = 0 x = 0 1 2 3 4 0 Η εντολή size επιστρέφει δύο τιμές και έχει την ακόλουθη σύνταξη: [nrows,mcols] = size(matrix) όπου nrows και mcols είναι τα πλήθη των γραμμών και των στηλών, αντιστοίχως, στον πίνακα matrix. Σημειώστε ότι οι παράμετροι επιστροφής πρέπει να διαχωρίζονται με κόμμα και να περικλείονται σε αγκύλες. Παρατίθενται μερικά παραδείγματα που κάνουν χρήση της συνάρτησης size: >> A = eye(3,5); >> [nr, nc] = size(a) nr = 3 nc = 5 >> B = zeros(size(a)) B = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

218 Παράρτημα Το δεύτερο παράδειγμα δείχνει ότι το αποτέλεσμα της συνάρτησης size μπορεί να χρησιμοποιηθεί σαν όρισμα μιας άλλης εντολής. Αυτός ο τύπος έκφρασης χρησιμοποιείται συχνά για την αρχικοποίηση ενός πίνακα έτσι ώστε να έχει το ίδιο σχήμα με κάποιον άλλο πίνακα. Φυσικά, σε αυτό το παράδειγμα, ο ορισμός του πίνακα Β θα μπορούσε να επιτευχθεί με την Β=zeros(nr,nc) όπου nr και nc ανατίθενται με την [nr,nc] = size(a). 1.2.3 Ο συμβολισμός άνω - κάτω τελεία (:) Το MATLAB έχει μια ισχυρή και πολύ συμπαγή σύνταξη, η οποία αναφέρεται ως συμβολισμός άνω - κάτω τελεία. Ο συμβολισμός αυτός μπορεί να χρησιμοποιηθεί είτε στη δημιουργία διανυσμάτων ή, σε συνδυασμό με τον συμβολισμό δεικτών (προηγούμενη ενότητα), στην εξαγωγή πεδίων τιμών των στοιχείων πινάκων. Αν και ο συμβολισμός άνω - κάτω τελεία είναι πολύ λακωνικός και κατά κάποιο τρόπο «ξυπναδιάρικος» για να τον κατέχει κάποιος, μπορεί να χρησιμοποιηθεί παρέχοντας πολλά πλεονεκτήματα. Δύο μορφές συμβολισμού άνω - κάτω τελείας χρησιμοποιούνται για τη δημιουργία διανυσμάτων: διάνυσμα = αρχικήτιμή:τελικήτιμή διάνυσμα = αρχικήτιμή:αύξηση:τελικήτιμή Εδώ, οι τιμές αρχικήτιμή και τελικήτιμή είναι τα άκρα του διαστήματος, η τιμή αύξηση είναι η διαφορά ανάμεσα στα σημεία του διαστήματος και διάνυσμα είναι το αποτέλεσμα. Δείτε τα παραδείγματα: >> s = 1:5 s = 1 2 3 4 5 >> t = 0:0.1:0.5 t = 0 0.1000 0.2000 0.3000 0.4000 0.5000 Το δεύτερο παράδειγμα δείχνει ότι οι τιμές αρχικήτιμή, αύξηση και τελικήτιμή δεν είναι απαραίτητο να είναι ακέραιοι. Όπως με την linspace συνάρτηση, οι παραστάσεις με άνω -κάτω τελεία δημιουργούν διανύσματα γραμμή, εξ ορισμού. Προκειμένου να δημιουργήσουμε ένα διάνυσμα στήλη, περικλείουμε την παράσταση σε παρενθέσεις και επισυνάπτουμε τον τελεστή αναστροφής: >> u = (1:5)'

Παράρτημα 219 u = 1 2 3 4 5 Οι παρενθέσεις είναι απαραίτητες γιατί ο τελεστής αναστροφής έχει υψηλότερη προτεραιότητα από το σύμβολο (:). 2 Για παράδειγμα, >> v = 1:5' v = 1 2 3 4 5 έχει σαν αποτέλεσμα ένα διάνυσμα γραμμή γιατί ο τελεστής αναστροφής εφαρμόστηκε στο βαθμωτό μέγεθος 5 πριν δημιουργηθεί το διάνυσμα. Ένα σύμβολο (:) μπορεί να χρησιμοποιηθεί σαν μπαλαντέρ για να αναφερθούμε σε μια ολόκληρη γραμμή ή στήλη: >> A=[1 2 3;4 5 6;7 8 9]; >> A(:,1) ans = 1 4 7 >> A(2,:) ans = 4 5 6 Εναλλακτικά, ένα πεδίο τιμών μπορεί να επιλεγεί χρησιμοποιώντας μια παράσταση με (:) στη θέση ενός απλού δείκτη: >> A = [1 2 3;4 5 6;7 8 9]; >> A(2:3,1) ans = 4 7 >> A(1:2,2:3) ans = 2 βλ. 2.4.2 για τους κανόνες προτεραιότητας τελεστών.

220 Παράρτημα 2 3 5 6 Ο συμβολισμός άνω - κάτω τελεία μπορεί επίσης να χρησιμοποιηθεί σε πράξεις ανάθεσης τιμών. Οι παρακάτω εντολές δημιουργούν έναν πίνακα μονάδων και μετά αναθέτουν νέες τιμές στην πρώτη γραμμή: >> B = ones(3,4); >> B(1,:) = [2 4 6 8] B = 2 4 6 8 1 1 1 1 1 1 1 1 Η δεύτερη εντολή μπορεί να συντμηθεί περισσότερο με το σύμβολο (:) >> B = ones(3,4); >> B(1,:) = 2:2:8 B = 2 4 6 8 1 1 1 1 1 1 1 1 Σε ορισμένες περιπτώσεις μπορεί κανείς να χρειαστεί να ανακτήσει την τελευταία τιμή, την προτελευταία κ.λπ. τιμή από έναν πίνακα ή διάνυσμα. Ένας τρόπος να το κάνει αυτό είναι ο ακόλουθος: x =... % ορίζει το διάνυσμα x s = x(end) % το τελευταίο στοιχείο του x t = x(end-1) % το προτελευταίο στοιχείο του x, % κ.λπ. Σε αυτό το σημείο, μπορεί να χρησιμοποιηθεί η λέξη-κλειδί end αντί να ορίσουμε μια μεταβλητή να είναι ίση με το μήκος του διανύσματος. Για παράδειγμα, θα μπορούσαμε να έχουμε >> x = rand(1,5) x = 0.9501 0.2311 0.6068 0.4860 0.8913 >> x(end) ans = 0.8913

Παράρτημα 221 >> x(end-1) ans = 0.4860 Η λέξη-κλειδί end έχει εφαρμογή και στους πίνακες κατά έναν προφανή τρόπο: >> A = [1 2 3;4 5 6;7 8 9]; >> B = A(2:end,1:end-1) B = 4 5 7 8 1.2.4 Διαγραφή Στοιχείων από Διανύσματα και Πίνακες Το MATLAB δίνει την δυνατότητα διαγραφής μεμονωμένων ή ομαδοποιημένων στοιχείων από διανύσματα και πίνακες αναθέτοντας στα στοιχεία αυτά τον κενό πίνακα,[ ]. Αν x είναι ένα ήδη ορισμένο διάνυσμα, η ανάθεση x = [ ] απαλείφει όλα τα στοιχεία του διανύσματος. Συγκεκριμένα στοιχεία ενός διανύσματος απαλείφονται χρησιμοποιώντας τις κατάλληλες εντολές, όπως >> x = 1:5; % δημιουργεί ένα διάνυσμα x >> x(3) = [ ] % και διαγράφει το τρίτο στοιχείο του x = 1 2 4 5 Χρησιμοποιώντας τον κατάλληλο συμβολισμό μπορούμε να διαγράψουμε τμήματα στοιχείων ενός διανύσματος: >> x = 1:5; >> x(1:3) = [] % διαγράφει τα πρώτα τρία στοιχεία x = 4 5 >> x = 1:10; >> x(1:2:9) = [ ] % διαγράφει τα περιττής τάξεως στοιχεία x = 2 4 6 8 10 >> x = 1:10; >> x(length(x)-3:length(x)) = [] % διαγράφει τα τέσσερα % τελευταία στοιχεία

222 Παράρτημα x = 1 2 3 4 5 6 Οι προηγούμενες εντολές μπορούν να περιοριστούν χρησιμοποιώντας τη λέξηκλειδί end: >> x = 1:10; >> x(end-3:end)=[] x = 1 2 3 4 5 6 Οι πράξεις απαλοιφής σε πίνακες πρέπει να αφορούν ολόκληρες γραμμές ή στήλες: >> A = [1 2 3;4 5 6;7 8 9]; >> A(:,1) = [] A = 2 3 5 6 8 9 >> A = [1 2 3;4 5 6;7 8 9]; >> A(3,3) = []??? Indexed empty matrix assignment is not allowed. Το στοιχείο (3,3) δεν μπορεί να απαλοιφθεί γιατί οι πίνακες πρέπει να διατηρούν το ορθογώνιο σχήμα τους. 1.2.5 Πράξεις με Πίνακες Οι βασικές αριθμητικές πράξεις της πρόσθεσης, της αφαίρεσης και του πολλαπλασιασμού μπορούν να εφαρμοστούν άμεσα σε πίνακες μεταβλητές, υπό τον όρο ότι η συγκεκριμένη πράξη διέπεται από τους κανόνες της Γραμμικής Άλγεβρας. Για παράδειγμα, η πρόσθεση και η αφαίρεση δύο διανυσμάτων γραμμής ίσου μεγέθους είναι επιτρεπτή: >> u = [10 9 8]; % τα u και v είναι διανύσματα-γραμμές >> v = [1 2 3]; >> u + v % το άθροισμα είναι στοιχείο προς στοιχείο ans = 11 11 11

Παράρτημα 223 >> u v % η διαφορά είναι στοιχείο με στοιχείο ans = 9 7 5 Ο τελεστής * εκτελεί τον κατάλληλο πολλαπλασιασμό πίνακα με πίνακα, πίνακα με διάνυσμα, εσωτερικό και εξωτερικό γινόμενο, ανάλογα με το είδος των τελεστέων. Δοθέντων δύο συμβατών πινάκων Α και Β, η παράσταση Α*Β του MATLAB υπολογίζει το γινόμενο των Α και Β όπως ορίζεται από τους κανόνες της Γραμμικής Άλγεβρας. Τα παρακάτω είναι παραδείγματα γινομένων πίνακα με πίνακα και πίνακα με διάνυσμα: >> A = ones(2,3); >> B = [1 2;3 4;5 6]; >> A*B ans = 9 12 9 12 >> C = diag(1:3); D = ones(3,3); >> C*D ans = 1 1 1 2 2 2 3 3 3 >> x = [1; 0; 1;]; >> A*x ans = 2 2 >> C*x ans = 1 0 3 Το εσωτερικό γινόμενο δύο διανυσμάτων είναι αριθμός. Στην Γραμμική Άλγεβρα το εσωτερικό γινόμενο είναι αποτέλεσμα του πολλαπλασιασμού ενός διανύσματος γραμμή και ενός διανύσματος στήλης. Για παράδειγμα, το γινόμενο ενός διανύσματος γραμμή u, με τέσσερα στοιχεία, και ενός διανύσματος στήλη v, με τέσσερα στοιχεία, δίνεται από:

224 Παράρτημα u 1 u2 u3 u4 v v v v 1 2 uv = = u 1 v 1 + u 2 v 2 + u 3 v 3 + u 4 v 4 3 4 Αν υ και w είναι και τα δύο διανύσματα στήλη, τότε το εσωτερικό γινόμενο τους υπολογίζεται μετατρέποντας το ένα διάνυσμα γραμμή σε διάνυσμα στήλη, έστω υ. Υποθέτοντας για λόγους ευκολίας ότι έχουμε δύο διανύσματα τεσσάρων στοιχείων, έχουμε w1 υ Τ w = 1 2 3 4 w2 = υ 1 w 1 + υ 2 w 2 + υ 3 w 3 + υ 4 w 4. w 3 w4 Οι παρακάτω πράξεις υποστηρίζονται άμεσα από τον τελεστή * του MATLAB: >> u=[10 9 8 6]; v=[1; 2; 3; 4]; >> u*v ans = 76 >> w=[1; 0; 1; -1] w = 1 0 1-1 >> v'*w % προσέξτε τον τελεστή αναστροφής στο v ans = 0 Το εσωτερικό γινόμενο μπορεί, επίσης, να υπολογιστεί με την ενσωματωμένη συνάρτηση dot, η οποία δέχεται σαν ορίσματα δύο διανύσματα με τον ίδιο αριθμό στοιχείων. Σε αντίθεση με την χρήση του τελεστή *, η χρήση της συνάρτησης dot γίνεται ανεξάρτητα από το είδος των διανυσμάτων, αν είναι δηλαδή και τα δύο διανύσματα, διανύσματα γραμμή ή διανύσματα στήλη:

Παράρτημα 225 >> dot(u,v) ans = 76 >> dot(v,w) ans = 0 Η συνάρτηση dot είναι κατά κάποιο τρόπο λιγότερο αποτελεσματική από τον τελεστή (*) γιατί εκτελεί κάποιους επιπλέον ελέγχους συμβατότητας και επανασχηματισμού. Διανυσματικοποίηση και Τελεστές Πινάκων Όλες οι ενσωματωμένες συναρτήσεις στο MATLAB είναι «διανυσματικοποιημένες», πράγμα που σημαίνει ότι, δοθέντος ενός διανύσματος ως εσωτερικού ορίσματος, η πράξη που σημειώνεται με το όνομα της συγκεκριμένης συνάρτησης εφαρμόζεται σε όλα τα στοιχεία του διανύσματος. Η διανυσματικοποίηση έχει ως αποτέλεσμα οι πράξεις να εκτελούνται με μια συνοπτική σύνταξη. Ωστόσο, περισσότερο σημαντικό είναι το κέρδος από την απόδοση των υπολογισμών, όποτε χρησιμοποιούνται διανυσματικοποιημένες πράξεις αντί για βρόχους 3 (αλληλουχία επαναλαμβανόμενων εντολών) που διαπερνούν όλα τα στοιχεία ενός πίνακα ή διανύσματος. Θεωρείστε, για παράδειγμα, τη συνάρτηση cos: >> x = 0:pi/4:pi x = 0 0.7854 1.5708 2.3562 3.1416 >> y = cos(x) y = 1.0000 0.7071 0.0000-0.7071-1.0000 Κατά τον υπολογισμό της παράστασης y = cos(x), ο διερμηνευτής του MATLAB διαπιστώνει ότι το x είναι διάνυσμα. Αυτό είναι ένα ιδιαίτερα χρήσιμο χαρακτηριστικό που έχει ως αποτέλεσμα κομψές παραστάσεις του MATLAB. Παρατηρήστε τι θα έπρεπε να εκτελεστεί στη Fortran προκειμένου να γίνουν οι προηγούμενοι υπολογισμοί: real x(5), y(5) pi = 3.14159624 dx = pi/4.0 3 Οι βρόχοι περιγράφονται στις παραγράφους 2.4.5 και 2.4.6.

226 Παράρτημα do 10 i = 1,5 x(i) = (i-1)*dx y(i) = cos(x(i)) 10 continue Προς υποστήριξη της διανυσματικοποίησης, το MATLAB ορίζει νέα αριθμητικά σύμβολα που ονομάζονται array operators, που εκτελούν πράξεις στοιχείο με στοιχείο σε ένα ζεύγος πινάκων (ή διανυσμάτων) με ίσο αριθμό γραμμών και στηλών. Το αποτέλεσμα μιας πράξης στοιχείο με στοιχείο ανάμεσα σε δυο πίνακες, είναι ένας άλλος πίνακας της αυτής μορφής. Στη Γραμμική Άλγεβρα δεν υπάρχει άμεσα ισοδύναμο σε κάποιες από τις πράξεις αυτές. Οι πράξεις αυτές (στοιχείο με στοιχείο) θεωρούν τους πίνακες σαν δομές δεδομένων, όχι σαν μαθηματικές οντότητες. Τα σύμβολα των array operators είναι ο συνδυασμός μιας τελείας (.) και ενός συνήθους τελεστή από τους *, / και ^. Ο στοιχείο με στοιχείο πολλαπλασιασμός ε- κτελείται με τον τελεστή.* και η στοιχείο με στοιχείο διαίρεση εκτελείται με τον τελεστή./ : >> w = [1 2 3]; x = [4 5 6]; >> y = w.*x y = 4 10 18 >> z = w./x z = 0.2500 0.4000 0.5000 Οι στοιχείο με στοιχείο πράξεις εφαρμόζονται σε πίνακες αλλά και σε διανύσματα: >> A = [1 2 3;4 5 6;7 8 9]; >> B = [9 8 7;6 5 4;3 2 1]; >> A.*B ans = 9 16 21 24 25 24 21 16 9 Παρατηρήστε ότι το αποτέλεσμα Α.*Β δεν είναι το ίδιο με το Α*Β. Ο τελεστής στοιχείο με στοιχείο εκθετοποίησης,.^, υψώνει όλα τα στοιχεία ενός πίνακα σε μια δύναμη: >> A = [1 2 3;4 5 6;7 8 9];

Παράρτημα 227 >> A.^2 ans = 1 4 9 16 25 36 49 64 81 >> A.^(1/2) ans = 1.0000 1.4142 1.7321 2.0000 2.2361 2.4495 2.6458 2.8284 3.0000 Η σύνταξη των array operators απαιτεί την με προσοχή σωστή τοποθέτηση ενός μικρού τυπογραφικού συμβόλου, μιας τελείας (.), σε ένα, μάλλον, σύνθετο τύπο. Αν και το MATLAB θα εντοπίσει τα συντακτικά λάθη, είναι πιθανό, να γίνουν υ- πολογιστικά σφάλματα με νόμιμες πράξεις. Για παράδειγμα, Α.^2 και Α^2 είναι και τα δυο νόμιμα, αλλά όχι ισοδύναμα. Στην Γραμμική Άλγεβρα, η πρόσθεση και η αφαίρεση πινάκων ή διανυσμάτων είναι στοιχείο με στοιχείο πράξεις. Για τον λόγο αυτό, δεν υπάρχουν ειδικοί τελεστές για την πρόσθεση και την αφαίρεση. 1.2.6 Μετασχηματισμός της Μορφής Πινάκων Μερικές φορές χρειάζεται αναδιοργάνωση των δεδομένων που είναι αποθηκευμένα σε έναν πίνακα χωρίς να μετασχηματισθούν μαθηματικά. Για παράδειγμα, για να κάνουμε έναν υπολογισμό πιο αποτελεσματικά, μπορεί να πρέπει να μετατρέψουμε έναν πίνακα σε διάνυσμα. Αν η οπτική εικόνα του πίνακα είναι ένα ορθογώνιο, τότε η μετατροπή πίνακα σε διάνυσμα περιλαμβάνει αλλαγή του σχήματος του πίνακα από ένα κανονικό ορθογώνιο σχήμα σε ένα στενόμακρο ορθογώνιο σχήμα. Για την εκτέλεση της πράξης αυτής χρησιμοποιείται η συνάρτηση reshape. Σε άλλες περιπτώσεις, είναι πιο κατάλληλο να χρησιμοποιείται ένα τέχνασμα με το συμβολισμό της ανω κάτω τελείας (:). Η συνάρτηση reshape έχει τρία εισερχόμενα ορίσματα: ΕξόδουΠίνακας= reshape(εισόδουπίνακας,νέεςγραμμές,νέεςστήλες) όπου εισόδουπίνακας είναι ο πίνακας που θα επανασχηματιστεί και νέεςγραμμές, νέεςστήλες είναι ο αριθμός γραμμών και στηλών, αντιστοίχως, του εξόδουπίνακας που δημιουργούνται από τα στοιχεία του

228 Παράρτημα εισόδουπίνακας. Δεν επιτρέπεται μια μερικώς συμπληρωμένη τελευταία στήλη. Οι επόμενες εντολές παρουσιάζουν την reshape συνάρτηση: >> A = [1 5 9; 2 6 10; 3 7 11; 4 8 12] A = 1 5 9 2 6 10 3 7 11 4 8 12 >> B = reshape(a,2,6) B = 1 3 5 7 9 11 2 4 6 8 10 12 >> s = reshape(a,1,12) s = 1 2 3 4 5 6 7 8 9 10 11 12 Τα στοιχεία του πίνακα Α είναι επιλεγμένα για να επισημάνουν πώς η reshape συνάρτηση αναδιοργανώνει τον εισόδουπίνακας κατά στήλες. Επειδή ένα διάνυσμα γραμμή ή στήλη είναι πίνακας, η reshape συνάρτηση μπορεί να χρησιμοποιηθεί για τη δημιουργία πινάκων ορθογώνιου σχήματος, από διανύσματα: >> t = 1:6; >> C = reshape(t,2,3) C = 1 3 5 2 4 6 Είναι επίσης πιθανό να αλλάξει το σχήμα ενός πίνακα επί τόπου (δηλ., χωρίς την αντιγραφή του σε άλλο πίνακα): >> D = [1 2 3; 1 2 3; 1 2 3] D = 1 2 3 1 2 3 1 2 3 >> D = reshape(d,1,9)

Παράρτημα 229 D = 1 1 1 2 2 2 3 3 3 Ο τελεστής (:) μπορεί να χρησιμοποιηθεί στον επανασχηματισμό ενός πίνακα σε διάνυσμα στήλη. Η εντολή έχει την μάλλον ασυνήθιστη σύνταξη στήληδιάνυσμα = πίνακας(:) όπου το αποτέλεσμα είναι πάντα ένα διάνυσμα γραμμή και ο πίνακας που βρίσκεται στα δεξιά μπορεί να έχει οποιονδήποτε αριθμό γραμμών ή στηλών: >> E = [1 4; 2 5; 3 6] E = 1 4 2 5 3 6 >> v = E(:) v = 1 2 3 4 5 6 Δεν είναι και περιοριστικό το ότι η χρήση του συμβόλου (:) έχει σαν αποτέλεσμα διάνυσμα στήλη. Αν απαιτείται ένα διάνυσμα γραμμή, απλώς, προσθέστε τον τελεστή αναστροφής: >> E = [1 4; 2 5; 3 6]; >> w = E(:)' w = 1 2 3 4 5 6 Όπως με την reshape, η μέθοδος με την χρήση του συμβόλου (:) μπορεί να ε- φαρμοστεί άμεσα σε ένα διάνυσμα: >> y = 1:5; >> y = y(:) y = 1 2

230 Παράρτημα 3 4 5 Ο επανασχηματισμός με τη χρήση του συμβόλου (:) είναι ιδιαίτερα χρήσιμος όταν το εισερχόμενο όρισμα μιας διαδικασίας πρέπει να είναι ένα διάνυσμα στήλη ή γραμμή. Ο τελεστής αναστροφής απλώς μετατρέπει ένα διάνυσμα γραμμή σε ένα διάνυσμα στήλη και αντιστρόφως. Σε αντίθεση, η πράξη με την (:), x(:), παράγει πάντα ένα διάνυσμα στήλη. Οι πράξεις επανασχηματισμού επωφελούνται των ενσωματωμένων δυνατοτήτων διανυσματικοποίησης του MATLAB. Ως αποτέλεσμα, οι πράξεις επανασχηματισμού είναι πολύ πιο αποδοτικές από την αλγοριθμικά ισοδύναμη διαδικασία αντιγραφής στοιχείων, ένα κάθε φορά, σε έναν πίνακα του επιθυμητού σχήματος. 1.3 Πρόσθετοι Τύποι Μεταβλητών Για την επίλυση των περισσότερων αριθμητικών προβλημάτων, οι μεταβλητές στο MATLAB θα παίρνουν είτε αριθμητικές είτε αλφαριθμητικές (string) τιμές. Τα αλφαριθμητικά χρησιμοποιούνται κυρίως σε ετικέτες διαγραμμάτων ή σε ονόματα συναρτήσεων ορισμένων από τον χρήστη. Οι αριθμητικές τιμές μπορεί να είναι είτε πραγματικές ή μιγαδικές. Σ αυτήν την ενότητα περιγράφονται ενσωματωμένα χαρακτηριστικά του MATLAB που υποστηρίζουν τη χρήση μιγαδικών αριθμών και αλφαριθμητικών. Επίσης, περιγράφεται μια ομάδα συναρτήσεων που για τον χειρισμό πολυωνύμων. Στο MATLAB οι μεταβλητές που ορίζονται από τον χρήστη είναι αντικείμενα που περιλαμβάνουν αρκετά ξεχωριστά κομμάτια δεδομένων. Τμήμα του αντικειμένου περιλαμβάνει αλφαριθμητικά ή αριθμητικά δεδομένα που νοούνται ως αποθηκευμένα στην μεταβλητή. Ένα άλλο τμήμα κρατάει το μέγεθος του αντικειμένου (δηλ. το πλήθος των γραμμών και στηλών του πίνακα). Επιπροσθέτως, κάθε αντικείμενο περιλαμβάνει μια λίστα χαρακτηριστικών (attributes)που χρησιμοποιούνται εσωτερικά από το MATLAB. Ένα τέτοιο χαρακτηριστικό είναι μια σημαία ή δείκτης (flag) που δείχνει αν στο αντικείμενο είναι αποθηκευμένοι φανταστικά δεδομένα (φανταστικοί αριθμοί). Οι χρήστες δεν χρειάζεται να νοιάζονται για τα συγκαλυμμένα χαρακτηριστικά. αποτελούν μέρος του μηχανισμού στον οποίο οφείλεται η ευκολία του να δουλεύει κανείς με τις μεταβλητές του MATLAB.

Παράρτημα 231 1.3.1 Μιγαδικοί Αριθμοί Η αριθμητική των μιγαδικών είναι ολοκληρωμένη πλήρως στο MATLAB. Όλες οι μεταβλητές μπορούν να θεωρούνται ότι είναι μιγαδικές και οι τελεστές +, -, * και /, εκτελούν αυτόματα τους κατάλληλους χειρισμούς με τα πραγματικά και φανταστικά μέρη των βαθμωτών και διανυσματικών μεταβλητών και των μεταβλητών πινάκων. Οι φανταστικές μονάδες i = j = 1 προαναθέτονται στις μεταβλητές i και j. Η χρήση των i και j σε πράξεις ανάθεσης επιτρέπουν την δημιουργία μεταβλητών με μιγαδικές τιμές κατά φυσικό και προφανή τρόπο: >> x = 1 + 2*i x = 1.0000 + 2.0000i >> y = 1 2*i y = 1.0000 2.0000i >> z = x*y z = 5 Στις παραπάνω εντολές, αντί του i μπορεί να χρησιμοποιηθεί το j. Ανεξάρτητα από το ποιο σύμβολο (i ή j) χρησιμοποιήθηκε για την αναπαράσταση του φανταστικής μονάδας στην είσοδο, το MATLAB πάντα χρησιμοποιεί το i για την εμφάνιση μιγαδικών τιμών: >> x = 1 + 2*j x = 1.0000 + 2.0000i ΠΙΝΑΚΑΣ 1.3 ΕΝΣΩΜΑΤΩΜΕΝΕΣ ΣΥΝΑΡΤΗΣΕΙΣ ΓΙΑ ΜΙΓΑΔΙΚΟΥΣ ΑΡΙΘ- ΜΟΥΣ. Συνάρτηση Λειτουργία abs Υπολογίζει το μέτρο ενός αριθμού (δηλ. abs(z) ισούται με sqrt(real(z)^2 + imag(z)^2) angle Όρισμα ενός μιγαδικού αριθμού conj Μιγαδικός συζυγής ενός αριθμού imag Εξάγει το φανταστικό μέρος ενός μιγαδικού αριθμού real Εξάγει το πραγματικό μέρος ενός μιγαδικού αριθμού

232 Παράρτημα Στην ανάθεση μιγαδικών τιμών, σταθερά βαθμωτά πολλαπλάσια του i ή του j μπορούν να δείχνονται με ή χωρίς τον τελεστή (*). Με άλλα λόγια οι >> x = 1 + 2*i και >> x = 1 + 2i είναι ισοδύναμες. Η παράληψη του * επιτρέπεται στην περίπτωση που οι φανταστικές μονάδες βρίσκονται στο τέλος μιας υποπαράστασης. Δηλαδή, η ανάθεση x = 1 + i2 δεν είναι επιτρεπτή. Η συντομογραφία δεν δουλεύει με τις μεταβλητές επειδή ο συμβολισμός είναι διφορούμενος: >> w = 2; >> x = 1 + wi??? Undefined function or variable 'wi'. Σημειώστε ότι i και j είναι απλά μεταβλητές του MATLAB στις οποίες έχει προανατεθεί η τιμή 1. Αν ξαναανατεθεί οποιαδήποτε από τις δύο μεταβλητές, τότε το αποτέλεσμα των παραπάνω εντολών θα είναι διαφορετικό. Θεωρείστε τον επόμενο υπολογισμό: >> i = 5; t = 8; u =sqrt(t-i) u = 1.7321 Η ανάθεση i = 5 αντικαθιστά οποιαδήποτε προηγούμενη τιμή που είναι αποθηκευμένη στην μεταβλητή με όνομα i, έτσι ώστε η t-i έχει σαν αποτέλεσμα την τιμή 3 και όχι 8 1. Το ενδεχόμενο σύγχυσης αποφεύγεται εύκολα ακολουθώντας τον ακόλουθο κανόνα: Κατά τη χρήση μιγαδικών α- ριθμών κρατήστε είτε το i ή το j για την τιμή της 1. Σε άλλες γλώσσες προγραμματισμού τα σύμβολα i και j χρησιμοποιούνται συχνά σαν δείκτες πινάκων. Αυτό είναι επιτρεπτό στο MATLAB αλλά απαιτείται ο προηγούμενος επαναπροσδιορισμός του i ή j: >> A = [1 2; 3 4]; >> i = 2;

Παράρτημα 233 >> A(i,i) = 1 A = 1 2 3 1 Μιγαδικοί αριθμοί μπορούν να χρησιμοποιηθούν σε οποιονδήποτε υπολογισμό, αρκεί η ύπαρξη ενός φανταστικού μέρους να έχει νόημα. Ο Πίνακας 1.3 περιέχει τις ενσωματωμένες συναρτήσεις που είναι χρήσιμες στον χειρισμό των μιγαδικών αριθμών. φανταστικοί iy ζ z = ζe iθ θ Σχήμα 1.1 Συμβολισμός του Euler για μιγαδικούς αριθμούς. x πραγματικοί Η συνάρτηση exp υποστηρίζει τη χρήση μιγαδικών αριθμών κατά τον συμβολισμό του Euler: z =ζe iθ, όπου ζ είναι το μέτρο και θ είναι η γωνία στην αναπαράσταση του z με πολικές συντεταγμένες. Το Σχήμα 1.3 δείχνει έναν μιγαδικό αριθμό κατά τον συμβολισμό του Euler και κατά τον συμβολισμό με καρτεσιανές συντεταγμένες στο μιγαδικό επίπεδο. Οι εντολές για την περιγραφή ενός μιγαδικού α- ριθμού με ζ = 5 και θ = n/3 είναι, για παράδειγμα, >> zeta = 5; theta = pi/3; z = zeta*exp(i*theta) z = 2.5000 + 4.3301i >> abs(z) ans = 5 >> angle(z)*180/pi ans = 60.0000

234 Παράρτημα Φυσικά, θα μπορούσε να εισαχθεί ο z με καρτεσιανές συντεταγμένες αντί με συμβολισμό του Euler. Οι συναρτήσεις real, imag, conj, abs και angle απλοποιούν τη μετατροπή μεταξύ αυτών των αναπαραστάσεων. Οι πράξεις του πολλαπλασιασμού και της διαίρεσης μπορούν, αυτόματα, να χειριστούν τους συνδυασμούς των μιγαδικών και πραγματικών μερών: >> s = 3*exp(i*pi/3); t = 3*exp(i*2*pi/3); >> s-t ans = 3.0000 >> s+t ans = 0.0000 + 5.1962i >> s*t ans = -9.0000 + 0.0000i >> s/t ans = 0.5000 0.8660i Οι υπολογισμοί που ακολουθούν, περιλαμβάνουν πίνακες με μιγαδικά στοιχεία: >> A = [1 2; 3 4] + i*[1 2; 3 4] A = 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i >> B = abs(a) B = 1.4142 2.8284 4.2426 5.6569 >> C = A*A' C = 10 22 22 50 >> D = A'*A D =