Εισαγωγή στο εργαλείο επεξεργασίας αριθµητικών δεδοµένων Octave

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Εισαγωγή στο εργαλείο επεξεργασίας αριθµητικών δεδοµένων Octave"

Transcript

1 Εισαγωγή στο εργαλείο επεξεργασίας αριθµητικών δεδοµένων Octave Απόστολος Π. Λερός & Αντώνιος Σ. Ανδρεάτος Αθήνα, Μάϊος 2010 Εισαγωγή στο OCTAVE Σελ. 1 από 99

2 Εισαγωγή στο εργαλείο επεξεργασίας αριθµητικών δεδοµένων Octave Απόστολος Π. Λερός ΤΕΙ Χαλκίδας, Τμήμα Αυτοματισμού και Σχολή Ικάρων Αντώνιος Σ. Ανδρεάτος Σχολή Ικάρων, Τομέας Πληροφορικής Το παρόν εκπονήθηκε για τις ανάγκες του Εργαστηρίου «Εισαγωγής στην Οκτάβα», που διοργανώθηκε στο πλαίσιο του 5 ου ΣYNE ΡΙΟΥ ΕΛ/ΛΑΚ, που έλαβε χώρα στην Αθήνα (ΕΜΠ, Μάϊος 2010). Σημείωση πνευματικών δικαιωμάτων Το υλικό αυτών των σημειώσεων προήλθε ως επί το πλείστον από την παρατιθέμενη βιβλιογραφία. Ως εκ τούτου, το copyright των δανεικών κειμένων ανήκει κατά κύριο λόγο στους αρχικούς συγγραφείς τους. Τα υπόλοιπα διανέμονται υπό την άδεια Creative Commons BY-NC-ND. Επιμέλεια κειμένου: Ανδριάνα Μυκονιάτη andriana.mykoniati@gmail.com Αθήνα, Μάϊος 2010 Εισαγωγή στο OCTAVE Σελ. 2 από 99

3 ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ Σελ. 1. ΕΙΣΑΓΩΓΗ ΣΤΟ OCTAVE Τι είναι το OCTAVE Τι δεν είναι το OCTAVE Ποιοι χρησιµοποιούν το OCTAVE; Γιατί δεν γίνεται χρήση µιας κανονικής υψηλού επιπέδου γλώσσας πχ. C++; ΑΠΛΟΙ ΥΠΟΛΟΓΙΣΜΟΙ Έναρξη του OCTAVE (Starting OCTAVE) Το OCTAVE ως αριθµοµηχανή (OCTAVE as calculator) Ενσωµατωµένες συναρτήσεις (Built-in functions) Το περιβάλλον του OCTAVE (Environment of OCTAVE) Ονοµαζόµενες µεταβλητές (Named variables) Αριθµοί και διαµόρφωση (Numbers and formatting) Παρουσίαση αριθµών και ακρίβεια (Number representation and accuracy) Φόρτωση και αποθήκευση δεδοµένων (Loading and saving data) Επανάληψη προηγούµενων εντολών (Repeating previous commands) Λήψη Βοήθειας (Getting help) Ακυρώνοντας µιαν εντολή (Cancelling a command) Το ερωτηµατικό και κρύψιµο απαντήσεων (Semicolon and hiding answers) Πίνακες και διανύσµατα (Arrays and Vectors) ηµιουργία διανυσµάτων (Building vectors) Ο συµβολισµός της άνω-κάτω τελείας (The colon notation) Εµφάνιση µεγάλων διανυσµάτων και πινάκων (Displaying large vectors and matrices) Συναρτήσεις δηµιουργίας διανυσµάτων (Vector creation functions) Εξαγωγή στοιχείων από διάνυσµα (Extracting elements from a vector) Μαθηµατικά διανυσµάτων (Vector maths) Σχεδιαγραφώντας γραφήµατα (Plotting graphs) Βελτιώνοντας την παρουσίαση (Improving the presentation) Πολλαπλά γραφήµατα (Multiple graphs) Πολλαπλά σχεδιαγράµµατα (Multiple figures) Χειρονακτική κλίµακα (Manual scaling) Αποθήκευση και εκτύπωση σχηµάτων (Saving and printing figures) OCTAVE Προγραµµατισµός Ι: Αρχεία Script (Octave programming I: Script files) ηµιουργία και επεξεργασία ενός script (Creating and editing a script) Τρέξιµο και εκσφαλµάτωση των scripts (Running and debugging scripts) Περιεχόµενο των scripts (Remembering previous scripts) Εκφράσεις ελέγχου (Control statements) if...else selection switch selection for loops while loops Η έκφραση do-until Οι εκφράσεις break και continue Ορθότητα και ακρίβεια (Accuracy and precision) Προγραµµατισµός ΙΙ: Συναρτήσεις (programming ΙI: Functions) Παράδειγµα 1: Ηµίτονο σε βαθµούς (Example 1: Sine in degrees) ηµιουργία και χρήση συναρτήσεων (Creating and using functions) Παράδειγµα 2: Μοναδιαίο βήµα (Example 2: Unit step) Πίνακες και διανύσµατα (Matrices and vectors) Πολλαπλασιασµός πινάκων (Matrix multiplication) Ο Τελεστής µετάθεσης (The transpose operator) Συναρτήσεις που δηµιουργούν πίνακες (Matrix creation functions) ηµιουργώντας σύνθετους πίνακες (Building composite matrices) Πίνακες σαν διατάξεις στοιχείων (Matrices as tables) Εξαγωγή τµηµάτων από πίνακες (Extracting bits of matrices) Βασικές συναρτήσεις πινάκων (Basic matrix functions) Λύνοντας την εξίσωση Ax = b (Solving Ax = b) Λύση όταν Α έχει αντίστροφο (Solution when A is invertible) Γκαουσιανή απαλοιφή και LU παραγοντοποίηση (Gaussian elimination and LU factorization) ιαίρεση πινάκων και ο τελεστής καθέτου γραµµής (Matrix division and the slash operator) Ιδιόµορφοι πίνακες και τάξη (Singular matrices and rank) Κακή κατάσταση (Ill-conditioning) Υπερπροσδιορισµένα συστήµατα: Ελάχιστα τετράγωνα (Over-determined systems: Least squares) Εισαγωγή στο OCTAVE Σελ. 3 από 99

4 11.7 Παράδειγµα: Τριγωνοποίηση (Example: Triangulation) Περισσότερα για τα γραφήµατα (More graphs) Θέτοντας µερικά γραφήµατα σε ένα παράθυρο (Putting several graphs in one window) Τρισδιάστατα σχεδιαγράµµατα (3D plots) Αλλάζοντας την οπτική γωνία (Changing the viewpoint) Σχεδιαγράφοντας επιφάνειες (Plotting surfaces) Εικόνες και κινηµατογραφική ταινία (Images and Movies) Ιδιοδιανύσµατα και Αποσύνθεση ιδιόµορφων τιµών (Eigenvectors and the Singular Value Decomposition) Η συνάρτηση eig (The eig function) Αποσύνθεση ιδιόµορφων τιµών (The Singular Value Decomposition) Προσέγγιση πινάκων: Αλλαγή τάξης (Approximating matrices: Changing rank) Η svd εντολή (The svd function) Η εντολή svd (Economy SVD) Μιγαδικοί αριθµοί (Complex numbers) Σχεδιαγράφοντας µιγαδικούς αριθµούς (Plotting complex numbers) Βρίσκοντας ρίζες πολυωνύµων (Finding roots of polynomials) Χειρισµοί πολυωνύµων (Polynomial manipulation) Υπολογισµός ριζών (Finding Roots) Η συνάρτηση compan (c) Γινόµενο και διαίρεση πολυωνύµων Παράγωγος ενός πολυωνύµου Χαρακτηριστικό πολυώνυµο ενός τετραγωνικού πίνακα Προσαρµογή δεδοµένων (curve fitting) OCTAVE - Εφαρµογές στα Συστήµατα Αυτοµάτου Ελέγχου Ελεύθερη απόκριση συστήµατος Κρουστική απόκριση συστήµατος Βηµατική απόκριση συστήµατος Σχεδιασµός ελεγκτή γραµµικού ρυθµιστή Εφαρµογές του OCTAVE στη Ψηφιακή Επεξεργασία Σήµατος Συνέλιξη και φιλτράρισµα (Convolution and Filtering) Φίλτρα και συναρτήσεις µεταφοράς (Filters and Transfer Functions) Συνάρτηση filter (Function filter) Κρουστική Απόκριση (Impulse Response) ιακριτός µετασχηµατισµός Fourier (Discrete Fourier Transform) Επεξεργασία εικόνας µε την Οκτάβα Εργαλειοθήκη επεξεργασίας εικόνας «image» Εισαγωγή και προβολή εικόνων Μετατροπές εικόνων Επεξεργασία γκρί εικόνας Φιλτράρισµα εικόνας µε κώδικα Εργαστηριακές Ασκήσεις Αποτίµηση συναρτήσεων y = f(x) και χειρισµός διανυσµάτων-πινάκων ιαγράµµατα (plots) Άλλες ποικίλες εντολές (Miscellaneous commands) Βιβλιογραφία (References) Σηµείωση: Για διευκόλυνση του χρήστη, ο κώδικας παρέχεται µέσα σε πλαίσια σαν αυτό. Ο χρήστης µπορεί να αντιγράψει τον κώδικα και να τον επικολλήσει στο τερµατικό. Χρειάζεται προσοχή µήπως πρέπει να µετατραπούν οι απόστροφοι από πλάγιες σε όρθιες. Εισαγωγή στο OCTAVE Σελ. 4 από 99

5 1. ΕΙΣΑΓΩΓΗ ΣΤΟ OCTAVE 1.1 Τι είναι το OCTAVE Το OCTAVE είναι ένα αλληλεπιδραστικό λογισµικό ανοιχτού κώδικα για αριθµητικούς υπολογισµούς και γραφικά. Ειδικότερα έχει σχεδιαστεί για υπολογισµούς πινάκων όπως επίλυση ταυτόχρονων εξισώσεων, υπολογισµό ιδιοδιανυσµάτων, ιδιοτιµών κλπ. Σε πολλά πραγµατικά προβλήµατα µηχανικών τα δεδοµένα εκφράζονται σαν πίνακες και διανύσµατα και έτσι αυτά άπτονται σε λύσεις αυτού του τύπου. Επιπρόσθετα, το OCTAVE µπορεί να εµφανίσει τα δεδοµένα σε µια ποικιλία από διαφορετικούς τρόπους και έχει τη δική του γλώσσα προγραµµατισµού που επιτρέπει στο σύστηµα να επεκταθεί. Μπορεί να θεωρηθεί σαν µια ισχυρή, προγραµµατιζόµενη γραφική αριθµοµηχανή. Το OCTAVE διευκολύνει στην επίλυση µεγάλου εύρους αριθµητικών προβληµάτων, επιτρέποντας έτσι την αφιέρωση περισσότερου χρόνου για πειραµατισµό και σκέψη γύρω από το ευρύτερο πρόβληµα. Το OCTAVE αρχικά δηµιουργήθηκε σαν ένα συνοδευτικό λογισµικό σε ένα βιβλίο προπτυχιακού µαθήµατος για σχεδιασµό χηµικού αντιδραστήρα. Σήµερα αναπτύσσεται υπό την επίβλεψη του Dr. John W. Eaton. ιατίθεται µε την άδεια GNU General Public License. Η χρησιµότητα του OCTAVE αυξάνεται καθώς είναι συντακτικά συµβατό µε το MATLAB που συχνά χρησιµοποιείται στη βιοµηχανία και στα πανεπιστήµια. Το OCTAVE µπορεί να αποκτηθεί από τη διεύθυνση Τι δεν είναι το OCTAVE Το OCTAVE είναι σχεδιασµένο για την αριθµητική επίλυση µαθηµατικών προβληµάτων, δηλαδή µε τον υπολογισµό τιµών στην µνήµη του ηλεκτρονικού υπολογιστή. Αυτό σηµαίνει ότι δεν µπορεί πάντοτε να δίνει µιαν ακριβή λύση σε ένα πρόβληµα και δεν πρέπει να συγχέεται µε προγράµµατα όπως Mathematica ή Maple, που δίνουν συµβολικές λύσεις µε το να κάνουν αλγεβρικούς χειρισµούς. Αυτό δεν το κάνει καλύτερο ούτε χειρότερο - χρησιµοποιείται για διαφορετικούς σκοπούς. Τα περισσότερα πραγµατικά µαθηµατικά προβλήµατα (ιδιαίτερα µηχανικών επιστηµών) δεν έχουν ξεκάθαρες συµβολικές λύσεις. 1.3 Ποιοι χρησιµοποιούν το OCTAVE; Το OCTAVE και το MATLAB το χρησιµοποιούν ευρέως οι µηχανικοί και οι επιστήµονες, στα πανεπιστήµια, στα ερευνητικά κέντρα και στην βιοµηχανία, για να κάνουν αριθµητικούς υπολογισµούς και για ανάπτυξη και δοκιµές µαθηµατικών αλγορίθµων. Καθίσταται πολύ εύκολο να γραφούν µαθηµατικά προγράµµατα πολύ γρήγορα και να επεξεργαστούν δεδοµένα µε ποικίλους τρόπους. 1.4 Γιατί δεν γίνεται χρήση µιας κανονικής υψηλού επιπέδου γλώσσας πχ. C++; Η C++ και άλλες τυπικές γλώσσες προγραµµατισµού είναι συνήθως σχεδιασµένες για την ανάπτυξη λογισµικών γενικής χρήσης. Ωστόσο, οι λύσεις σε µαθηµατικά προβλήµατα απαιτούν χρόνο να προγραµµατιστούν χρησιµοποιώντας την C++ και η γλώσσα από τη φύση της δεν υποστηρίζει αρκετά µαθηµατικά σκεπτικά ή γραφικά. Το OCTAVE είναι ειδικά σχεδιασµένο για την επίλυση τέτοιων προβληµάτων να κάνει αριθµητικούς υπολογισµούς και να δεικνύει τα αποτελέσµατα Εισαγωγή στο OCTAVE Σελ. 5 από 99

6 γραφικά. Ακόµη και προγραµµατιστές που τελικά γράφουν λογισµικά σε γλώσσες όπως C++ µερικές φορές αρχίζουν µε το να πρωτοτυπούν τα όποια µαθηµατικά τµήµατά του χρησιµοποιώντας το OCTAVE, καθώς αυτό τους επιτρέπει να δοκιµάζουν τους αλγόριθµους τους γρήγορα. 2. ΑΠΛΟΙ ΥΠΟΛΟΓΙΣΜΟΙ 2.1 Έναρξη του OCTAVE (Starting OCTAVE) Στο Λίνουξ η εγκατάσταση της Οκτάβας γίνεται εύκολα µέσω Synaptics. Μετά την εγκατάσταση, η πρόσβαση στο τερµατικό της Οκτάβας γίνεται από το µενόύ: Applications > Programming [ή Science] > GNU Octave. Εµφανίζεται τότε ένα παράθυρο σαν το παρακάτω (στο οποίο φαίνεται η τρέχουσα έκδοση, εδώ είναι η 3.0.5): Σε περιβάλλον windows, µετά την εγκατάσταση του OCTAVE δηµιουργείται το εξής εικονίδιο στην Επιφάνεια Εργασίας:. Εάν ήδη δεν έχετε το OCTAVE να τρέχει, ενεργοποιείστε το από το S t a r t P r o g r a m s O c t a v e ή κάνοντας κλικ στο εικονίδιό του. Μετά από λίγο εµφανίζεται ένα λογότυπο σε ένα νέο παράθυρο και ανάλογα µε την έκδοση που έχει εγκατασταθεί θα δεικνύει τα εξής: Εισαγωγή στο OCTAVE Σελ. 6 από 99

7 Το παραπάνω παράθυρο είναι το περιβάλλον του OCTAVE. Το σύµβολο > είναι η προτροπή του OCTAVE που µας ρωτά να εισάγουµε µια εντολή. Εάν θέλουµε να εξέλθουµε από το OCTAVE σε οποιοδήποτε σηµείο, εισάγουµε στην προτροπή την εντολή quit ή exit. 2.2 Το OCTAVE ως αριθµοµηχανή (OCTAVE as calculator) Ο πιο απλός τρόπος χρήσης του OCTAVE είναι να εισάγουµε στην προτροπή µαθηµατικές εντολές, όπως σε µια κανονική αριθµοµηχανή. Όλες οι σύνηθες αριθµητικές εκφράσεις αναγνωρίζονται. Για παράδειγµα, στην προτροπή εισάγουµε: 1+2 και πατώντας το πλήκτρο ENTER το OCTAVE ανταποκρίνεται δίνοντάς µας την απάντηση: ans = 3 Οι βασικές αριθµητικές πράξεις είναι + - * /, και το ^ που χρησιµοποιείται για ύψωση σε δύναµη (πχ. 2^3=8). Οι παρενθέσεις () µπορούν επίσης να χρησιµοποιηθούν. Η σειρά προτεραιότητας είναι η σύνηθες, δηλαδή οι παρενθέσεις αποτιµούνται πρώτα, µετά οι δυνάµεις, µετά οι πολλαπλασιασµοί και διαιρέσεις, και τελικά οι προσθέσεις και αφαιρέσεις. 2.3 Ενσωµατωµένες συναρτήσεις (Built-in functions) Πέρα από τις βασικές αριθµητικές πράξεις, το OCTAVE παρέχει όλες τις σύνηθες µαθηµατικές συναρτήσεις. Μια συλλογή από αυτές παρουσιάζεται στον παρακάτω Πίνακα 1. Πίνακας 1: Βασικές µαθηµατικές συναρτήσεις cos sin Cosine of an angle (in radians) - Συνηµίτονο Sine of an angle (in radians) - Ηµίτονο Εισαγωγή στο OCTAVE Σελ. 7 από 99

8 Πίνακας 1: Βασικές µαθηµατικές συναρτήσεις tan exp log Tangent of an angle (in radians) - Εφαπτοµένη Exponential function (e x ) Εκθετική συνάρτηση Natural logarithm (log e, not log 10 ) Φυσικός λογάριθµος log 10 Logarithm to base 10 Λογάριθµος µε βάση 10 sinh cosh tanh acos acosh asin asinh atan atan2 atanh abs sign round Hyperbolic sine Υπερβολικό ηµίτονο Hyperbolic cosine Υπερβολικό συνηµίτονο Hyperbolic tangent Υπερβολική εφαπτοµένη Inverse cosine Αντίστροφο συνηµίτονο Inverse hyperbolic cosine Αντίστροφο υπερβολικό συνηµίτονο Inverse sine Αντίστροφο ηµίτονο Inverse hyperbolic sine Αντίστροφο υπερβολικό ηµίτονο Inverse tangent Αντίστροφη εφαπτοµένη Two-argument form of inverse tangent Inverse hyperbolic tangent Αντίστροφη υπερβολική εφαπτοµένη Absolute value Απόλυτη τιµή Sign of the number (-1 or +1) Πρόσηµο αριθµού Round to the nearest integer Στρογγυλοποίηση στον πλησιέστερο ακέραιο floor Round down (towards minus infinity) Στρογγυλοποίηση στο - ceil Round up (towards plus infinity) Στρογγυλοποίηση στο + fix Round towards zero Στρογγυλοποίηση στο 0 rem Remainder after integer division Υπόλοιπο διαίρεσης ακεραίων Αυτές οι συναρτήσεις επικαλούνται όπως και στην C++ µε το όνοµα της συνάρτησης και µετά τα ορίσµατα της συνάρτησης σε παρενθέσεις (). Για παράδειγµα 1 : exp(1) ans = Για µια µεγαλύτερη έκφραση, όπως για παράδειγµα τον υπολογισµό 2.5sin(15 o + ln(3.8 2 )), εισάγουµε: 2.5*sin(15*pi/180 + log(3.8^2)) 1 Τα ορίσµατα µιας συνάρτησης είναι οι τιµές που περνούν στη συνάρτηση και χρησιµοποιούνται για να υπολογιστεί η απόκρισή της. Σ αυτό το παράδειγµα το όρισµα είναι η τιµή «1», έτσι η εκθετική συνάρτηση exp υπολογίζει το εκθετικό του 1 και επιστρέφει την τιµή (δηλ. ε 1 =2.7183). Εισαγωγή στο OCTAVE Σελ. 8 από 99

9 ans = Εδώ υπάρχουν µερικά στοιχεία που χρήζουν επεξήγηση: Το αποκλειστικό σύµβολο του πολλαπλασιασµού πάντοτε χρειάζεται στις εξισώσεις, για παράδειγµα µεταξύ του 2.5 και sin. Οι τριγωνοµετρικές συναρτήσεις (για παράδειγµα cos) εργάζονται σε ακτίνια (radians). Ο παράγοντας π/180 µπορεί να χρησιµοποιηθεί για την µετατροπή των βαθµών σε ακτίνια. Το pi είναι ένα παράδειγµα µιας ονοµαζόµενης µεταβλητής. Η συνάρτηση του φυσικού λογάριθµου ονοµάζεται log και όχι ln. Χρησιµοποιώντας αυτές τις συναρτήσεις και τις σύνηθες µαθηµατικές πράξεις το OCTAVE µπορεί να κάνει όλα τα πράγµατα που κάνει µια κανονική αριθµοµηχανή. 3. Το περιβάλλον του OCTAVE (Environment of OCTAVE) Όπως µπορούµε να δούµε από τα µέχρι τώρα παραδείγµατα, το OCTAVE έχει µια γραµµή-εντολών διεπαφή (command-line interface) οι εντολές εισάγονται µία κάθε φορά στην προτροπή και µετά πατάµε το πλήκτρο ENTER. Το OCTAVE είναι διερµηνευµένη γλώσσα (interpreted language) που σηµαίνει ότι κάθε εντολή µετατρέπεται σε κώδικα µηχανής µετά την εισαγωγή της. Σε µεταγλωττισµένες γλώσσες (compiled languages) όπως η C++, ολόκληρο το πρόγραµµα εισάγεται πρώτα σε έναν κειµενογράφο, µετά αυτό ολόκληρο µετατρέπεται σε κώδικα µηχανής χρησιµοποιώντας έναν µεταγλωττιστή, και στη συνέχεια ολόκληρο το πρόγραµµα εκτελείται. Τα µεταγλωττισµένα προγράµµατα τρέχουν πιο γρήγορα από τα διερµηνευµένα, αλλά χρειάζονται περισσότερο χρόνο για να αναπτυχθούν. Είναι πιο γρήγορο να δοκιµαστούν τα πράγµατα µε το OCTAVE, ακόµη κι αν οι υπολογισµοί παίρνουν λίγο περισσότερο χρόνο. 3.1 Ονοµαζόµενες µεταβλητές (Named variables) Σε κάποιο σπουδαίο υπολογισµό θα χρειαστούµε να αποθηκεύσουµε τις απαντήσεις ή να ξαναχρησιµοποιήσουµε τις τιµές όπως ακριβώς χρησιµοποιούµε την µνήµη της αριθµοµηχανής. Το OCTAVE µας επιτρέπει να ορίσουµε και να χρησιµοποιήσουµε ονοµαζόµενες µεταβλητές. Για παράδειγµα, ας θεωρήσουµε το παράδειγµα των βαθµών της προηγούµενης ενότητας. Μπορούµε να ορίσουµε µια µεταβλητή deg για να βαστάει τον παράγοντα µετατροπής, γράφοντας: deg = pi/180 deg = Επισηµαίνεται ότι ο τύπος της µεταβλητής δεν χρειάζεται να οριστεί, σε αντίθεση µε τις περισσότερες υψηλού επιπέδου γλώσσες προγραµµατισµού πχ. C++. Όλες οι µεταβλητές στο OCTAVE είναι µετακινούµενης υποδιαστολής αριθµοί. Χρησιµοποιώντας αυτή τη µεταβλητή µπορούµε να γράψουµε την προηγούµενη έκφραση ως εξής: Εισαγωγή στο OCTAVE Σελ. 9 από 99

10 2.5*sin(15* deg + log(3.8^2)) ans = η οποία δεν είναι πιο εύκολη να γραφεί, αλλά είναι πιο εύκολη να διαβαστεί και υπάρχει µικρότερη πιθανότητα να κάνουµε κάποιο επιπόλαιο λάθος όταν εισάγουµε του αριθµούς. Προσπαθείτε να ορίζετε και να χρησιµοποιείτε µεταβλητές για όλους τους κοινούς αριθµούς ή τα αποτελέσµατα όταν γράφετε προγράµµατα. Έχουµε ήδη δει ένα άλλο παράδειγµα µιας µεταβλητής στο OCTAVE. Κάθε φορά που εισάγουµε µια έκφραση στην οποία δεν έχουµε ορίσει µεταβλητή, όπως στο πιο πρόσφατο παράδειγµα, το OCTAVE ορίζει για την απάντηση την µεταβλητή ans. Αυτή µετά µπορεί να χρησιµοποιηθεί ακριβώς κατά τον ίδιο τρόπο: new = 5*ans new = Επισηµαίνεται ότι αυτή δεν είναι η απάντηση που προκύπτει απλά εκτελώντας τον πολλαπλασιασµό 5 x Αν και το OCTAVE δείχνει αριθµούς µε µερικά µόνο δεκαδικά ψηφία (συνήθως πέντε) 2, τους αποθηκεύει εσωτερικά στις µεταβλητές µε µεγαλύτερη ακρίβεια και έτσι η δεδοµένη απάντηση είναι πιο ακριβής 3. Σε όλους τους αριθµητικούς υπολογισµούς, το σφάλµα στρογγυλοποίησης είναι πολύ σπουδαίο και είναι ουσιώδες να µην εισάγουµε περισσότερα σφάλµατα από ότι ήδη υπάρχουν. Αυτό είναι ένας ακόµη σπουδαίος λόγος για αποθήκευση αριθµών σε µεταβλητές αντί να τους εισάγουµε κάθε φορά. Όταν ορίζουµε και χρησιµοποιούµε µεταβλητές, τα κεφλαία γράµµατα είναι διαφορετικά από τα πεζά: η µεταβλητή a είναι διαφορετική από την A. Υπάρχουν επίσης και µερικές µεταβλητές που είναι ήδη ορισµένες και χρησιµοποιούνται από το OCTAVE. Η µεταβλητή ans ήδη έχει αναφερθεί, όπως έχει η pi, και επιπρόσθετα i και j είναι επίσης ορισµένες σαν ρίζα -1 (βλ. παρακάτω ενότητα 14). Το OCTAVE δεν µας εµποδίζει να ορίσουµε αυτές τις µεταβλητές εκ νέου σε όποιες τιµές επιθυµούµε, αλλά κάνοντας κάτι τέτοιο ίσως να προκαλέσουµε σύγχυση στον εαυτό µας και στο OCTAVE. Παροµοίως, δίνοντας ονόµατα σε µεταβλητές σαν sin ή cos επιτρέπεται, αλλά δεν συνίσταται. 2 Το MATLAB συνήθως δεικνύει 4 ή πέντε δεκαδικά ψηφία. 3 Το OCTAVE αποθηκεύει όλους τους αριθµούς σε µορφή IEEE κινούµενης υποδιαστολής τύπου διπλής ακρίβειας (64-bit). Η τιµή ans εδώ στην πραγµατικότητα είναι (µε 15 δεκαδικά ψηφία). Εισαγωγή στο OCTAVE Σελ. 10 από 99

11 Εάν θέλουµε να δούµε την τιµή µιας µεταβλητής σε όποιο σηµείο, απλά εισάγουµε το όνοµά της και πατάµε το πλήκτρο ENTER. Εάν θέλουµε να δούµε τη λίστα από όλες τις ονοµαζόµενες συναρτήσεις και µεταβλητές 4 που έχουµε δηµιουργήσει ή χρησιµοποιήσει, εισάγουµε: who *** dynamically linked functions: dispatch *** currently compiled functions: rem *** local user variables: deg new Ανά περίπτωση θα θέλουµε να διαγράψουµε µεταβλητές από το χώρο εργασίας (workspace), ίσως για να εξοικονοµήσουµε µνήµη, ή διότι παίρνουµε συγκεχυµένα αποτελέσµατα χρησιµοποιώντας µια µεταβλητή και θέλουµε να αρχίσουµε εκ νέου από την αρχή ξανά. Η εντολή clear θα διαγράψει όλες τις µεταβλητές, ή προσδιορίζοντας: clear name θα διαγράψει ακριβώς την µεταβλητή µε το όνοµα name. 3.2 Αριθµοί και διαµόρφωση (Numbers and formatting) Έχουµε δει ότι το OCTAVE συνήθως δεικνύει αριθµούς σε πέντε δεκαδικά ψηφία. Η εντολή format µας επιτρέπει να επιλέξουµε τον τρόπο που θα δεικνύονται οι αριθµοί. Ειδικότερα, εισάγοντας: format long θα κάνει το OCTAVE να δείξει αριθµούς σε δεκαπέντε (15) και περισσότερα δεκαδικά ψηφία, που είναι η ακρίβεια των υπολογισµών του. Εάν εισάγουµε την εντολή help format µπορούµε να πάρουµε µια πλήρη λίστα από επιλογές για αυτή την εντολή. Με την εντολή format long ενεργοποιηµένη, µπορούµε να δούµε την πιο ακριβή τιµή της µεταβλητής deg: deg deg = Η εντολή: format short 4 Κανονικά το MATLAB δείχνει µόνο τις µεταβλητές του χρήστη (δικές µας) και την ans. Εισαγωγή στο OCTAVE Σελ. 11 από 99

12 επιστρέφει το OCTAVE στην ένδειξη της ακρίβειας σε κανονική µορφή. Το OCTAVE δεικνύει πολύ µεγάλους ή µικρούς αριθµούς χρησιµοποιώντας τον εκθετικό συµβολισµό (exponential notation). Για παράδειγµα: = x 10 4, ο οποίος δεικνύεται από το OCTAVE σαν e+004. Μπορούµε επίσης να εισάγουµε αριθµούς στο OCTAVE χρησιµοποιώντας αυτή τη διαµόρφωση. Υπάρχουν επίσης και µερικοί άλλοι αριθµοί που αναγνωρίζονται και υπολογίζονται από το OCTAVE: Μιγαδικοί αριθµοί (Complex numbers): Πχ. 3+4i, αναγνωρίζεται πλήρως από το Octave, όπως σχολιάζεται περεταίρω στην ενότητα 14. Infinity (Inf): Το αποτέλεσµα διαίρεσης ενός αριθµού µε το µηδέν. Αυτή είναι µια έγκυρη απάντηση σε έναν υπολογισµό και µπορεί να ανατεθεί σε µια µεταβλητή ακριβώς όπως οποιοσδήποτε άλλος αριθµός. Not a Number (NaN): Το αποτέλεσµα µηδέν δια µηδέν και επίσης για µερικές άλλες πράξεις που δηµιουργούν απροσδιόριστα αποτελέσµατα. Ξανά, αυτός µπορεί να χρησιµοποιηθεί ακριβώς σαν οποιοδήποτε άλλο αριθµό (αν και τα αποτελέσµατα από οποιοδήποτε υπολογισµό που τον χρησιµοποιεί είναι πάντοτε NaN). 3.3 Παρουσίαση αριθµών και ακρίβεια (Number representation and accuracy) Οι αριθµοί στο OCTAVE, όπως και στους ηλεκτρονικούς υπολογιστές, αποθηκεύονται σε δυαδική αντί για δεκαδική µορφή. Στη δεκαδική µορφή (βάση 10), ο αριθµός σηµαίνει: = 1x x x x10-2 αλλά στη δυαδική µορφή (βάση 2) θα γραφεί ως εξής: = 1x2 3 +1x2 2 +0x2 1 +0x2 0 +0x2-1 +1x2-2 = Χρησιµοποιώντας τη δυαδική µορφή είναι ιδανική για τους ηλεκτρονικούς υπολογιστές καθώς αυτή είναι ακριβώς µια σειρά από ένα και µηδενικά η οποία µπορεί να αντιπροσωπευτεί µε το εάν ειδικά κυκλώµατα είναι ενεργοποιηµένα ή απενεργοποιηµένα. Ένα πρόβληµα µε το να αντιπροσωπεύουµε αριθµούς στον ηλεκτρονικό υπολογιστή είναι ότι κάθε αριθµός µπορεί να έχει πεπερασµένο αριθµό ψηφίων ή bit, που διατίθενται γι αυτόν και έτσι µπορεί µόνο να έχει πεπερασµένο αριθµό από ψηφία. Θεωρείστε το ακόλουθο παράδειγµα: ans = e-017 Το αποτέλεσµα είναι πολύ µικρό, αλλά όχι ακριβώς µηδέν, που είναι η σωστή απάντηση. Ο λόγος είναι ότι το 0.2 δεν µπορεί ακριβώς να αντιπροσωπευτεί σε δυαδική µορφή χρησιµοποιώντας ένα Εισαγωγή στο OCTAVE Σελ. 12 από 99

13 πεπερασµένο αριθµό από ψηφία (είναι ). Αυτή ακριβώς είναι και η αιτία που το 1/3 δεν µπορεί ακριβώς να γραφεί σε βάση 10 αριθµό. Το OCTAVE (και όλα τα υπόλοιπα προγράµµατα ηλεκτρονικών υπολογιστών) αντιπροσωπεύουν αυτούς τους αριθµούς µε τον όσο το δυνατόν καλύτερη προσέγγιση µπορούν, αλλά επαναληπτικές χρήσεις αυτών των προσεγγίσεων, όπως είδαµε εδώ, µπορεί να δηµιουργήσουν προβλήµατα. Γι αυτό το λόγο πρέπει να σκεφτούµε πολύ προσεκτικά πριν ελέγξουµε ότι ένας αριθµός είναι ακριβώς ίσος µε κάποιον άλλον. Είναι συνήθως καλό να ελέγξουµε ότι είναι ίσος µέσα σε κάποια ανοχή. Θα επιστρέψουµε σ αυτό το πρόβληµα κατά τη διάρκεια του εγχειριδίου. 3.4 Φόρτωση και αποθήκευση δεδοµένων (Loading and saving data) Όταν εξερχόµαστε από το OCTAVE, χάνουµε όλες τις µεταβλητές που έχουµε δηµιουργήσει. Εάν για κάποιο λόγο χρειάζεται να τερµατίσουµε το OCTAVE, µπορούµε να αποθηκεύσουµε την τρέχουσα εργασία έτσι ώστε να την φορτώσουµε ξανά αργότερα. Εάν εισάγουµε: save anyname τότε ολόκληρος ο χώρος εργασίας (workspace) θα αποθηκευτεί σε ένα αρχείο ονοµαζόµενο anyname.mat στο τρέχων κατάλογο (σηµειώνεται ότι το OCTAVE αυτόµατα προσθέτει.mat στο τέλος του ονόµατος που δώσαµε). Μπορούµε µετά να τερµατίσουµε το OCTAVE και όταν θέλουµε να κάνουµε επανεκκίνηση τότε εισάγουµε: load anyname που θα επαναφέρει τον προηγούµενο χώρο εργασίας και µπορούµε να συνεχίσουµε από εκεί που σταµατήσαµε. Μπορούµε επίσης να φορτώσουµε και να αποθηκεύσουµε συγκεκριµένες µεταβλητές εισάγοντας: save filename var1 var2 Για παράδειγµα, εάν θέλαµε να αποθηκεύσουµε την µεταβλητή deg, για να µην την υπολογίζουµε από την αρχή (που δεν είναι και πολύ δύσκολο σε αυτή την περίπτωση!), θα µπορούσαµε να εισάγουµε την εντολή: save degconv deg Αυτή η εντολή θα αποθηκεύσει την µεταβλητή σε ένα αρχείο ονοµαζόµενο degconv.mat. Μπορούµε να το φορτώσουµε ξανά µε το να εισάγουµε: load degconv Εισαγωγή στο OCTAVE Σελ. 13 από 99

14 Το OCTAVE µπορεί να φορτώσει επίσης δεδοµένα από αρχεία κειµένου (text), που είναι ιδιαίτερα χρήσιµο εάν θέλουµε να δηµιουργήσουµε γραφήµατα ή να εκτελέσουµε υπολογισµούς σε µετρήσεις από κάποια άλλη πηγή. Το αρχείο κειµένου πρέπει να περιέχει γραµµές από αριθµούς που είναι διαχωρισµένοι µε κενό. 3.5 Επανάληψη προηγούµενων εντολών (Repeating previous commands) Το OCTAVE βαστάει όλες τις προηγούµενες εντολές που έχουµε εισάγει και µπορούµε να χρησιµοποιήσουµε τα πλήκτρα και για να επιθεωρήσουµε τις προηγούµενες εντολές (µε την πιο πρόσφατη πρώτα). Όταν µια εντολή έχει ανακληθεί, µπορούµε να την τροποποιήσουµε πριν την χρησιµοποιήσουµε ξανά. Μπορούµε να χρησιµοποιήσοµε τα πλήκτρα και για να µετακινήσουµε τον δροµέα µέσα στην γραµµή και να εισάγουµε νέους χαρακτήρες ή να διαγράψουµε µε το πλήκτρο Delete ή το Backspace και να αλλάξουµε το περιεχόµενο. Αυτό είναι ιδιαίτερα χρήσιµο εάν µόλις έχουµε γράψει µια µακριά γραµµή και µετά το OCTAVE έχει βρει σφάλµατα σε αυτήν. Χρησιµοποιώντας τα πλήκτρα µε τα βέλη, µπορούµε να διορθώσουµε το σφάλµα και να δοκιµάσουµε ξανά. 3.6 Λήψη Βοήθειας (Getting help) Εάν δεν είµαστε σίγουροι τι κάνει κάποια ειδική εντολή του OCTAVE, ή θέλουµε να βρούµε µια ειδική συνάρτηση, το OCTAVE περιέχει ένα ολοκληρωµένο σύστηµα βοήθειας. Ο βασικός τρόπος χρήσης του συστήµατος της βοήθειας είναι να εισάγουµε στην προτροπή: help commandname Για παράδειγµα, help sqrt sqrt is a built-in function -- Mapping Function: sqrt (X) Compute the square root of each element of X. If X is negative, a complex result is returned. To compute the matrix square root, see *note Linear Algebra::. See also: realsqrtoverload function Additional help for built-in functions and operators is available in the on-line version of the manual. Use the command doc <topic> to search the manual index. Help and information about Octave is also available on the WWW at and via the help@octave.org mailing list. 3.7 Ακυρώνοντας µιαν εντολή (Cancelling a command) Εάν δούµε ότι κάποια εντολή που εισάγαµε παίρνει πολύ χρόνο να εκτελεστεί, είναι πολύ χρήσιµο να γνωρίζουµε πώς να την σταµατήσουµε. Μπορούµε να ακυρώσουµε την τρέχουσα εντολή εισάγοντας: Εισαγωγή στο OCTAVE Σελ. 14 από 99

15 Ctrl-C που πρέπει (ίσως µετά από λίγο) να µας επιστρέψει στην εντολή της προτροπής. 3.8 Το ερωτηµατικό και κρύψιµο απαντήσεων (Semicolon and hiding answers) Τα ελληνικά ερωτηµατικά (semicolons) ; συχνά χρησιµοποιούνται στις γλώσσες προγραµµατισµού για να διαχωρίζουν συναρτήσεις και να δείχνουν το τέλος της γραµµής, όπως στην C++ που προστίθενται σχεδόν σε κάθε γραµµή. Τα ερωτηµατικά δεν απαιτούνται στο OCTAVE αλλά εξυπηρετούν ένα χρήσιµο σκοπό. Εάν εισάγουµε µια εντολή όπως ήδη έχουµε κάνει µέχρι τώρα, χωρίς το ερωτηµατικό στο τέλος, το OCTAVE πάντοτε δεικνύει το αποτέλεσµα της έκφρασης. Αλλά, εάν τελειώσουµε την εντολή γραµµής µε ερωτηµατικό, αυτό αποτρέπει το OCTAVE να δεικνύει το αποτέλεσµα. Αυτό είναι ιδιαίτερα χρήσιµο εάν δεν θέλουµε να γνωρίζουµε το αποτέλεσµα αµέσως ή όταν το αποτέλεσµα είναι µια µεγάλη λίστα από αριθµούς. 4. Πίνακες και διανύσµατα (Arrays and Vectors) Αρκετά προβλήµατα στα µαθηµατικά επιλύνονται µε ακολουθίες αριθµών. Σε αρκετές γλώσσες προγραµµατισµού αυτές οι ακολουθίες αριθµών ονοµάζονται πίνακες (arrays). Στο OCTAVE οι πίνακες είναι απλά παραδείγµατα από διανύσµατα. Τα διανύσµατα συνήθως χρησιµοποιούνται να αντιπροσωπεύουν τις τρείς διαστάσεις της θέσης ή της ταχύτητας, αλλά ένα διάνυσµα στην πραγµατικότητα είναι µια λίστα από αριθµούς, και έτσι ακριβώς το OCTAVE τα µεταχειρίζεται. Στην πραγµατικότητα, τα διανύσµατα είναι µια ειδική περίπτωση πινάκων (που είναι ένα πλέγµα δύο διαστάσεων από αριθµούς). Ένα διάνυσµα είναι ένας πίνακας µε µια µόνο γραµµή ή µε µια µόνο... στήλη. Θα δούµε αργότερα ότι συχνά είναι σπουδαίο να διαχωρίζουµε τα διανύσµατα γραµµής ( ) από τα διανύσµατα στήλης ( M ). 4.1 ηµιουργία διανυσµάτων (Building vectors) Υπάρχουν πολλοί τρόποι για να ορίσουµε διανύσµατα ή πίνακες. Συνήθως ο πιο εύκολος τρόπος είναι να γράψουµε το διάνυσµα µέσα σε αγκύλες []. Για παράδειγµα: a = [1 2 3] a = b = [3,2,1] b = c = [3;5;12] Εισαγωγή στο OCTAVE Σελ. 15 από 99

16 c = Μια λίστα αριθµών διαχωρισµένων µε κενά ή κόµµατα µέσα σε τετραγωνικές παρενθέσεις, ορίζει ένα διάνυσµα γραµµής. Αριθµοί διαχωρισµένοι µε ερωτηµατικά (semicolons) ή πατώντας το ENTER µετά από κάθε αριθµό ορίζει το διάνυσµα στήλης. Μπορούµε επίσης να δηµιουργήσουµε ένα νέο διάνυσµα από ένα υπάρχον µε να το συµπεριλάβουµε στον ορισµό του. Για παράδειγµα: a = [1 2 3] a = d = [a 6] d = Ο συµβολισµός της άνω-κάτω τελείας (The colon notation) Ένας χρήσιµος σύντοµος τρόπος για να δηµιουργήσουµε ένα διάνυσµα από αριθµούς µέτρησης είναι να χρησιµοποιήσουµε τις άνω-κάτω τελείες :, όπως στο παράδειγµα: e = 2:7 e = Το σύµβολο µε τις άνω-κάτω τελείες λέει στο OCTAVE να δηµιουργήσει ένα διάνυσµα από αριθµούς αρχίζοντας από τον πρώτο αριθµό, µετρώντας προς τα πάνω (και συµπεριλαµβάνοντας) τον δεύτερο αριθµό. Ένας τρίτος αριθµός µπορεί επίσης να συµπεριληφθεί µεταξύ των δύο, κάνοντας την εντολή a:b:c. Ο µεσαίος αριθµός τότε προσδιορίζει το βήµα µεταξύ των στοιχείων του διανύσµατος: e = 2:0.3:4 e = Εισαγωγή στο OCTAVE Σελ. 16 από 99

17 Σηµείωση: Εάν το βήµα είναι τέτοιο που δεν µπορεί να φτάσει ακριβώς στον τελευταίο αριθµό, όπως σε αυτήν την περίπτωση, τότε το OCTAVE δηµιουργεί τους αριθµούς που δεν τον υπερβαίνουν. Το βήµα µπορεί επίσης να είναι αρνητικό, που σε αυτήν την περίπτωση θα µετρήσει προς τα κάτω στον τελευταίο αριθµό. 4.3 Εµφάνιση µεγάλων διανυσµάτων και πινάκων (Displaying large vectors and matrices) Εάν ζητήσουµε από το OCTAVE να εµφανίσει έναν πίνακα ή διάνυσµα που δεν χωράει σε µια µονή οθόνη, τότε θα παρουσιάσει τις τιµές ανά σελίδα κάθε φορά. οκιµάστε: v = 1:1000 Πατήστε το διάστηµα (spacebar) για να δείτε την επόµενη σελίδα από τιµές και χρησιµοποιείστε το q πλήκτρο να τερµατίσετε την εµφάνιση και να επιστρέψετε στην εντολή προτροπής του OCTAVE. Μπορείτε επίσης να χρησιµοποιήσετε το b πλήκτρο για να κυλίσετε προς τα πίσω πάνω στις τιµές που ήδη εµφανίστηκαν. Μερικές φορές είναι βολικό να απενεργοποιήσουµε τη δυνατότητα σελιδοποίησης, για παράδειγµα όταν εµφανίζονται ενδιάµεσες τιµές κατά τη διάρκεια µακρών υπολογισµών που απαιτούν πολύ χρόνο. Αυτό µπορεί να επιτευχθεί µε τη χρήση της εντολής: more off Όπως αναµενόταν, η σελιδοποίηση µπορεί να ενεργοποιηθεί ξανά µε τη χρήση της εντολής: more on 4.4 Συναρτήσεις δηµιουργίας διανυσµάτων (Vector creation functions) Το OCTAVE επίσης παρέχει ένα σύνολο συναρτήσεων για τη δηµιουργία διανυσµάτων. Αυτές οι συναρτήσεις δεικνύονται στον παρακάτω Πίνακα 2. Πίνακας 2: Συναρτήσεις δηµιουργίας διανυσµάτων zeros(m,n) ones(m,n) linspace(x1, x2,n) ηµιουργεί έναν πίνακα όπου κάθε στοιχείο του είναι µηδέν. Για διάνυσµα γραµµής µεγέθους n, θέτουµε M = 1, N = n. (Creates a matrix where every element is zero. For a row vector of size n, set M = 1, N = n). ηµιουργεί έναν πίνακα όπου κάθε στοιχείο του είναι ένα. Για διάνυσµα γραµµής µεγέθους n, θέτουµε M = 1, N = n. (Creates a matrix where every element is one. For a row vector of size n, set M = 1, N = n). ηµιουργεί ένα διάνυσµα από Ν στοιχεία, ισοµερή καταµερισµένα µεταξύ x1 και x2. (Creates a vector of N elements, evenly spaced between x1 and x2). Εισαγωγή στο OCTAVE Σελ. 17 από 99

18 Πίνακας 2: Συναρτήσεις δηµιουργίας διανυσµάτων logspace(x1, x2,n) ηµιουργεί ένα διάνυσµα από Ν στοιχεία, λογαριθµικά καταµερισµένα µεταξύ 10 x1 και 10 x2. (Creates a vector of N elements, logarithmically spaced between 10 x1 and 10 x2 ). Οι πρώτες δύο συναρτήσεις του πίνακα, zeros και ones, επίσης δουλεύουν και για πίνακες, και τα δύο συναρτησιακά ορίσµατα, Μ και Ν, προσδιορίζουν τον αριθµό των γραµµών και στηλών στον πίνακα αντίστοιχα. Ένα διάνυσµα γραµµής είναι ένας πίνακας που έχει µία γραµµή και τόσες στήλες όσο το µέγεθος του διανύσµατος. 4.5 Εξαγωγή στοιχείων από διάνυσµα (Extracting elements from a vector) Μεµονωµένα στοιχεία ενός διανύσµατος αναφέρονται χρησιµοποιώντας κανονικές παρενθέσεις () και αριθµούνται ξεκινώντας από ένα, όχι µηδέν όπως στην C++. Εάν ορίσουµε ένα διάνυσµα: a=[1:2:6-1 0] a = τότε µπορούµε να πάρουµε το τρίτο στοιχείο εισάγοντας: a(3) ans = 5 Ο συµβολισµός µε τις άνω-κάτω τελείες (colon) µπορεί επίσης να χρησιµοποιηθεί για να προσδιορίσει το εύρος αριθµών για να πάρουµε µερικά στοιχεία µε µια φορά: a(3:5) ans = a(1:2:5) ans = Εισαγωγή στο OCTAVE Σελ. 18 από 99

19 4.6 Μαθηµατικά διανυσµάτων (Vector maths) Αποθηκεύοντας µια λίστα αριθµών σε ένα διάνυσµα επιτρέπει στο OCTAVE να χρησιµοποιεί µερικά από τα ισχυρά του χαρακτηριστικά για να κάνει υπολογισµούς. Στην C++ εάν θέλαµε να κάνουµε την ίδια λειτουργία σε µια λίστα από αριθµούς, ας υποθέσουµε ότι θέλαµε να πολλαπλασιάσουµε κάθε στοιχείο επί 2, θα έπρεπε να χρησιµοποιήσουµε ένα for loop για να προσπελάσουµε κάθε στοιχείο. Αυτό µπορεί επίσης να γίνει και στο OCTAVE (βλ. ενότητα 7), αλλά είναι πολύ πιο εύκολο να κάνουµε χρήση τις λειτουργίες του OCTAVE για διανύσµατα. Ο πολλαπλασιασµός όλων των αριθµών ενός διανύσµατος επί τον ίδιο αριθµό είναι τόσο απλός όσο ο πολλαπλασιασµός ολοκλήρου του διανύσµατος επί τον αριθµό. Το επόµενο παράδειγµα χρησιµοποιεί το διάνυσµα που ορίστηκε προηγουµένως: a * 2 ans = Το ίδιο ισχύει και για τη διαίρεση. Μπορούµε επίσης να προσθέσουµε τον ίδιο αριθµό σε κάθε στοιχείο χρησιµοποιώντας τους τελεστές + ή -, αν και αυτό τυπικά δεν είναι συµβατό µαθηµατικά. Ο πολλαπλασιασµός δύο διανυσµάτων µαζί στο OCTAVE ακολουθεί τους κανόνες πολλαπλασιασµού πινάκων (βλ. ενότητα 9), που δεν κάνει στοιχείο προς στοιχείο πολλαπλασιασµό 5. Εάν θέλουµε να κάνουµε αυτό, το OCTAVE ορίζει τους τελεστές.* και./. Για παράδειγµα: a1 b1 ab 1 1 a 2 * b2 = a 2b2 a 3 b 3 a3b 3 Επισηµαίνεται η. µπροστά από κάθε σύµβολο, σηµαίνει ότι είναι µια στοιχείο-προςστοιχείο πράξη. Για παράδειγµα, µπορούµε να πολλαπλασιάσουµε κάθε στοιχείο του διανύσµατος a, που ορίστηκε προηγουµένως, µε διαφορετικό αριθµό: b = [ ] a.*b ans = Υπενθυµίζεται ότι τα µόνα διανυσµατικά γινόµενα που ορίζονται µαθηµατικά είναι το dot γινόµενο και το cross γινόµενο. Και τα δύο αντιπροσωπεύουν ιδιαίτερες πράξεις σε δύο διανύσµατα, καµία από τις οποίες απλά πολλαπλασιάζει τα στοιχεία µαζί και επιστρέφει ένα άλλο διάνυσµα. Εισαγωγή στο OCTAVE Σελ. 19 από 99

20 Ο στοιχείο-προς-στοιχείο τελεστής ύψωσης σε δύναµη (.^) είναι ιδιαίτερα χρήσιµος. Μπορεί να χρησιµοποιηθεί να υψώσουµε ένα διάνυσµα αριθµών σε κάποια δύναµη, ή να υψώσουµε έναν αριθµό σε διάφορες δυνάµεις, ανάλογα µε το πως τον χρησιµοποιούµε: b.^ 2 ans = ^ b ans = Το πρώτο παράδειγµα τετραγωνίζει κάθε στοιχείο του b. Το δεύτερο υψώνει τον αριθµό 2 σε κάθε από τις δυνάµεις που δίνονται στο b. Όλες οι στοιχείο-προς-στοιχείο εντολές (+, -,./,.*,.^) µπορούν να χρησιµοποιηθούν µεταξύ δύο διανυσµάτων, εάν αυτά είναι του ιδίου µεγέθους (διαστάσεων) και µορφής. ιαφορετικά αντίστοιχα στοιχεία δεν µπορεί να βρεθούν και δίνεται σφάλµα. Οι περισσότερες συναρτήσεις του OCTAVE επίσης γνωρίζουν τα των διανυσµάτων. Για παράδειγµα, για να δηµιουργήσουµε µια λίστα τιµών από ηµίτονα σε διαστήµατα 60 µοιρών, απλά χρειαζόµαστε να περάσουµε ένα διάνυσµα από γωνίες στη συνάρτηση ηµιτόνου: angles = [0:pi/3:2*pi] angles = y=sin(angles) y = Σχεδιαγραφώντας γραφήµατα (Plotting graphs) Το OCTAVE έχει ισχυρές διευκολύνσεις για σχεδιαγράµµατα γραφηµάτων µέσω ενός δευτέρου ανοιχτού-κώδικα προγράµµατος GNUPLOT 6, αλλά µερικές από τις επιλογές είναι περιορισµένες σε σύγκριση µε εκείνες του MATLAB. Η βασική εντολή είναι plot(x, y), όπου x και y είναι οι 6 Εισαγωγή στο OCTAVE Σελ. 20 από 99

21 συντεταγµένες. Εάν δοθεί µόνο ένα ζεύγος αριθµών τότε σχεδιαγραφεί ένα σηµείο, αλλά συνήθως περνάµε διανύσµατα και σχεδιαγραφεί όλα τα σηµεία που δίνονται µε τα δύο διανύσµατα, ενώνοντάς τα µε ευθείες γραµµές 7. Το ηµιτονικό γράφηµα που ορίστηκε προηγουµένως µπορεί να σχεδιαγραφεί εισάγοντας την εντολή: plot(angles, y) Ένα νέο παράθυρο πρέπει να ανοίξει, που θα δεικνύει το γράφηµα, που φαίνεται στο Σχήµα 1. Επισηµαίνεται ότι το OCTAVE αυτόµατα επιλέγει την κλίµακα και σχεδιαγραφεί τους άξονες. Σχήµα 1: Γράφηµα του y = sin(x), µε δειγµατοληψία κάθε 60 ο. Προς το παρόν το γράφηµα δεν µοιάζει ιδιαίτερα σαν παράσταση ηµιτόνου, διότι έχουµε µόνο πάρει τιµές κάθε 60 µοίρες. Για να σχεδιαγράψουµε ένα πιο ακριβές γράφηµα, χρειαζόµαστε να υπολογίσουµε το y σε υψηλότερη ανάλυση (περισσότερες τιµές): angles = linspace(0, 2*pi, 100); y = sin(angles); plot(angles, y); Η εντολή linspace δηµιουργεί ένα διάνυσµα µε 100 τιµές καταµερισµένες σε ίσα διαστήµατα µεταξύ 0 και 2π (η τιµή 100 επιλέχθηκε µε δοκιµή και λάθος). οκιµάστε αυτές τις εντολές για να κάνετε τα σχεδιαγράµµατα ξανά µε µεγαλύτερη ανάλυση. Θυµηθείτε ότι µπορεί να χρησιµοποιήσετε τα βέλη και για να µεταβείτε πίσω και να ξαναχρησιµοποιήσετε τις προηγούµενες εντολές σας. Το επόµενο Σχήµα 2 δείχνει το γράφηµα µε τις πιο πάνω εντολές: 7 Τα δύο διανύσµατα πρέπει, φυσικά, να είναι του ιδίου µήκους. Εισαγωγή στο OCTAVE Σελ. 21 από 99

22 Σχήµα 2: Γράφηµα του y = sin(x), µε 100 τιµές µεταξύ 0 και 2π. 5.1 Βελτιώνοντας την παρουσίαση (Improving the presentation) Μπορούµε να επιλέξουµε το χρώµα και το στυλ της γραµµής για τα γραφήµατα χρησιµοποιώντας ένα τρίτο όρισµα στην εντολή (συνάρτηση) plot. Για παράδειγµα, για να σχεδιαγράψουµε το γράφηµα µε κόκκινους κύκλους, εισάγουµε: plot(angles, y, ro ) Το τρίτο όρισµα είναι ένα αλφαριθµητικό το οποίο περιγράφει επιθυµητά στυλ. Ο παρακάτω Πίνακας 3 δεικνύει τις πιθανές τιµές (επίσης διαθέσιµος µε την εισαγωγή help plot στο OCTAVE). Πίνακας 3: Χρώµατα και στυλ για σύµβολα και γραµµές στις εντολές σχεδιαγραµµάτων (βλ help plot) w white (άσπρο). point (σηµείο) - solid (συνεχόµενη) m magenta (βαθυκόκκινο) ο circle (κύκλος) : dotted (τελείες) c cyan (κυανού) x x-mark (x-σηµάδι) r red (κόκκινο) + plus (συν) g green (πράσινο) * star (αστερίσκος) b blue (µπλε) s square (τετράγωνο) -. dashdot (διακεκοµµένη µε τελείες) -- dashed (διακεκοµµένη y yellow (κίτρινο) d diamond (ρόµβος) k black (µαύρο) v triangle (down) [τρίγωνο (κάτω)] ^ triangle (up) [τρίγωνο (απάνω)] < triangle (left) [τρίγωνο (αριστερά)] > triangle (right) [τρίγωνο (δεξιά)] p h pentagram (πεντάγραµµο) hexagram (εξάγραµµο) Μόνο διαθέσιµο στο MATLAB Εισαγωγή στο OCTAVE Σελ. 22 από 99

23 Για να δώσουµε τίτλο στο γράφηµα και ετικέτες στους άξονες χρησιµοποιούµε τις εντολές title, xlabel και ylabel: title ( Graph of y = sin(x) ) xlabel ( Angle ) ylabel ( Value ) Τα αλφαριθµητικά στο OCTAVE (όπως τα ονόµατα των αξόνων) καθορίζονται χρησιµοποιώντας αποστρόφους ( ). Σε µερικές περιπτώσεις η εντολή replot πρέπει να χρησιµοποιηθεί για να είναι σε θέση το γράφηµα να ενηµερωθεί. Πλέγµα επίσης µπορεί να προστεθεί στο γράφηµα, εισάγοντας την εντολή: grid on Το παρακάτω Σχήµα 3 δεικνύει το αποτέλεσµα. Μπορούµε να µεγεθύνουµε το σχήµα ή να το κάνουµε διαφορετικού ύψους και πλάτους µε το να σύροµε τις γωνίες του παραθύρου του. Σχήµα 3: Γράφηµα του y = sin(x), µε κόκκινους κύκλους κάθε σηµείο του. 5.2 Πολλαπλά γραφήµατα (Multiple graphs) Περισσότερα γραφήµατα µπορούµε να σχεδιάσουµε στο ίδιο σχήµα προσθέτοντας περισσότερα ορίσµατα στην εντολή plot, δίνοντας τα x και y διανύσµατα για κάθε γράφηµα. Για παράδειγµα, για να σχεδιαγράψουµε το γράφηµα του συνηµίτονου µαζί µε το προηγούµενο ηµίτονο γράφηµα, εισάγουµε: plot (angles, y, :, angles, cos (angles), - ) Εισαγωγή στο OCTAVE Σελ. 23 από 99

24 όπου τα επιπρόσθετα τρία ορίσµατα ορίζουν το γράφηµα του συνηµίτονου και το στυλ της γραµµής του. Μπορούµε να προσθέσουµε λεζάντα στο σχεδιάγραµµα χρησιµοποιώντας την legend εντολή: legend ( Sine, Cosine ) όπου προσδιορίζουµε τα ονόµατα για τα γραφήµατα µε τη σειρά που σχεδιαγράφησαν. Με τις παραπάνω εντολές πρέπει να είµαστε σε θέση να πάρουµε ένα ζεύγος γραφηµάτων όπως στο επόµενο Σχήµα 4. Σχήµα 4: Γραφήµατα του y = sin(x) και y = cos(x). Μέχρι τώρα, κάθε φορά που εισάγαµε µια plot εντολή, τα υπάρχοντα περιεχόµενα του σχήµατος είχαν σβηστεί. Εάν θέλουµε να διατηρήσουµε την τρέχουσα καµπύλη και να εναποθέσουµε νέες καµπύλες (plots) πάνω σε αυτό, µπορούµε να χρησιµοποιήσουµε την εντολή hold on. Χρησιµοποιώντας αυτή την εντολή, τα δύο γραφήµατα (ηµιτόνου και συνηµτόνου) θα µπορούσαν να σχεδιαστούν χρησιµοποιώντας δύο ξεχωριστές εντολές plot: plot (angles, y, : ) hold on plot (angles, cos (angles), g- ) legend ( Sine, Cosine ) Εάν θέλουµε να ελευθερώσουµε το κλείδωµα του τρέχοντος σχεδιαγράµµατος, η εντολή που εισάγουµε είναι hold off. 5.3 Πολλαπλά σχεδιαγράµµατα (Multiple figures) Μπορούµε επίσης να έχουµε πολλαπλά παράθυρα σχεδιαγραµµάτων. Εάν εισάγουµε: figure Εισαγωγή στο OCTAVE Σελ. 24 από 99

25 η επόµενη εντολή plot θα παράγει ένα γράφηµα σε ένα νέο παράθυρο σχεδιαγράµµατος. Για παράδειγµα, εισάγοντας: plot (angles, tan (angles)) θα σχεδιάσει τη συνάρτηση της εφαπτοµένης σε αυτό το νέο παράθυρο (βλ. παρακάτω Σχήµα 5(α)) 8. Εάν θέλουµε να πάµε πίσω και να κάνουµε plot στο πρώτο σχεδιάγραµµα, µπορούµε να εισάγουµε: figure(0) 5.4 Χειρονακτική κλίµακα (Manual scaling) Η συνάρτηση της εφαπτοµένης που µόλις κάναµε plot δεν φαίνεται καλά διότι το διάνυσµα angles έχει µόνο 100 στοιχεία, και έτσι πολύ λίγα σηµεία αντιπροσωπεύουν τις ασύµπτωτες. Ωστόσο, ακόµη και µε περισσότερες τιµές συµπεριλαµβανοµένης και της π/2, ουδέποτε θα φαίνεται σωστά, διότι δεικνύοντας το άπειρο είναι δύσκολο (το OCTAVE ούτε καν προσπαθεί). Μπορούµε να κρύψουµε αυτού του είδους προβλήµατα µε το να εστιάσουµε στο τµήµα του γραφήµατος που πραγµατικά ενδιαφερόµαστε. Η εντολή axis µας επιτρέπει να επιλέξουµε χειρωνακτικά τους άξονες. Η εντολή axis παίρνει ένα όρισµα που είναι διάνυσµα και ορίζεται σαν (x min, x max, y min, y max ). Έτσι εάν εισάγουµε: figure(2) axis ([ ]) το σχεδιάγραµµα έχει κλίµακα όπως φαίνεται στο Σχήµα 5(β). Επισηµαίνονται οι παρενθέσεις στη συνάρτηση (εντολή) axis και οι αγκύλες που ορίζουν το διάνυσµα σαν όρισµα. (a) Default scaling (b) Manual scaling Σχήµα 5: Γράφηµα του y = tan(x) µε default scaling (Σχήµα 5a), και µε χρήση axis([ ] (Σχήµα 5b)). 8 Στο MATLAB η εντολή figure φέρνει ένα νέο παράθυρο αµέσως ενώ στο OCTAVE το νέο παράθυρο ίσως να µην εµφανιστεί µέχρις ότου εισάγουµε την plot εντολή. Εισαγωγή στο OCTAVE Σελ. 25 από 99

26 Το OCTAVE σε συνδυασµό µε το GNUPLOT, επιτρέπει άµεση αλληλεπίδραση µε το παράθυρο γραφικών, όπως για να εστιάσουµε κάπου σέρνουµε µε το δεξί κουµπί του ποντικιού ένα κουτί γύρω από την περιοχή που µας ενδιαφέρει και επιλέγουµε µε το αριστερό κουµπί. Λεπτοµέρειες από άλλες ενέργειες και δυνατότητες µε τα πλήκτρα (όταν το παράθυρο γραφικών είναι επιλεγµένο) δεικνύονται στον επόµενο Πίνακα 4 9. Πίνακας 4: Ποντίκι και δυνατότητες µε πλήκτρα για αλληλεπίδραση µε 2D γραφικά, (LMB - Left Mouse Button, RMB Right Mouse Button), βλ. επίσης Πίνακα 8. Ποντίκι (Mouse) LMB RMB Πλήκτρα a b e g h l L m r Ενέργειες Επισηµειώνω το γράφηµα (Annotate the graph.) Επισηµειώνω την περιοχή εστίασης (Mark Zoom region.) Ενέργειες Autoscale and Replot Toggle Border Replot (removes annotations) Toggle grid Help Toggle Logscales Toggle individual axis Toggle Mouse control Toggle Ruler 1 Decrement mousemode 2 Increment mousemode 3 Decrement clipboardmode 4 Increment clipboardmode 5 Toggle polardistance 6 Toggle verbose 7 Toggle graph size ratio n p u Escape Go to next zoom in the zoom stack Go to previous zoom in the zoom stack Unzoom Cancel zoom region 9 Στο MATLAB πρόσβαση στις γραφικές εντολές είναι µέσω εικόνων και µενού γύρο από το παράθυρο γραφικών. Εισαγωγή στο OCTAVE Σελ. 26 από 99

27 5.5 Αποθήκευση και εκτύπωση σχηµάτων (Saving and printing figures) Το OCTAVE/GNUPLOT δεν προσφέρει µε το ποντίκι ή µε πλήκτρο οδηγούµενη δυνατότητα. Ωστόσο, τα γραφήµατα µπορούν να εκτυπωθούν στον εκτυπωτή από την γραµµή εντολών (command line) εισάγοντας print στην προτροπή. Η help print δίνει πληροφορίες για τις πολλές διαθέσιµες επιλογές εκτύπωσης συµπεριλαµβανοµένης: print ( graph1.eps, -deps ) για την αποθήκευση µιας postscript έκδοσης του γραφήµατος σε ένα αρχείο graph1.eps. Για την αποθήκευση ενός PNG format εικόνας, εισάγουµε: print ( graph1.png, -dpng ) 6. OCTAVE Προγραµµατισµός Ι: Αρχεία Script (Octave programming I: Script files) Εάν έχουµε µια σειρά από εντολές που θέλουµε να τις εισάγουµε ξανά και ξανά, µπορούµε να τις αποθηκεύσουµε σε ένα OCTAVE script. Αυτό είναι ένα αρχείο κειµένου που περιέχει εντολές και είναι ο βασικός τύπος ενός OCTAVE προγράµµατος. Όταν εκτελούµε ένα script αρχείο στο OCTAVE, έχει το ίδιο αποτέλεσµα σαν να εισάγουµε τις εντολές από εκείνο το αρχείο, γραµµή προς γραµµή. Τα script αρχεία είναι επίσης χρήσιµα όταν δεν είµαστε αρκετά σίγουροι για τη σειρά των εντολών που θέλουµε να χρησιµοποιήσουµε, διότι είναι ευκολότερο να τις επεξεργαστούµε σε ένα αρχείο κειµένου χρησιµοποιώντας τον δροµέα και τα πλήκτρα για να ανακαλέσουµε και να επεξεργαστούµε προηγούµενες γραµµές εντολών που µόλις δοκιµάσαµε. Τα OCTAVE script αρχεία είναι κανονικά αρχεία κειµένου, αλλά πρέπει να έχουν µια.m επέκταση στο όνοµα του αρχείου (όπως run.m). Για αυτό το λόγο, µερικές φορές ονοµάζονται M-files. Το υπόλοιπο όνοµα του αρχείου (η λέξη run στο παράδειγµα) είναι η εντολή που εισάγουµε στο OCTAVE για να εκτελέσει το script. 6.1 ηµιουργία και επεξεργασία ενός script (Creating and editing a script) Μπορούµε να δηµιουργήσουµε ένα αρχείο script σε οποιοδήποτε κειµενογράφο (όπως emacs, notepad), και µπορούµε να εκκινήσουµε έναν κειµενογράφο µέσα από το OCTAVE εισάγοντας την εντολή: edit Αυτή η εντολή θα εκκινήσει τον κειµενογράφο σε ένα νέο παράθυρο 10. Εάν θέλουµε να επεξεργαστούµε ένα υπάρχον αρχείο script, µπορούµε να συµπεριλάβουµε το όνοµα του script αρχείου. Εάν, για παράδειγµα, είχαµε ένα script ονοµαζόµενο run.m, τότε εισάγοντας edit run, θα άνοιγε τον κειµενογράφο και θα φόρτωνε αυτό το αρχείο για επεξεργασία. 10 Μπορούµε να διαµορφώσουµε την εντολή edit να εκκινήσει τον κειµενογράφο της επιλογής µας. Εισαγωγή στο OCTAVE Σελ. 27 από 99

28 Στο κείµενο απλά εισάγουµε τις εντολές που θέλουµε το OCTAVE να εκτελέσει. Για παράδειγµα, ξεκινήστε τον κειµενογράφο εάν δεν τον έχετε ήδη ξεκινήσει και εισάγετε τις εξής εντολές σ αυτόν (αλλά πρώτα διαγράψετε όποιες γραµµές δεν χρειάζεστε): % Script υπολογισµού και ένδειξεις του σχεδιαγράµµατος µιας % ανορθωµένης ηµιτονικής κυµατοµορφής t = linspace (0, 10, 100); y = abs (sin (t)); % Η εντολή abs κάνει όλες τις αρνητικές τιµές θετικές plot (t, y); title ( Rectified Sine Wave ); labelx ( t ); Το «%» σύµβολο αναγνωρίζει ένα σχόλιο και οποιοδήποτε κείµενο σε µια γραµµή µετά το % αγνοείται από το OCTAVE. Σχόλια πρέπει να χρησιµοποιούνται στο script για να περιγράφουν το τι κάνει, για το όφελος άλλων που το χρησιµοποιούν και επίσης για εσάς αργότερα µετά από µερικές εβδοµάδες που θα έχετε ξεχάσει το σκεπτικό του προγράµµατος. Επιλέξτε File Save As από το µενού του κειµενογράφου και αποθηκεύσετε το αρχείο σας ως rectsin.m. Έχετε τελειώσει µε το παράθυρο του κειµενογράφου, αλλά καλό είναι να το αφήσετε ανοιχτό διότι χωρίς αµφιβολία θα το χρησιµοποιήσετε ξανά. 6.2 Τρέξιµο και εκσφαλµάτωση των scripts (Running and debugging scripts) Για να τρέξουµε το script, εισάγουµε το όνοµά του στο κυρίως παράθυρο του OCTAVE. Για το script που µόλις δηµιουργήσαµε εισάγουµε: rectsin Ένα σχήµα σε ένα παράθυρο θα εµφανιστεί που θα δείχνει την ανορθωµένη ηµιτονική κυµατοµορφή. Αλλά, εάν εισάγαµε το script στον κειµενογράφο ακριβώς όπως δίνεται παραπάνω, επίσης θα δούµε στο παράθυρο εντολών του OCTAVE: error: labelx undefined near line 6 column 1 error: called from: error: C:\Users\Apostolos\Desktop\3.3.3_gcc-4.3.0\apl_examples\ rectsin.m at line 6, column 1 που δείχνουν ότι υπάρχει σφάλµα στο script 11. Τα σφάλµατα στο OCTAVE έχουν καλύτερη σηµασία όταν διαβάζονται από κάτω (το τέλος) προς τα πάνω (στην αρχή). Το παραπάνω σφάλµα λέει ότι στην γραµµή 6 του rectsin.m, δεν γνωρίζει τι να κάνει µε την εντολή labelx. Η αιτία, φυσικά είναι ότι η εντολή πρέπει να είναι xlabel. Πηγαίνοντας πίσω στον κειµενογράφο, διορθώνουµε το σφάλµα, και µετά αποθηκεύουµε ξανά το αρχείο. Μην ξεχνάτε να αποθηκεύετε το αρχείο κάθε φορά που το επεξεργάζεστε. 11 Εάν βρήκατε το σφάλµα όταν γράφατε εισάγατε το script, και το διορθώσατε, καλώς! Εισαγωγή στο OCTAVE Σελ. 28 από 99

29 Προσπαθήστε να τρέξετε ξανά το διορθωµένο script αρχείο και αυτή τη φορά πρέπει να δώσει σωστά την ετικέτα στον x-άξονα, όπως φαίνεται στο παρακάτω Σχήµα 6. Σχήµα 6: Γράφηµα της ανορθωµένης ηµιτονικής κυµατοµορφής, παρήχθη µε το rectsin.m script. 6.3 Περιεχόµενο των scripts (Remembering previous scripts) Τα script αρχεία είναι πολύ χρήσιµα στο OCTAVE και εάν δεν είµαστε προσεκτικοί σύντοµα βρισκόµαστε µε αρκετά scripts για διαφορετικές εργασίες και µετά δεν θυµούµαστε τι κάνει το καθένα. Εάν θέλουµε να γνωρίζουµε τι scripts έχουµε, εισάγουµε την εντολή what για να µας δώσει µια λίστα από όλα τα scripts και τα αρχεία δεδοµένων (data files): what m-files in current directory /mnt/hda7/octave/tutorial rectsin.m mat-files in current directory /mnt/hda7/octave/tutorial Το OCTAVE σύστηµα βοήθειας επίσης θα αναγνωρίσει αυτόµατα τα scripts. Εάν ζητήσουµε βοήθεια για το rectsin script θα πάρουµε: help rectsin % Script υπολογισµού και ένδειξεις του σχεδιαγράµµατος µιας % ανορθωµένης ηµιτονικής κυµατοµορφής Το OCTAVE υποθέτει ότι οι πρώτες γραµµές µε τα σχόλια στο M-file είναι µια περιγραφή του script και εµφανίζει αυτά τα σχόλια όταν ζητάµε βοήθεια. Πρέπει να προσθέτουµε γραµµές µε σχόλια στην κορυφή για κάθε script που γράφουµε για να βοηθούµαστε στην αναζήτηση για το τι κάνει το καθένα. 7. Εκφράσεις ελέγχου (Control statements) Μέχρι τώρα τα προγράµµατα και οι εκφράσεις που έχουµε δει περιείχαν απλές ακολουθιακές εντολές. Η χρήση των διανυσµάτων (και αργότερα των πινάκων) για την επίλυση προβληµάτων Εισαγωγή στο OCTAVE Σελ. 29 από 99

30 επιβάλλουν περισσότερο απαιτητικούς υπολογισµούς από απλές εκφράσεις. Έτσι πέρα από µερικές τυπικές δοµές χρειαζόµαστε και εκφράσεις ελέγχου προγραµµάτων. Οι εκφράσεις ελέγχου ελέγχουν τη ροή της εκτέλεσης των προγραµµάτων επιτρέποντας είτε την επαναληπτική είτε την κατά επιλογή εκτέλεση άλλων εντολών. Όλες οι εκφράσεις ελέγχου αρχίζουν µε ειδικές δεσµευµένες λέξεις. Κάθε έκφραση ελέγχου έχει µια αντίστοιχη δεσµευµένη λέξη END. Η λίστα των εκφράσεων που περιέχονται µεταξύ της αρχικής ειδικής δεσµευµένης λέξης και της αντίστοιχης δεσµευµένης λέξης END ονοµάζεται το σώµα της έκφρασης ελέγχου. Το OCTAVE υποστηρίζει τις σύνηθες δοµές βρόχων. 7.1 if...else selection Στα προγράµµατα συχνά θέλουµε να εκτελέσουµε διαφορετικές εντολές που εξαρτώνται από κάποια συνθήκη. Η συνηθισµένη εντολή σ αυτές τις περιπτώσεις είναι η if. Η γενική µορφή της έκφρασης if στο OCTAVE είναι: if expression statements elseif expression statements else statements end Αυτή είναι λίγο διαφορετική από τη σύνταξη της C++: οι παρενθέσεις () γύρω από την συνθήκη (expression) δεν χρειάζονται (αν και µπορεί να χρησιµοποιηθούν για διαύγεια) και το τµήµα των εκφράσεων (statements) δεν χρειάζεται να καθοριστεί µε αγκύλες {}. Αντί αυτού, η εντολή end χρησιµοποιείται για να δηλώσει το τέλος της if έκφρασης. Ενώ οι εκφράσεις ελέγχου, όπως το if, συνήθως χρησιµοποιούνται στα OCTAVE scripts, αυτές επίσης µπορούν να εισαχθούν στην γραµµή εντολών όπως στο παράδειγµα: a=0; b=2; if a > b c=3 else c=4 end c = 4 Εάν τις εισάγουµε στην γραµµή εντολών, το OCTAVE περιµένει µέχρις ότου εισαχθεί το τελευταίο end πριν αξιολογήσει τη συνθήκη. Εισαγωγή στο OCTAVE Σελ. 30 από 99

31 Πολλές εκφράσεις ελέγχου στηρίζονται στην αξιολόγηση κάποιας λογικής συνθήκης (logical expression) κάποια έκφραση που µπορεί να είναι αληθής ή ψευδής ανάλογα µε τις τρέχουσες τιµές. Στο OCTAVE, οι λογικές συνθήκες επιστρέφουν αριθµούς: 0 εάν η συνθήκη είναι ψευδής και 1 εάν είναι αληθής: 1==2 ans = 0 pi > exp(1) & sqrt(-1) == i ans = 1 Μια πλήρης λίστα από σχεσιακούς και λογικούς τελεστές διατίθεται, όπως φαίνεται στον παρακάτω Πίνακα 5. Επισηµαίνεται ότι δεν είναι ακριβώς οι ίδιοι όπως στην C++. Πίνακας 5: Εκφράσεις Boole (Boolean expressions) Σύµβολο Έννοια Παράδειγµα == equal (ίσο) if x == y ~= not equal (όχι ίσο) if x ~= y > greater than (µεγαλύτερο από) if x > y >= greater than or equal (µεγαλύτερο από ή ίσο) if x >= y < less than (λιγότερο από) if x < y <= less than or equal (λιγότερο από ή ίσο) if x <= y & AND (ΚΑΙ) if x == 1 & y > 2 OR (Ή) if x == 1 y > 2 ~ NOT (Άρνηση, ΟΧΙ) x = ~y Άσκηση 1: Να βρεθεί ο λογάριθµος του x. Λύση: if x > 0 y = log(x); elseif x < 0 y = log(-x); else Εισαγωγή στο OCTAVE Σελ. 31 από 99

32 disp("cannot take the log of zero."); endif Άσκηση 2: Να εισαχθεί ένας αριθµός και να προσδιοριστεί εάν αυτός είναι θετικός. Λύση: x = input("enter a number: "); x =5; if x > 0 disp("the number is positive."); endif Άσκηση 3: Να εισαχθεί ένας αριθµός και να προσδιοριστεί εάν αυτός είναι αρνητικός. Λύση: x = input("enter a number: "); if x < 0 disp("the number is negative."); endif Άσκηση 4: Να εισαχθεί ένας αριθµός και να προσδιοριστεί εάν αυτός είναι µηδέν. Λύση: x = input("enter a number: "); if x == 0 disp("the number is zero."); endif 7.2 switch selection Εάν βρεθούµε στην ανάγκη να χρησιµοποιήσουµε πολλαπλές if/elseif εκφράσεις και να επιλέξουµε µεταξύ διαφόρων επιλογών, ίσως είναι καλύτερα να χρησιµοποιήσουµε την έκφραση switch. Αυτή έχει την ακόλουθη µορφή: switch x case x1, statements case x2, statements otherwise, statements end Εισαγωγή στο OCTAVE Σελ. 32 από 99

33 Στην έκφραση switch η τιµή της µεταβλητής x συγκρίνεται µε κάθε µία από τις περιπτώσεις (case) της λίστας και εάν βρεθεί µία που είναι ίση τότε εκτελούνται οι αντίστοιχες εκφράσεις της. Επισηµαίνεται ότι αντίθετα µε την C++ η εντολή break στο τέλος των εκφράσεων κάθε περίπτωσης δεν είναι αναγκαία, γιατί το OCTAVE εκτελεί εντολές µέχρι την εντολή της επόµενης περίπτωσης. Εάν δεν βρεθεί ταύτιση, οι εκφράσεις otherwise εκτελούνται εάν αυτές υπάρχουν. Ένα παράδειγµα είναι ως εξής: a=1; switch a case 0 disp( a is zero ); case 1 disp( a is one ); otherwise disp( a is not a binary digit ); end a is one Η συνάρτηση disp εµφανίζει µια τιµή ή ένα αλφαριθµητικό. Σ αυτό το παράδειγµα χρησιµοποιείται για να εµφανίσει αλφαριθµητικά, αλλά µπορεί επίσης να χρησιµοποιηθεί µε µεταβλητές, πχ., disp(a) θα εµφανίσει την τιµή του a. Άσκηση 1: Να γραφτεί πρόγραµµα χρησιµοποιώντας την έκφραση switch που να δίνει την τιµή του εισιτήριου από την Αθήνα για προορισµό στις πόλεις Ρώµη, Λονδίνο και Μόσχα. Λύση: city = input ( Enter destination city:, s ) switch city case Rome disp( 100 Euros ) case London disp( 150 Euros ) case Moscow disp( 120 Euros ) otherwise sprintf( No flights for %s, city) endswitch Εισαγωγή στο OCTAVE Σελ. 33 από 99

34 7.3 for loops Η προγραµµατιστική δοµή µε τις περισσότερες πιθανότητες να χρησιµοποιηθεί είναι ο βρόχος for, ο οποίος επαναλαµβάνει ένα τµήµα κώδικα µερικές φορές µε κάποιο βήµα. Στο OCTAVE πρέπει να γίνεται χρήση της αριθµητικής των διανυσµάτων αντί του for loop, εάν είναι δυνατόν, καθώς ένα for loop είναι περίπου 40 φορές πιο αργό 12. Ωστόσο, υπάρχουν στιγµές που το for loop είναι αναπόφευκτο. Η σύνταξή του είναι: for variable = vector statements end όπου η µεταβλητή vector περιέχει τους αριθµούς των βηµατικών επαναλήψεων. Συνήθως το vector εκφράζεται σε µορφή άνω-κάτω τελεία (:), όπως στο επόµενο παράδειγµα που δηµιουργεί ένα διάνυσµα µε τους πρώτους 5 όρους για το παραγοντικό του n: for n=1:5 nf(n) = factorial(n); end disp(nf) Επισηµαίνεται η χρήση του ερωτηµατικού (;) στο τέλος της γραµµής στο for loop. Αυτό αποτρέπει τo OCTAVE από το να εµφανίζει την τρέχουσα τιµή της µεταβλητής nf(n) κάθε φορά γύρω στο βρόχο, το οποίο θα είναι κάπως ενοχλητικό (δοκιµάστε το χωρίς το ερωτηµατικό εάν θέλετε). Άσκηση 1: Να υπολογιστεί η παράσταση j +2 για j=1, 2, 3, 4, 5. Λύση: for j=1:5 J+2 end ans = 3 ans = 4 ans = 5 ans = 6 12 Αυτό δεν σηµαίνει ότι τα for loops είναι αργά, απλά το OCTAVE είναι υψηλά βελτιστοποιηµένο για υπολογισµούς µε πίνακες/διανύσµατα. Επίσης αρκετοί σηµερινοί ηλεκτρονικοί υπολογιστές συµπεριλαµβάνουν εντολές για ταχύτερους υπολογισµούς πινάκων, διότι οι πίνακες είναι βασικοί για τα τρισδιάστατα γραφικά στα παιχνίδια των ηλεκτρονικών υπολογιστών. Για παράδειγµα, οι εντολές MMX προστέθηκαν στον επεξεργαστή Intel Pentium το 1995, και σε µετέπειτα επεξεργαστές, είναι Matrix Maths extentions. Εισαγωγή στο OCTAVE Σελ. 34 από 99

35 ans = 7 Άσκηση 2: Να υψωθούν στο τετράγωνο τα στοιχεία του διανύσµατος x=[1, 2, 3, 4, 5]. Λύση: for j=1:5 x(j) = j^2; end x x = [ ] Άσκηση 3: Να υψωθούν στο τετράγωνο τα στοιχεία του διανύσµατος x=[1, 2, 3, 4, 5]. Λύση: for j=1:5 x(j) = j^2; end x x = [ ] Άσκηση 4: Να υπολογιστεί το άθροισµα Λύση: 5 ( i+ 1) i. i= 1 sum=0; for i=1:5 sum = sum + (i +1)^i; end sum sum =8476 Άσκηση 5: Να υπολογιστεί το γινόµενο 6 ( x3 x i ) για τις τιµές του i i= 1, i 3 i= που x, 1,...,6 προκύπτουν εάν διαµερίσουµε το διάστηµα [0, 1] σε 5 ισοµήκη διαστήµατα ( x = 0.2( i 1), i= 1,...,6 ). i Λύση: Εισαγωγή στο OCTAVE Σελ. 35 από 99

36 x = (0:5)/5 product=1; for i=1:2, product = product * (x(3) x(i)); end for i=4:6, product = product * (x(3) x(i)); end product product = Άσκηση 6: Να υπολογιστεί ο µέσος όρος Λύση: x 1 n xi n i = 1 = για µια λίστα τιµών. x = [ ] x_mean = 0; for entry = x, x_mean = x_mean + entry; endfor x_mean = x_mean / length(x) x_mean x_mean = while loops Εάν δεν γνωρίζουµε ακριβώς τον αριθµό των επαναλήψεων που χρειαζόµαστε και θέλουµε επαναλήψεις µέχρις ότου κάποια συνθήκη ικανοποιείται, το OCTAVE παρέχει το while loop: while expression statements end Για παράδειγµα: x=1; while 1+x > 1 x = x/2; end x x = e-016 Εισαγωγή στο OCTAVE Σελ. 36 από 99

37 Άσκηση 1: Να δηµιουργηθεί µια µεταβλητή fib η οποία περιέχει τα πρώτα 10 στοιχεία της σειράς Fibonacci. Λύση: fib = ones (1, 10); i = 3; while (i <= 10) fib (i) = fib (i-1) + fib (i-2); i++; end fib fib = Άσκηση 2: Να δηµιουργηθεί µια µεταβλητή fib η οποία περιέχει τα πρώτα 10 στοιχεία της σειράς Fibonacci. Λύση: x = 1.0; while x < 10 x = x*2; disp(x); endwhile end 2 4 x x = Η έκφραση do-until Η έκφραση do-until είναι παρόµοια µε την έκφραση while, εκτός του ότι επαναληπτικά εκτελεί µια έκφραση µέχρις ότου µια συνθήκη γίνει αληθής και εκτός του ότι ο έλεγχος της συνθήκης είναι στο τέλος του βρόχου, έτσι το σώµα του βρόχου πάντοτε εκτελείται το λιγότερο µια φορά. Όπως και µε τη συνθήκη σε µια if έκφραση, η συνθήκη σε µια do-until έκφραση θεωρείται αληθής εάν η τιµή της είναι µη µηδενική, και ψευδής εάν η τιµή της είναι µηδενική. Εάν η τιµή της υπό συνθήκης έκφρασης σε µιαν έκφραση do-until είναι ένα διάνυσµα ή ένας πίνακας, θεωρείται αληθής µόνο εάν είναι µη κενή (non-empty) και όλα τα στοιχεία είναι µη µηδενικά. Η do-until έκφραση στο Octave συντάσσεται ως εξής: do Εισαγωγή στο OCTAVE Σελ. 37 από 99

38 body until (condition) Εδώ το body (σώµα) είναι µια έκφραση ή λίστα από εκφράσεις που ονοµάζουµε το σώµα του βρόχου, και condition (συνθήκη) είναι µια έκφραση που ελέγχει για πόσο θα εκτελείται ή θα τρέχει ο βρόχος. Το επόµενο παράδειγµα δηµιουργεί µια µεταβλητή fib που περιέχει τα πρώτα 10 στοιχεία µιας ακολουθίας Fibonacci. fib = ones (1, 10); i = 2; do i++; fib (i) = fib (i-1) + fib (i-2); until (i == 10) fib fib = Οι εκφράσεις break και continue Μερικές φορές είναι ανάγκη να εξέλθουµε από έναν βρόχο κάπου στη µέση της εκτέλεσής του ή να συνεχίσουµε στην επόµενη τιµή σε έναν for βρόχο χωρίς την εκτέλεση των υπόλοιπων εντολών του για την τρέχουσα τιµή. Εδώ χρησιµοποιούµε τις εκφράσεις break και continue. Ο παρακάτω κώδικας δεικνύει πώς χρησιµοποιούµε την έκφραση break. total = 0; while true x = input('value to add (enter 0 to stop): '); if x == 0 break; endif total = total + x; disp(['total: ', num2str(total)]); endwhile Χωρίς την έκφραση break, ο βρόχος θα εξακολουθούσε να εκτελείται για πάντα καθώς η συνθήκη του βρόχου while είναι πάντοτε true. Το break µας επιτρέπει να πηδήξουµε µετά από το end του βρόχου (στην έκφραση µετά την endwhile). The break statement can be used in any loop: for, while or do...until. Εισαγωγή στο OCTAVE Σελ. 38 από 99

39 Η έκφραση continue επίσης πηδάει από το εσωτερικό του ενός βρόχου αλλά επιστρέφει στην αρχή του βρόχου σε αντίθεση να πηγαίνει στο τέλος. Σε ένα for loop, η επόµενη τιµή µέσα στο διάνυσµα θα ανατεθεί στην µεταβλητή for (εάν υπάρχουν ακόµη) και το loop ξανάρχισε µε αυτή την τιµή; Σε ένα while loop, η συνθήκη στην αρχή του βρόχου θα επανεξεταστεί και ο βρόχος θα συνεχίσει εάν είναι ακόµη αληθής (true); Σε ένα do...until loop, η συνθήκη στο τέλος του βρόχου θα εξεταστεί και ο βρόχος θα συνεχίσει από την αρχή εάν είναι ακόµη ψευδής (false). Σαν ένα παράδειγµα, ο παρακάτω κώδικας θα γεµίσει το κάτω τριγωνικό µέρος ενός τετραγωνικού πίνακα µε 1 και τα υπόλοιπα στοιχεία µε 0. N = 5; A = zeros(n); % Create an N x N matrix filled with 0s for row = 1:N for column = 1:N if column > row continue; endif A(row, column) = 1; endfor endfor disp(a); Σηµείωση: Το εσωτερικό for πηδάει (continues) πάνω από τον κώδικα που αναθέτει 1 σε µια εισαγωγή του A όταν ο δείκτης της στήλης είναι µεγαλύτερος από τον δείκτη της γραµµής. 7.7 Ορθότητα και ακρίβεια (Accuracy and precision) Ας θεωρήσουµε ξανά τον κώδικα: x=1; while 1+x > 1 x = x/2; end x x = e-016 Το παραπάνω while loop συνεχίζει να µειώνει κατά το ήµισυ τις τιµές του x µέχρις ότου προσθέτοντας στο x το 1 δεν υπάρχει διαφορά στο αποτέλεσµα, δηλαδή µέχρις ότου το x να είναι Εισαγωγή στο OCTAVE Σελ. 39 από 99

40 µηδέν για το OCTAVE, και αυτό µπορεί να ειδωθεί καθώς ο αριθµός για το x είναι γύρω στο Αυτό δεν σηµαίνει ότι το OCTAVE δεν µπορεί να εργαστεί µε αριθµούς µικρότερους από αυτόν (ο µικρότερος αριθµός που το OCTAVE µπορεί να αντιπροσωπεύσει είναι γύρω στο x ) 13. Το πρόβληµα είναι ότι οι δύο αριθµοί στην πράξη του παραδείγµατος είναι διαφορετικών µεγεθών και το OCTAVE δεν µπορεί να διατηρήσει την ακρίβεια και για τους δύο. Θεωρείστε αυτό το παράδειγµα: a = = b = = Εάν φανταστούµε ότι η αριθµητική ακρίβεια του ηλεκτρονικού υπολογιστή είναι 5 σηµαντικά ψηφία (significant figures) στη βάση του αριθµού (το µέρος πριν το επί 10 k ), τότε και τα δύο a και b µπορούν να αντιπροσωπευτούν ακριβώς. Αλλά, εάν προσπαθήσουµε να προσθέσουµε του δύο αριθµούς, παίρνουµε τα εξής: a + b = = = σε 5 σηµαντικά ψηφία Έτσι, ενώ οι δύο αριθµοί είναι εντάξει από µόνοι τους, επειδή τα µεγέθη τους διαφέρουν κατά πολύ, το άθροισµά τους δεν µπορεί να αντιπροσωπευτεί ακριβώς. Αυτό ακριβώς συµβαίνει στην περίπτωση του while loop παραπάνω. Το OCTAVE (και οι περισσότεροι ηλεκτρονικοί υπολογιστές) είναι ακριβείς γύρω στα 15 σηµαντικά ψηφία, έτσι όταν προσπαθούµε να προσθέσουµε 1x10-16 στο 1, η απάντηση απαιτεί έναν µεγαλύτερο αριθµό σηµαντικών ψηφίων από αυτόν που είναι διαθέσιµος και η απάντηση περικόπτεται αφήνοντας µόνο το 1. εν υπάρχει γενική λύση σε τέτοιου είδους προβλήµατα, αλλά χρειαζόµαστε να γνωρίζουµε ότι υπάρχουν. Είναι πολύ ασυνήθιστο να χρειαζόµαστε να ανησυχούµε για την δεκάτη έκτη δεκαδική θέση για µια απάντηση, αλλά εάν είναι ανάγκη να ανησυχούµε τότε πρέπει να σκεφτόµαστε πολύ προσεκτικά πώς να λύσουµε το πρόβληµα. Η απάντηση είναι στο να σκεφτούµε πως θα γίνει η διατύπωση της λύσης και να σιγουρευτούµε στη λύση ότι οι αριθµοί που επιλέγουµε να χρησιµοποιήσουµε είναι όλοι περίπου µε το ίδιο µέγεθος. 8. Προγραµµατισµός ΙΙ: Συναρτήσεις (programming ΙI: Functions) Τα αρχεία scripts στο OCTAVE µας επιτρέπουν να γράψουµε απλά προγράµµατα, αλλά περισσότερο 13 Οι µεταβλητές realmax και realmin µας λένε ποιος είναι ο µέγιστος και ελάχιστος αριθµός σε οποιοδήποτε ηλεκτρονικό υπολογιστή. Επιπρόσθετα η µεταβλητή eps βαστάει την απόσταση από το 1.0 στον επόµενο κινητής υποδιαστολής αριθµό µέτρο ένδειξης πιθανού σφάλµατος σε κάθε αριθµό, συνήθως αντιπροσωπεύεται µε το γράµµα ε στους θεωρητικούς υπολογισµούς. Η τιµή eps είναι x10-16 στον ηλεκτρονικό µας υπολογιστή. Στο παράδειγµά µας, όταν το x έχει αυτή την τιµή, 1+x έχει σηµασία αλλά αφότου αυτή η τιµή µειώνεται στο ήµισυ, δεν έχει πια σηµασία. Εισαγωγή στο OCTAVE Σελ. 40 από 99

41 ισχυρά από τα scripts είναι οι συναρτήσεις που ορίζονται από τον χρήστη. Αυτές µας επιτρέπουν να ορίσουµε τις δικές µας εντολές στο OCTAVE που µετά µπορούµε να τις χρησιµοποιήσουµε από τη γραµµή εντολών ή σε άλλες συναρτήσεις ή scripts. Οι µεταβλητές στις συναρτήσεις OCTAVE πάντοτε περνάνε µε τιµή, ουδέποτε µε αναφορά. Ωστόσο, οι συναρτήσεις OCTAVE µπορούν να επιστρέψουν περισσότερες από µία τιµή 14. Βασικά, οι συναρτήσεις στο OCTAVE είναι περασµένοι αριθµοί, εκτελούν µερικούς υπολογισµούς και δίνουν πίσω µερικούς άλλους αριθµούς. Μια συνάρτηση (function) ορίζεται σε ένα αρχείο κειµένου, όπως ακριβώς και στα scripts, εκτός από το ότι η πρώτη γραµµή του αρχείου έχει την ακόλουθη µορφή: function [output1, output2,...] = name (input1, input2,...) Κάθε συνάρτηση αποθηκεύεται σε ξεχωριστό M-file, το οποίο πρέπει να έχει το ίδιο όνοµα όπως η συνάρτηση. Για παράδειγµα, µια συνάρτηση που ονοµάζεται sind() πρέπει να οριστεί σε ένα αρχείο που ονοµάζεται sind.m. Κάθε συνάρτηση µπορεί να έχει έναν αριθµό από ορίσµατα και να επιστρέφει έναν αριθµό από διαφορετικές τιµές. Όταν βρεθούµε σε κατάσταση που χρησιµοποιούµε το ίδιο σύνολο από εκφράσεις ξανά και ξανά, αυτό είναι ένδειξη ότι αυτές πρέπει να πακεταριστούν σε µια συνάρτηση. Όταν πακεταριστούν σαν συνάρτηση, είναι ευκολότερο να χρησιµοποιηθούν, κάνουν τον κώδικα περισσότερο αναγνώσιµο, και µπορεί να χρησιµοποιηθούν από άλλους ανθρώπους σε διαφορετικές καταστάσεις. 8.1 Παράδειγµα 1: Ηµίτονο σε βαθµούς (Example 1: Sine in degrees) Το OCTAVE χρησιµοποιεί ακτίνια για όλους του υπολογισµούς του µε γωνίες, αλλά οι περισσότεροι από εµάς είµαστε πιο ευχαριστηµένοι να εργαζόµαστε σε βαθµούς. Όταν κάνουµε τους OCTAVE υπολογισµούς µπορούµε πάντοτε να µετατρέψουµε την γωνία d σε ακτίνια χρησιµοποιώντας sin(d/180*pi), ή ακόµη χρησιµοποιώντας την µεταβλητή deg=pi/180 (όπως ορίστηκε στην ενότητα 3.1), γράφοντας sin(d*deg). Αλλά θα ήταν πιο απλό και περισσότερο αναγνώσιµο εάν απλά µπορούσαµε να εισάγουµε την εντολή sin(d) ( ηµίτονο σε βαθµούς ), και να µπορούµε να δηµιουργήσουµε µια συνάρτηση να κάνει ακριβώς αυτό. Μια τέτοια συνάρτηση θα µπορούσε να οριστεί δηµιουργώντας ένα αρχείο sind.m που να περιέχει ακριβώς τις εξής γραµµές: function s = sind(x) % SIND(X) Calculates sine(x) in degrees s = sin(x*pi/180); 14 Όταν οι µεταβλητές περνούν µε τιµή, είναι µόνο για ανάγνωση οι τιµές µπορεί να διαβαστούν και να χρησιµοποιηθούν, αλλά δεν µπορεί να αλλαχτούν. Όταν οι µεταβλητές περνούν µε αναφορά, όπως στην C++, οι τιµές τους µπορεί να αλλαχτούν για να περάσουν πληροφορία από την συνάρτηση πίσω στο κυρίως πρόγραµµα. Αυτό απαιτείται στην C++ διότι συνήθως µόνο µια τιµή µπορεί να επιστραφεί από µια συνάρτηση. Στο OCTAVE πολλές τιµές µπορούν να επιστραφούν, έτσι το πέρασµα µε αναφορά δεν είναι απαραίτητο. Εισαγωγή στο OCTAVE Σελ. 41 από 99

42 Αυτό ίσως να φαίνεται ασήµαντο, αλλά πολλές συναρτήσεις είναι ασήµαντες και αυτό δεν τις κάνει λιγότερο χρήσιµες. Θα εξετάσουµε αυτή τη συνάρτηση γραµµή προς γραµµή: Γραµµή 1: Λέει στο OCTAVE ότι αυτό το αρχείο ορίζει µια συνάρτηση αντί ένα script. Λέει ότι η συνάρτηση ονοµάζεται sind και ότι παίρνει ένα όρισµα που ονοµάζεται x. Το αποτέλεσµα της συνάρτησης αναγνωρίζεται εσωτερικά σαν s. Ότι το s έχει οριστεί εσωτερικά σε αυτή τη συνάρτηση αυτό είναι που ο χρήστης θα πάρει όταν χρησιµοποιεί την sind συνάρτηση. Γραµµή 2: Είναι γραµµή µε σχόλια. Όπως και µε τα scripts, το πρώτο σύνολο σχολίων στο αρχείο πρέπει να περιγράφει τη συνάρτηση. Αυτή η γραµµή είναι εκείνη που εµφανίζεται όταν ο χρήστης εισάγει help sind. Συνηθίζεται να χρησιµοποιούµε παρόµοια µορφή µε εκείνη που χρησιµοποιείται από του OCTAVE τις ενσωµατωµένες συναρτήσεις. Γραµµή 3: Κάνει τους πραγµατικούς υπολογισµούς αυτής της συνάρτησης. Παίρνει την είσοδο x και αποθηκεύει το αποτέλεσµα του υπολογισµού στη µεταβλητή s, η οποία ορίστηκε στην πρώτη γραµµή σαν το όνοµα του αποτελέσµατος της συνάρτησης. Τερµατισµός της συνάρτησης (End of the function): Οι συναρτήσεις στο OCTAVE δεν χρειάζεται να τερµατίζουν µε την return εντολή (αν και µπορούµε να χρησιµοποιήσουµε την εντολή return για να κάνουµε το OCTAVE να εξέλθει στο µέσο της συνάρτησης). Επειδή κάθε συνάρτηση είναι ένα ξεχωριστό M-file, µόλις φτάσει στο τέλος του αρχείου το OCTAVE γνωρίζει ότι είναι το τέλος της συνάρτησης. Η τιµή που έχει το s στο τέλος της συνάρτησης είναι η τιµή που επιστρέφεται. 8.2 ηµιουργία και χρήση συναρτήσεων (Creating and using functions) ηµιουργείτε την παραπάνω συνάρτηση ανοίγοντας τον κειµενογράφο (editor) (εισάγεται edit εάν δεν είναι ήδη ανοιχτός) και εισάγοντας τις γραµµές της συνάρτησης όπως δίνονται παραπάνω. Αποθηκεύστε το αρχείο σαν sind.m. Επειδή το αρχείο κειµένου πρέπει να έχει το ίδιο όνοµα όπως της συνάρτησης, µε την επέκταση.m. Μπορούµε τώρα να χρησιµοποιήσουµε τη συνάρτηση µε τον ίδιο τρόπο όπως τις εσωτερικές συναρτήσεις του OCTAVE. οκιµάστε εισάγοντας: help sind SIND(X) Calculates sine(x) in degrees που δείχνει ότι η συνάρτηση έχει αναγνωριστεί από το OCTAVE και ότι αυτό έχει βρει την help γραµµή που συµπεριλήφθηκε στον ορισµό της συνάρτησης. Τώρα µπορούµε να δοκιµάσουµε µερικούς αριθµούς: sind(0) ans = Εισαγωγή στο OCTAVE Σελ. 42 από 99

43 0 sind(45) ans = t = sind([ ]) t = Αυτό το τελευταίο παράδειγµα δείχνει ότι επίσης δουλεύει αυτόµατα και µε διανύσµατα. Εάν καλέσουµε τη συνάρτηση sind µε ένα διάνυσµα, σηµαίνει ότι η παράµετρος x µέσα στην συνάρτηση θα είναι διάνυσµα, και σ αυτήν την περίπτωση η συνάρτηση sin γνωρίζει πώς να εργάζεται µε διανύσµατα, έτσι µπορεί να δίνει τη σωστή απόκριση. 8.3 Παράδειγµα 2: Μοναδιαίο βήµα (Example 2: Unit step) Εδώ δίνεται µια περισσότερο επιτηδευµένη συνάρτηση η οποία δηµιουργεί ένα µοναδιαίο βήµα, που ορίζεται σαν: 0, if t< t0 y= 1, otherwise Αυτή η συνάρτηση θα πάρει δύο παραµέτρους: το χρόνο για τον οποίο τιµές πρέπει να δηµιουργηθούν, και t 0, το χρόνο του βήµατος. Η πλήρης συνάρτηση δίνεται παρακάτω: function y = ustep(t, t0) %USTEP(t, t0) unit step at t0 % A unit step is defined as % 0 for t < t0 % 1 for t >= t0 [m, n] = size(t); % Check that this is a vector, not a matrix i.e. (1 x n) or (m x 1) if m ~= 1 & n ~=1 error( T must be a vector ); end y = zeros(m, n); %Initialise output array for k = 1:length(t) if t(k) >= t0 y(k) = 1; %Otherwise, leave it at zero, which is correct end Εισαγωγή στο OCTAVE Σελ. 43 από 99

44 end Ξανά θα κοιτάξουµε τον ορισµό αυτής της συνάρτησης γραµµή προς γραµµή: Γραµµή 1: Η πρώτη γραµµή µας λέει ότι είναι µια συνάρτηση που ονοµάζεται ustep, και ότι ο χρήστης πρέπει να δώσει δύο ορίσµατα, που εσωτερικά είναι γνωστά σαν t και t 0. Το αποτέλεσµα της συνάρτησης είναι µια µεταβλητή, ονοµαζόµενη y. Γραµµές 2-5: Είναι η περιγραφή της συνάρτησης. Αυτή τη φορά το µήνυµα βοήθειας περιέχει µερικές γραµµές. Γραµµή 6: Το πρώτο όρισµα της συνάρτησης ustep, t, συνήθως θα είναι ένα διάνυσµα, το οποίο θα περιέχει τις χρονικές τιµές για τις οποίες η συνάρτηση θα αξιολογήσει. Αυτή η γραµµή χρησιµοποιεί την size συνάρτηση, η οποία επιστρέφει δύο τιµές: τον αριθµό από τις γραµµές και µετά τον αριθµό από τις στήλες ενός διανύσµατος (ή πίνακα). Αυτό δίνει ένα παράδειγµα το πώς οι συναρτήσεις στο OCTAVE µπορούν να επιστρέψουν δύο πράγµατα σε διάνυσµα, φυσικά. Αυτές οι τιµές χρησιµοποιούνται να δηµιουργήσουν ένα διάνυσµα εξόδου του ιδίου µεγέθους, και να ελέγξουν ότι η είσοδος είναι διάνυσµα. Γραµµές 7-10: Ελέγχουν ότι η είσοδος t είναι έγκυρη δηλ. ότι το t δεν είναι ένας πίνακα. Ελέγχει ότι έχει είτε µία γραµµή ή µία στήλη (χρησιµοποιώντας το αποτέλεσµα από την ίδια συνάρτηση). Η συνάρτηση error εµφανίζει ένα µήνυµα και τερµατίζει τη συνάρτηση εάν υπάρχει πρόβληµα. Γραµµή 11: Όπως το σχετικό σχόλιο λέει, αυτή η γραµµή δηµιουργεί τον πίνακα για να βαστάει τις τιµές εξόδου. Αρχικοποιείται να είναι των ιδίων µεγεθών και µορφής όπως η είσοδος t, και για κάθε στοιχείο να είναι µηδέν. Γραµµή 12: Για κάθε χρονική τιµή στο t, θέλουµε να δηµιουργήσουµε µια τιµή για το y. Έτσι χρησιµοποιούµε ένα for loop για να βηµατίσουµε µέσα σε κάθε τιµή. Η συνάρτηση length µας λέει πόσα στοιχεία υπάρχουν στο διάνυσµα t. Γραµµές 13-15: Σύµφωνα µε τον ορισµό µας, εάν t<t 0, τότε η συνάρτηση step έχει την τιµή µηδέν. Το διάνυσµα εξόδου µας ήδη περιέχει µηδενικά, έτσι αγνοούµε αυτή την περίπτωση. Στην άλλη περίπτωση, όταν t>=t 0, η έξοδος πρέπει να είναι 1. Ελέγχουµε για αυτήν την περίπτωση και αντίστοιχα θέτουµε 1 στο y, την µεταβλητή εξόδου µας. Όπως και στις περισσότερες υψηλού επιπέδου γλώσσες, όλες οι µεταβλητές που δηµιουργούνται εσωτερικά σε µια συνάρτηση (m, n και k σε αυτή την περίπτωση) είναι τοπικές στη συνάρτηση. Υπάρχουν µόνο κατά τη διάρκεια της συνάρτησης, και δεν γράφουν πάνω σε µεταβλητές µε το ίδιο όνοµα κάπου αλλού στο OCTAVE. Οι µόνες µεταβλητές που περνούν πίσω είναι οι επιστρεφόµενες τιµές που ορίζονται στην πρώτη συναρτησιακή γραµµή: y σε αυτή την περίπτωση. Εισάγετε αυτή την συνάρτηση στον κειµενογράφο, και αποθηκεύστε την σαν ustep.m. Μπορούµε τώρα να χρησιµοποιήσουµε αυτή την συνάρτηση να δηµιουργήσουµε ένα σήµα. Για παράδειγµα, για τη δηµιουργία ενός µοναδιαίου παλµού διάρκειας ενός δευτερολέπτου, αρχίζοντας στο t=0, µπορούµε πρώτα να ορίσουµε µια χρονική κλίµακα και µετά να χρησιµοποιήσουµε την ustep δύο φορές, όπως παρακάτω: Εισαγωγή στο OCTAVE Σελ. 44 από 99

45 t=-1:0.1:4; v = ustep(t, 0) - ustep(t, 1); plot (t, v) axis ([ ]) Αυτό πρέπει να εµφανίσει τον παλµό, όπως φαίνεται στο Σχήµα 7. Σχήµα 7: Γράφηµα µοναδιαίου, ενός δευτερολέπτου παλµού που δηµιουργήθηκε από δύο µοναδιαία βήµατα, χρησιµοποιώντας την συνάρτηση ustep. Εάν µετά (ανάλογα µε την έκδοση του OCTAVE που έχουµε) εισάγουµε: who *** dynamically linked functions: dispatch *** currently compiled functions: _plt2 plt_ isscalar isvector rows _plt2vv_ axis isstr plot ustep *** local user variables: t v µπορούµε να επιβεβαιώσουµε ότι οι µεταβλητές m και n ορισµένες στην συνάρτηση ustep διατηρήθηκαν µόνο όσο διήρκησε και η συνάρτηση, και δεν είναι µέρος του κυρίως χώρου εργασίας (workspace). Οποιαδήποτε άλλη µεταβλητή στη λίστα, e.g. η y µεταβλητή θα έχει ακόµη την τιµή από προηγούµενους ορισµούς, e.g. y από το rectsin script, αντί των τιµών που ορίστηκαν για την µεταβλητή y στην συνάρτηση ustep. Οι µεταβλητές που ορίζονται και χρησιµοποιούνται εσωτερικά στις συναρτήσεις είναι εντελώς ξεχωριστές από τον κυρίως χώρο. Εισαγωγή στο OCTAVE Σελ. 45 από 99

46 9. Πίνακες και διανύσµατα (Matrices and vectors) Τα διανύσµατα είναι ειδικές περιπτώσεις από πίνακες. Ένας πίνακας είναι µια ορθογώνια διάταξη αριθµών, το µέγεθος του οποίου συνήθως περιγράφεται σαν mxn, που σηµαίνει ότι έχει m γραµµές και n στήλες. Για παράδειγµα, εδώ είναι ένας πίνακας 2x3: A= Για να εισάγουµε αυτόν τον πίνακα στο OCTAVE χρησιµοποιούµε την ίδια σύνταξη όπως και στα διανύσµατα, εισάγοντάς τον γραµµή προς γραµµή: A=[ ] A = εναλλακτικά, µπορούµε να χρησιµοποιήσουµε ερωτηµατικά (semicolons) για να δηλώσουµε το τέλος της γραµµής, όπως σε αυτό το παράδειγµα: B=[2 0; 0-1; 1 0] B = Μπορούµε επίσης να χρησιµοποιήσουµε την µορφή άνω-και-κάτω τελείες (colon): C = [1:3; 8:-2:4] C = Μια τελική εναλλακτική είναι να κτίσουµε τον πίνακα γραµµή προς γραµµή (αυτή είναι ιδιαίτερα καλή για την κατασκευή πινάκων από αποτελέσµατα σε ένα for loop): D = [1 2 3]; D = [D; 4 5 6]; Εισαγωγή στο OCTAVE Σελ. 46 από 99

47 D = [D; 7 8 9] D = Πολλαπλασιασµός πινάκων (Matrix multiplication) Με διανύσµατα και πίνακες, το σύµβολο * αντιπροσωπεύει πολλαπλασιασµό πινάκων, όπως σε αυτά τα παραδείγµατα (χρησιµοποιώντας τους πίνακες που ορίστηκαν παραπάνω): A*B ans = B*C ans = A*C error: operator *: nonconformant arguments (op1 is 2x3, op2 is 2x3) error: evaluating binary operator * near line 11, column 2 Προτείνουµε να επεξεργαστείτε αυτά τα παραδείγµατα µε το χέρι για να θυµηθήτε πώς γίνονται οι πράξεις. Επισηµαίνεται ότι δεν µπορούµε να κάνουµε A*C, διότι οι δύο πίνακες έχουν ασυµβίβαστες διαστάσεις 15. Όταν έχουµε να κάνουµε µε διανύσµατα, υπάρχει λίγη ανάγκη να ξεχωρίσουµε διανύσµατα µεταξύ γραµµής και στήλης. Όταν πολλαπλασιάζουµε διανύσµατα, ωστόσο, θα δουλέψει µόνο µε ένα τρόπο. Ένα διάνυσµα γραµµής είναι 1xn πίνακας, αλλά αυτό δεν µπορεί να πολλαπλασιάσει έναν mxn πίνακα από δεξιά: x = [1 0 3] 15 Γενικά, σε πολλαπλασιασµό πινάκων, οι διαστάσεις των πινάκων είναι: (lxm)*(mxn) (lxn). Όταν προσπαθούµε να κάνουµε A*C, προσπαθούµε να κάνουµε (2x3)*(2x3), που δεν συµφωνεί µε τον προηγούµενο ορισµό. Οι αριθµοί στα µεσαία ζεύγη δεν είναι ίδιοι, που εξηγεί το λεκτικό του µηνύµατος του σφάλµατος. Εισαγωγή στο OCTAVE Σελ. 47 από 99

48 x = A*x error: operator *: nonconformant arguments (op1 is 2x3, op2 is 1x3) error: evaluating binary operator * near line 12, column Ο Τελεστής µετάθεσης (The transpose operator) Όταν µεταθέτουµε ένα διάνυσµα το αλλάζουµε από διάνυσµα γραµµής σε διάνυσµα στήλης ή αντίστροφα. Η µετάθεση ενός πίνακα αλλάζει τις γραµµές µε τις στήλες. Μαθηµατικά, η µετάθεση του A αντιπροσωπεύεται ως A T. Στο OCTAVE µια απόστροφος ( ) εκτελεί αυτή τη λειτουργία: A A = A ans = A*x ans = 32-7 Σ αυτό το τελευταίο παράδειγµα η x εντολή αλλάζει το διάνυσµα γραµµής σε διάνυσµα στήλης, έτσι τώρα µπορεί να πολλαπλασιαστεί από αριστερά µε τον πίνακα Α. 9.3 Συναρτήσεις που δηµιουργούν πίνακες (Matrix creation functions) Το OCTAVE παρέχει µερικές συναρτήσεις που µας βοηθούν να κατασκευάσουµε ειδικούς πίνακες. Έχουµε ήδη δει τις ones και zeros, που δηµιουργούν πίνακες από δεδοµένου µεγέθους γεµάτους µε 1 και 0. Εισαγωγή στο OCTAVE Σελ. 48 από 99

49 Ένας πολύ σπουδαίος πίνακας είναι ο πίνακας ταυτότητας (identity matrix). Αυτός είναι ο πίνακας που όταν πολλαπλασιαστεί µε οποιοιδήποτε άλλο πίνακα ή διάνυσµα δεν αλλάζει τίποτα. Αυτό ο πίνακας συνήθως ονοµάζεται I στους µαθηµατικούς τύπους, έτσι η συνάρτηση OCTAVE καλείται eye. Αυτή παίρνει µόνο µία παράµετρο, επειδή ο πίνακας ταυτότητας πρέπει να είναι τετραγωνικός: I = eye(4) I = Μπορούµε να δοκιµάσουµε ότι αυτός ο πίνακας δεν επιφέρει αλλαγές σε οποιοδήποτε διάνυσµα ή πίνακα: I * [5; 8; 2; 0] ans = Ο πίνακας ταυτότητας (identity matrix) είναι ειδική περίπτωση ενός διαγωνίου πίνακα, µε µηδενικά εκτός από τα στοιχεία στη διαγώνιο: D = Θα µπορούσαµε να κατασκευάσουµε αυτόν τον πίνακα αποκλειστικά, αλλά το OCTAVE παρέχει την συνάρτηση diag η οποία παίρνει ένα διάνυσµα και το θέτει κατά µήκος της διαγωνίου ενός πίνακα: diag([-1 7 2]) ans = Εισαγωγή στο OCTAVE Σελ. 49 από 99

50 Η συνάρτηση diag είναι αρκετά επιτηδευµένη, καθώς εάν η συνάρτηση καλείται για έναν πίνακα, αντί ενός διανύσµατος, µας λέει τα στοιχεία της διαγωνίου του πίνακα. Για τον πίνακα Α που ορίστηκε παραπάνω: diag(a) ans = 5 3 Σηµειώνεται ότι ο πίνακας δεν είναι ανάγκη να είναι τετραγωνικός για να οριστούν τα στοιχεία της διαγωνίου του, και για µη τετραγωνικούς πίνακες ακόµη ξεκινάει από την κορυφή αριστερή γωνία, σταµατώντας όταν δεν υπάρχουν άλλες γραµµές ή στήλες. Τέλος, µερικές φορές είναι χρήσιµο να δηµιουργούµε κενούς πίνακες για να προσθέσουµε σε αυτούς στοιχεία αργότερα. Μπορούµε να κάνουµε αυτό µε το να ορίσουµε τον πίνακα µε ένα κενό ζεύγος από αγκύλες: E = [] E = [] 9.4 ηµιουργώντας σύνθετους πίνακες (Building composite matrices) Είναι συχνά χρήσιµο να έχουµε τη δυνατότητα να κατασκευάσουµε πίνακες από µικρότερα τµήµατα, και αυτό µπορεί εύκολα να γίνει χρησιµοποιώντας τη βασική σύνταξη δηµιουργίας πινάκων: comp = [eye(3) B; A zeros(2,2)] comp = Απλά πρέπει να είµαστε προσεκτικοί ότι κάθε υπο-πίνακας είναι σωστού µεγέθους και µορφής, έτσι ώστε ο τελικός σύνθετος πίνακας να είναι ορθογώνιος. Φυσικά, το OCTAVE θα µας πει εάν κάποιος από αυτούς έχει τον λάθος αριθµό από γραµµές ή στήλες. Εισαγωγή στο OCTAVE Σελ. 50 από 99

51 9.5 Πίνακες σαν διατάξεις στοιχείων (Matrices as tables) Οι πίνακες µπορούν επίσης να χρησιµοποιηθούν για την απλή διάταξη δεδοµένων, και µπορούν να παρέχουν έναν περισσότερο φυσικό τρόπο για την αποθήκευση δεδοµένων: t=0:0.2:1; freq=[sin(t) sin(2*t), sin(3*t) ] freq = Εδώ η nth στήλη του πίνακα περιέχει τα δεδοµένα δειγµατοληψίας του sin(t). Η εναλλακτική θα µπορούσε να είναι η αποθήκευση κάθε σειράς σε δικό της διάνυσµα, καθένα µε διαφορετικό όνοµα. Τότε θα έπρεπε να γνωρίζουµε ποιο είναι το όνοµα κάθε διανύσµατος εάν θα θέλαµε να χρησιµοποιήσουµε τα δεδοµένα. Η αποθήκευση σε πίνακα διευκολύνει την προσπέλαση των δεδοµένων. 9.6 Εξαγωγή τµηµάτων από πίνακες (Extracting bits of matrices) Οι αριθµοί µπορούν να εξαχθούν από έναν πίνακα µε την ίδια σύνταξη όπως για τα διανύσµατα, χρησιµοποιώντας τις παρενθέσεις (). Για έναν πίνακα, προσδιορίζουµε την συντεταγµένη της γραµµής πρώτα και µετά την συντεταγµένη της στήλης (σηµειώνεται ότι σε Καρτεσιανούς όρους, αυτό είναι y και µετά x). Ιδού µερικά παραδείγµατα: J = [ ]; J(1,1) ans = 1 J(2,3) ans = 7 J(1:2, 4) %Rows 1-2, column 4 Εισαγωγή στο OCTAVE Σελ. 51 από 99

52 ans = 4 8 J(3,:) %Row 3, all columns ans = Ο : τελεστής µπορεί να χρησιµοποιηθεί να προσδιορίσει κάποιο εύρος από στοιχεία, ή εάν χρησιµοποιηθεί απλά µόνος του τότε αναφέρεται σε ολόκληρη τη γραµµή ή στήλη. Αυτός ο τύπος εκφράσεων µπορεί επίσης να χρησιµοποιηθεί στην αριστερή πλευρά κάποιας έκφρασης για να γράψουµε στοιχεία σε κάποιον πίνακα: J(3, 2:3) = [-1 0] J = Βασικές συναρτήσεις πινάκων (Basic matrix functions) Το OCTAVE επιτρέπει όλες τις σύνηθες αριθµητικές πράξεις να εφαρµοστούν στους πίνακες. Ο πολλαπλασιασµός πινάκων έχει ήδη συζητηθεί, και οι άλλες κοινές λειτουργίες είναι η πρόσθεση ή αφαίρεση δύο πινάκων του ιδίου µεγέθους και µορφής. Αυτό εύκολα µπορεί να γίνει χρησιµοποιώντας τους + και τελεστές. Όπως µε τα διανύσµατα, το OCTAVE επίσης ορίζει τους τελεστές.* και./, που επιτρέπουν τα αντίστοιχα στοιχεία δύο ταυτόσηµων πινάκων να πολλαπλασιαστούν ή να διαιρεθούν. Όλα τα στοιχεία ενός πίνακα µπορεί να υψωθούν στην ίδια δύναµη χρησιµοποιώντας τον.^ τελεστή. Το OCTAVE επίσης προσφέρει έναν µεγάλο αριθµό από συναρτήσεις για επεξεργασία πινάκων, και µερικές από αυτές (βλ. παρακάτω Πίνακα 6) θα καλυφτούν αργότερα σ αυτό το εγχειρίδιο. Πίνακας 6: Βασικές συναρτήσεις πινάκων και αποσυνθέσεις (Basic matrix functions and decompositions) Συναρτήσεις Περιγραφή eye zeros ones rand diag Create an identity matrix Create a matrix of zeros Create a matrix of ones Create a matrix filled with random numbers Create a diagonal matrix, or extract the diagonal of the given matrix Εισαγωγή στο OCTAVE Σελ. 52 από 99

53 inv det trace eig rank null rref lu qr svd pinv Inverse of a matrix Determinant of a matrix Trace of a matrix Calculate the eigenvectors and eigenvalues of a matrix Calculate an estimate of the rank of a matrix Calculate a basis for the null space of a matrix Perform Gaussian elimination on an augmented matrix Calculate the LU decomposition of a matrix Calculate the QR decomposition of a matrix Calculate the SVD of a matrix Calculate the pseudoinverse of a matrix Η συνάρτηση size µας δίνει τις διαστάσεις ενός πίνακα. Είναι µια συνάρτηση που επιστρέφει ένα διάνυσµα, προσδιορίζοντας τον αριθµό των γραµµών και των στηλών. size(j) ans = 3 4 Ο αντίστροφος ενός πίνακα είναι ένας πίνακας ο οποίος όταν πολλαπλασιαστεί µε τον αρχικό πίνακα µας δίνει τον µοναδιαίο πίνακα (identity matrix) (ΑΑ -1 =Α -1 Α=Ι). Αναιρεί το αποτέλεσµα του αρχικού πίνακα. Ορίζεται µόνο για τετραγωνικούς πίνακες και στο OCTAVE µπορεί να βρεθεί χρησιµοποιώντας την συνάρτηση inv: A = [ ]; inv(a) ans = A*inv(A) %Check the answer Εισαγωγή στο OCTAVE Σελ. 53 από 99

54 ans = Ξανά, σηµειώνονται µερικά από τα αριθµητικά σφάλµατα τα οποία παραµένουν, που εµποδίζουν το OCTAVE από το να αναγνωρίζει µερικά στοιχεία ως ακριβώς ένα ή µηδέν. Η ορίζουσα (determinant) ενός πίνακα είναι µια πολύ χρήσιµη ποσότητα. Ειδικότερα, µια µηδενική ορίζουσα συνεπάγεται ότι ο πίνακας δεν έχει αντίστροφο. Η συνάρτηση det υπολογίζει την ορίζουσα: det(a) ans = Λύνοντας την εξίσωση Ax = b (Solving Ax = b) Μία από τις πιο σπουδαίες χρήσεις των πινάκων είναι η αντιπροσώπευση και επίλυση ταυτόχρονων εξισώσεων. Ένα σύστηµα γραµµικών εξισώσεων είναι: a x + a x + L+ a x = b n n 1 a x + a x + L+ a x = b n n 2 M = M a x + a x + L+ a x = b m1 1 m2 2 mn n m όπου τα a ij και b i είναι γνωστά, και ψάχνουµε για ένα σύνολο τιµών για ταυτόχρονα ικανοποιούν όλες τις εξισώσεις. x i που Αυτό το σύστηµα µπορεί να γραφεί σε µορφή πινάκων-διανυσµάτων ως εξής: ή a11 a12 L a1 n x1 b1 a21 a22 a 2n x 2 b L 2 = M M O M M M am1 am2 L amn xn bm Ax= b Σε αυτή την αντιπροσώπευση, Α είναι ο πίνακας των συντελεστών, b είναι οι σταθερές, και x είναι το διάνυσµα παραµέτρων που αναζητούµε να βρούµε. Επειδή το OCTAVE είναι σχεδιασµένο να επεξεργάζεται πίνακες και διανύσµατα, είναι ιδιαίτερα κατάλληλο να χρησιµοποιηθεί για την επίλυση αυτών των ειδών προβληµάτων. Εισαγωγή στο OCTAVE Σελ. 54 από 99

55 11.1 Λύση όταν Α έχει αντίστροφο (Solution when A is invertible) Το πιο απλό σύνολο γραµµικών εξισώσεων για επίλυση είναι όταν έχουµε n εξισώσεις και n αγνώστους. Σε αυτή την περίπτωση ο πίνακας Α θα είναι τετραγωνικός και µπορεί συχνά να αντιστραφεί. Θεωρείστε το παράδειγµα: x+ y= 3 2x 3y= 5 Επιλύνοντας αυτό στο OCTAVE είναι µια περίπτωση αντιπροσώπευσης των εξισώσεων σε µορφή πίνακα - διανυσµάτων και µετά κάνοντας χρήση του αντιστρόφου του Α για την ανεύρεση της λύσης: A=[ ]; b=[3 5] ; inv(a)*b ans = A*ans % Απλώς για δοκιµή (Just to check) ans = Έτσι η λύση είναι x = 2.8, y = Γκαουσιανή απαλοιφή και LU παραγοντοποίηση (Gaussian elimination and LU factorization) Ο υπολογισµός του αντιστρόφου ενός πίνακα είναι µη αποδοτική µέθοδος για την επίλυση τέτοιων προβληµάτων, ακόµη και εάν το OCTAVE µπορεί να βρει τον αντίστροφο µεγάλων πινάκων πολύ γρηγορότερα από ό,τι εµείς µε το χέρι. Από το µάθηµα γραµµικής άλγεβρας γνωρίζουµε τη µέθοδο Εισαγωγή στο OCTAVE Σελ. 55 από 99

56 της «Γκαουσιανής» απαλοιφής και τη µέθοδο της LU παραγοντοποίησης (που είναι Γκαουσιανή απαλοιφή σε µορφή πινάκων) 16. Αυτές προσφέρουν ένα πιο αποδοτικό τρόπο επίλυσης του Αx=b, και το OCTAVE κάνει πολύ εύκολη τη χρήση της Γκαουσιανής απαλοιφής, ορίζοντάς την ως διαίρεση πινάκων για πίνακες που έχουν αντίστροφο ιαίρεση πινάκων και ο τελεστής καθέτου γραµµής (Matrix division and the slash operator) Σε µια κανονική αλγεβρική εξίσωση, ax=b, εάν θέλουµε να βρούµε την τιµή του x, απλά θα υπολογίσουµε x=b/a. Σε µια πίνακα-διάνυσµα εξίσωση Ax=b, ωστόσο, η διαίρεση δεν ορίζεται και η λύση δίνεται από την x=a -1 b. Σαν συντόµευση για αυτό, το OCTAVE ορίζει έναν ειδικό τελεστή \ (σηµειώνεται ότι αυτός είναι η αντικάθετος, όχι το σύµβολο διαίρεσης «/»), και µπορεί να σκεφτούµε ότι κάνει διαίρεση πινάκων. Χρησιµοποιώντας αυτόν τον τελεστή, η λύση της προηγούµενης εξίσωσής µας µπορεί να υπολογιστεί ως εξής: A\b ans = Σηµειώνεται ότι αυτός δεν είναι τυπικός συµβολισµός και σε µαθηµατικές εκφράσεις πρέπει πάντοτε ακόµη να γράφουµε A -1 b. Πρέπει ακόµη να θυµηθούµε ότι ο πολλαπλασιασµός πινάκων δεν είναι µεταβατικός (δηλ. ΑΒ ΒΑ). Αυτό σηµαίνει ότι ενώ η λύση του AX=B δίνεται µε X=A -1 B η λύση του XA=B είναι X=BA -1, και αυτές οι δύο εκφράσεις είναι διαφορετικές. Σαν αποτέλεσµα, το OCTAVE επίσης ορίζει τον τελεστή / (κάθετος) που κάνει αυτή την άλλη διαφορετική διαίρεση πινάκων. Η προηγούµενη περίπτωση, ωστόσο, είναι περισσότερο πιθανή, και είναι συνήθως η αντικάθετος \ που θα χρειαστούµε. Οι τελεστές των δύο καθέτων γραµµών και οι χρήσεις τους παρουσιάζονται περιληπτικά στον επόµενο Πίνακα 7. Πίνακας 7: Περίληψη των τελεστών του OCTAVE \ και /. Χρησιµοποιούν Γκαουσιανή απαλοιφή εάν ο πίνακας έχει αντίστροφο, διαφορετικά βρίσκει τη λύση ελάχιστων τετραγώνων (Summary of Octave s slash operators. These use Gaussian elimination if the 16 Η συνάρτηση rref θα κάνει την Γκαουσιανή εξάλειψη εάν της δώσουμε έναν προσαυξημένο πίνακα [A b], ή η συνάρτηση lu στο OCTAVE θα κάνει την LU παραγοντοποίηση ενός πίνακα (βλ. help σύστημα). Εισαγωγή στο OCTAVE Σελ. 56 από 99

57 Τελεστής matrix is invertible, and finds the least squares solution otherwise). Για λύση προβλήµατος 11.4 Ιδιόµορφοι πίνακες και τάξη (Singular matrices and rank) Ο τελεστής καθέτου γραµµής (slash operator) προσπαθεί να κάνει ότι είναι το καλύτερο σε οποιοδήποτε πίνακα και διάνυσµα του δοθεί, ακόµη και αν λύση δεν είναι πιθανή, ή είναι ακαθόριστη (undetermined). Θεωρείστε το παράδειγµα: u+ v+ w= 2 OCTAVE εντολή Μαθηµατική ισοδυναµία Όνοµα \ AX=B Α\Β A -1 B 2u+ 3w= 5 3u+ v+ 4w= 6 Αριστερή διαίρεση (left division (backslash)) / XA=B Β/Α BA -1 εξιά διαίρεση (right division (forward slash)) Αυτή είναι ξανά µια εξίσωση της µορφής Ax=b. Εάν δοκιµάσουµε να τη λύσουµε στο OCTAVE χρησιµοποιώντας τον τελεστή της καθέτου (slash operator), παίρνουµε: A=[ ]; b=[ 2 5 6] ; x=a\b; warning: matrix singular to machine precision, rcond = e-17 warning: attempting to find minimum norm solution warning: dgelsd rank difficient 3x3 matrix, rank = 2 x = A*x % οκιµή που δεν µας δίνει πίσω το αρχικό διάνυσµα b ans = Έτσι η λύση που δίνεται δεν είναι λύση της εξίσωσης! Σε αυτή την περίπτωση ο πίνακας Α είναι ιδιόµορφος όπως το OCTAVE µας προειδοποίησε. Αυτό σηµαίνει ότι έχει µηδενική ορίζουσα και έτσι Εισαγωγή στο OCTAVE Σελ. 57 από 99

58 δεν έχει αντίστροφο. (Ακόµη και εάν δεν υπήρχε προειδοποίηση θα έπρεπε να ήµασταν καχύποπτοι από το µέγεθος των τιµών του x. Αυτό επίσης επιβεβαιώνεται όταν ελέγξουµε την ορίζουσα που δίνει αριθµό κοντά στο µηδέν, πχ., det(a) ans = e-16 Όταν ο πίνακας είναι ιδιόµορφος, δεν υπάρχει µοναδική λύση των εξισώσεων. Αλλά έχουµε τρεις εξισώσεις µε τρεις αγνώστους, έτσι γιατί δεν υπάρχει µια µοναδική λύση; Το πρόβληµα είναι ότι δεν είναι τρεις µοναδικές εξισώσεις. Η συνάρτηση rank στο OCTAVE εκτιµά την τάξη ενός πίνακα ο αριθµός γραµµικά ανεξάρτητων γραµµών ή στηλών ενός πίνακα: rank(a) ans = 2 Έτσι υπάρχουν µόνο δύο ανεξάρτητες εξισώσεις σ αυτήν την περίπτωση. Κοιτάζοντας τις αρχικές εξισώσεις περισσότερο προσεκτικά, βλέπουµε ότι οι δύο πρώτες προστίθενται και δίνουν την 3u+v+4w=7 που είναι αντιφατική µε την τρίτη εξίσωση. Με άλλα λόγια, δεν υπάρχει λύση σε αυτές τις εξισώσεις. Το τι έχει συµβεί σε αυτή την περίπτωση είναι ότι, λόγω των σφαλµάτων στρογγυλοποίησης στην Γκαουσιανή απαλοιφή, το OCTAVE έχει βρει µια λανθασµένη λύση. Το δίδαγµα αυτής της ενότητας είναι ότι ο τελεστής της καθέτου γραµµής (slash operator) στο OCTAVE είναι πολύ ισχυρός και χρήσιµος, αλλά πρέπει να τον χρησιµοποιούµε προσεκτικά. Πρέπει να ελέγχουµε τους πίνακες για να είµαστε σίγουροι ότι δεν είναι ιδιόµορφοι, ή σχεδόν ιδιόµορφοι Κακή κατάσταση (Ill-conditioning) Οι πίνακες που είναι κοντά στο να είναι ιδιόµορφοι είναι ένα παράδειγµα από κακής κατάστασης (Ill-conditioned) πίνακες. Ένα πρόβληµα είναι κακής κατάστασης εάν µικρές αλλαγές στα δεδοµένα παράγουν µεγάλες αλλαγές στα αποτελέσµατα. Θεωρείστε το σύστηµα: = για το οποίο το OCTAVE εµφανίζει τη σωστή απάντηση: M=[1 1; ]; b=[2; 2.01]; x=m\b 17 Μερικοί ιδιόµορφοι πίνακες µπορεί να έχουν άπειρες λύσεις, αντί καθόλου λύση. Σ αυτή την περίπτωση, ο τελεστής της καθέτου γραµµής (slash operator) δίνει µόνο µια από τις πιθανές τιµές. Αυτό πάλι είναι κάτι που πρέπει να προσέξουµε. Εισαγωγή στο OCTAVE Σελ. 58 από 99

59 x = Ας αλλάξουµε τώρα ένα από τα στοιχεία του Μ κατά λίγο και να δούµε τι συµβαίνει: M(1,2)=1.005; x=m\b x = Αλλάζοντας αυτό το ένα στοιχείο κατά 0.5% έχει µειώσει το X(1) κατά περίπου 101%, και έχει αυξήσει το X(2) κατά 100%! Η ευαισθησία ενός πίνακα εκτιµάται χρησιµοποιώντας τον αριθµό κατάστασης (condition number), ο ακριβής ορισµός του οποίου είναι πέρα από τον σκοπό αυτού του εγχειριδίου. Ωστόσο, όσο µεγαλύτερος είναι ο αριθµός κατάστασης, τόσο περισσότερο ευαίσθητη είναι η λύση σε αριθµητικά σφάλµατα. Στο OCTAVE ο αριθµός κατάστασης µπορεί να βρεθεί µε τη συνάρτηση cond: cond(m) ans = Ένας κανόνας είναι ότι εάν γράψουµε τον αριθµό κατάστασης σε εκθετική µορφή ax10 k, τότε τα τελευταία k σηµαντικά ψηφία του αποτελέσµατος πρέπει να αγνοηθούν. Το OCTAVE χρησιµοποιεί γύρω στα 15 σηµαντικά ψηφία, έτσι ο αριθµός των σηµαντικών ψηφίων που πρέπει να πιστέψουµε είναι (15 k). Σ αυτό το παράδειγµα, ο αριθµός κατάστασης είναι 4x10 2, έτσι όλες από τις τελευταίες 2 δεκαδικές θέσεις της λύσης πρέπει να αγνοηθούν, δηλ. το αποτέλεσµα είναι τελείως έγκυρο 18. Για τον ιδιόµορφο πίνακα Α από νωρίτερα, που έδωσε το ψεύτικο αποτέλεσµα, η συνάρτηση cond δίνει τον αριθµό κατάστασης x ηλαδή, όλο το αποτέλεσµα πρέπει να αγνοηθεί Υπερπροσδιορισµένα συστήµατα: Ελάχιστα τετράγωνα (Over-determined systems: Least squares) Ένα συνηθισµένο πρόβληµα είναι όταν επιθυµούµε να ταιριάξουµε (παλινδρόµηση) ένα µαθηµατικό µοντέλο σε ένα µεγάλο αριθµό από δεδοµένα σηµεία. Κάθε δεδοµένο σηµείο µπορεί να εκφραστεί 18 Αυτό υποθέτει ότι οι τιµές που εισήχθησαν στον αρχικό πίνακα Μ και το διάνυσµα b ήταν ακριβείς σε 15 σηµαντικά ψηφία. Εάν αυτές οι τιµές ήταν γνωστές σε µικρότερη ακρίβεια, τότε χάνουµε k σηµαντικά ψηφία από αυτή την ακρίβεια. Εισαγωγή στο OCTAVE Σελ. 59 από 99

60 µε όρους της εξίσωσης του µοντέλου, δίνοντας ένα σύνολο από ταυτόχρονες εξισώσεις που είναι υπερπροσδιορισµένες, δηλ. ο αριθµός των ανεξάρτητων εξισώσεων, m, είναι µεγαλύτερος από τον αριθµό των µεταβλητών, n. Σ αυτή την περίπτωση δεν είναι δυνατόν να βρεθεί µια ακριβής λύση, αλλά η επιθυµητή λύση είναι το καλύτερο ταίριασµα. Αυτό συνήθως ορίζεται σαν τις παραµέτρους του µοντέλο που ελαχιστοποιούν το τετράγωνο του σφάλµατος για κάθε δεδοµένο σηµείο. Για ένα σύνολο εξισώσεως που µπορεί να γραφτεί ως Ax=b, η λύση ελάχιστων τετραγώνων δίνεται µε την ψευδοαντίστροφο: x = (A T A) -1 A T b Στο OCTAVE µπορούµε να χρησιµοποιήσουµε τον \ τελεστή. Για πίνακες µε αντίστροφο ορίζεται για την επίλυση της εξίσωσης χρησιµοποιώντας την Γκαουσιανή απαλοιφή, αλλά για τα υπερπροσδιορισµένα συστήµατα βρίσκει τη λύση των ελάχιστων τετραγώνων. Η ψευδοαντίστροφος µπορεί επίσης να υπολογιστεί στο OCTAVE χρησιµοποιώντας την συνάρτηση pinv, όπως επιδεικνύεται στο ακόλουθο παράδειγµα Παράδειγµα: Τριγωνοποίηση (Example: Triangulation) Ένας ραδιοποµπός χεριού ανιχνεύεται από τρεις διαφορετικούς σταθµούς βάσης, ο καθένας από τους οποίους παρέχει µια µέτρηση της κατεύθυνσης προς τον ποµπό. Το διάνυσµα από κάθε σταθµό βάσης σχεδιαγράφεται σε έναν χάρτη και πρέπει όλα να τέµνονται στη θέση του ποµπού. Οι τρεις γραµµές στο χάρτη µπορεί να περιγραφτούν µε τις εξισώσεις: 2x y= 2 x+ y= 5 6x y= 5 Η λύση ελάχιστων τετραγώνων στο σηµείο που τέµνονται µπορεί να υπολογιστεί στο OCTAVE µε πολλούς διαφορετικούς τρόπους εφόσον ορίσουµε τις εξισώσεις µε πίνακες: A = [2-1; 1 1; 6-1]; b = [2 5-5] ; x = inv(a *A)*A *b x = Εισαγωγή στο OCTAVE Σελ. 60 από 99

61 x=pinv(a)*b x = x = A\b x = Φυσικά, όλοι οι παραπάνω τρόποι, δίνουν την ίδια λύση. Αυτή η λύση φαίνεται στο παρακάτω Σχήµα 8 µε τον αστερίσκο. Ο κώδικας που σχεδιαγραφεί τις προηγούµενες τρείς εξισώσεις, οι οποίες λόγω διαφόρων σφαλµάτων δεν υπάρχει ένα κοινό σηµείο στο οποίο αυτές τέµνονται, καθώς και το ελαχίστων τετραγώνων τους σηµείο που αυτές τέµνονται είναι ως εξής: x = linspace(-4, 4, 1000); y1 = 2*x+2; y2 = -x +5; y3 = 6*x + 5; A = [2-1; 1 1; 6-1]; b = [2 5-5] ; simeio = A\b; plot(x, y1, x, y2, x, y3, simeio(1), simeio(2), *); xlabel('x'); ylabel('y'); title ( Plot of 2x-y=2, x+y=5, 6x-y=-5 and simeio=[ ] ); legend( y1 = 2*x+2',' y2 = -x +5', y3 = 6*x + 5, simeio ); grid on; Εισαγωγή στο OCTAVE Σελ. 61 από 99

62 Σχήµα 8: Τρεις γραµµές και η ελάχιστων τετραγώνων εκτίµηση του σηµείου που τέµνονται. 12. Περισσότερα για τα γραφήµατα (More graphs) Το OCTAVE παρέχει περισσότερο επιτηδευµένες δυνατότητες γραφικών από το να σχεδιαγραφεί απλά 2D Καρτεσιανά γραφήµατα, πάλι χρησιµοποιώντας το GNUPlot. Μπορεί επίσης να παράγει ιστογράµµατα, 3D επιφάνειες, σχεδιαγράµµατα καµπυλών και πολικά σχεδιαγράµµατα. Λεπτοµέρειες από όλα αυτά µπορεί να βρεθούν στο help σύστηµα και επιπρόσθετα στο GNUPlot εγχειρίδιο Θέτοντας µερικά γραφήµατα σε ένα παράθυρο (Putting several graphs in one window) Εάν έχουµε µερικά γραφήµατα που µοιράζονται παρόµοιο θέµα, µπορούµε να τα σχεδιαγράψουµε σε ξεχωριστά γραφήµατα µέσα στο ίδιο γραφικό παράθυρο. Η εντολή subplot διαχωρίζει το παράθυρο γραφικών σε µια διάταξη από µικρότερα παράθυρα. Η γενική µορφή είναι: subplot(rows, columns, select) Το select όρισµα προσδιορίζει το τρέχον γράφηµα στη διάταξη. Αυτά τα µικρότερα παράθυρα είναι αριθµηµένα από την κορυφή αριστερά, σχεδιογραφώντας τα πρώτα κατά την γραµµή. Το παράδειγµα παρακάτω δηµιουργεί δύο γραφήµατα, το ένα κάτω στο άλλο, όπως φαίνονται στο Σχήµα 9. x = linspace(-10, 10); subplot(2,1,1) % Specify two rows, one column, and select % the top one as the current graph plot(x, sin(x)); subplot(2,1,2); plot(x, sin(x)./x); Εισαγωγή στο OCTAVE Σελ. 62 από 99

63 Σχήµα 9: Παράδειγµα της εντολής subplot, δεικνύοντας ένα sine και sinc γράφηµα το ένα κάτω από το άλλο. Οι τυπικές για τους άξονες ετικέτες και για τους τίτλους εντολές µπορεί επίσης να χρησιµοποιηθούν σε κάθε subplot Τρισδιάστατα σχεδιαγράµµατα (3D plots) Το OCTAVE παρέχει µια ευρεία γκάµα µεθόδων απεικόνισης 3D δεδοµένων. Ο πιο απλός τρόπος για 3D γραφήµατα είναι plot3, που είναι το 3D ισοδύναµο της εντολής plot. Χρησιµοποιείται για σχεδιαγράφηση σηµείων ή γραµµών, αυτή η εντολή απλά παίρνει µια λίστα από x, y και z τιµές. Το ακόλουθο παράδειγµα σχεδιαγραφεί έναν έλικα, χρησιµοποιώντας µια παραµετρική αντιπροσώπευση 19. t = 0:pi/50:10*pi; x = sin(t); y = cos(t); z = t; plot3(x, y, z); Το γράφηµα δεικνύεται στο Σχήµα 10. Οι εντολές xlabel και ylabel δουλεύουν όπως προηγουµένως και τώρα η εντολή zlabel µπορεί επίσης να χρησιµοποιηθεί. Όταν σχεδιαγραφούµε γραµµές ή σηµεία σε 3D µπορούµε να χρησιµοποιήσουµε όλα τα στυλ που είναι στη λίστα του Πίνακα Μια γραµµή είναι µόνο µιας διάστασης µορφή µπορούµε να ορίσουµε ένα σηµείο πάνω στο µήκος της γραµµής, αλλά δεν έχει πλάτος ή ύψος. Οι γραµµές λοιπόν µπορούν να περιγραφούν µε όρους µόνο µιας παραµέτρου: την απόσταση κατά µήκος της γραµµής. Τα x, y (και 3D z) συντεταγµένες από σηµεία στην γραµµή µπορούν όλα να γραφούν σαν συναρτήσεις αυτής της απόστασης κατά µήκος της γραµµής: εάν είµαι τόσο µακριά κατά µήκος της γραµµής, πρέπει να είµαι σε αυτό το σηµείο. Εισαγωγή στο OCTAVE Σελ. 63 από 99

64 Σχήµα 10: Παράδειγµα της εντολής plot3, δεικνύοντας έναν έλικα Αλλάζοντας την οπτική γωνία (Changing the viewpoint) Εάν θέλουµε να περιστρέψουµε το 3D σχεδιάγραµµα για να το δούµε από µια άλλη γωνία, η πιο εύκολη µέθοδος είναι να χρησιµοποιήσουµε το ποντίκι. (Κάνοντας κλικ και σύροντας µε το ποντίκι πάνω στο σχεδιάγραµµα θα περιστρέψει και θα εστιάσει το γράφηµα κλπ. Βοηθά εάν το γράφηµα έχει ετικέτες πρώτα). Λεπτοµέρειες για τις περισσότερο χρησιµοποιούµενες εντολές δίνονται στον Πίνακα Πίνακας 8: Ποντίκι και πλήκτρα για αλληλεπίδραση µε 3D γραφικά (Mouse and Key binds for interaction with 3D graphs). (LMB - Left Mouse Button, MMB Middle Mouse Button), βλ. επίσης Πίνακα 4. Ποντίκι (Mouse) Ενέργειες LMB + motion <Ctrl> + LMB + motion MMB + motion <Ctrl> + MMB + motion <Shift> + MMB + motion Πλήκτρα Rotate View Rotate axes (View update when button released) Scale View Scale axes (View update when button released) vertical motion change ticslevel Ενέργειες Rotate right (<shift> increases amount) Rotate up (<shift> increases amount) Rotate left (< shift> increases amount) Rotate down (<shift> increases amount) Η OCTAVE εντολή view µπορεί επίσης να χρησιµοποιηθεί για την επιλογή και για να θέσει µια συγκεκριµένη οπτική γωνία, (χρησιµοποίησε help view για περισσότερες πληροφορίες). 20 Το MATLAB έχει ένα υπερβάλλον γραφικό αλληλεπιδραστικό χρησιµοποιώντας ένα GUI. Εισαγωγή στο OCTAVE Σελ. 64 από 99

65 12.4 Σχεδιαγράφοντας επιφάνειες (Plotting surfaces) Μια άλλη κοινή απαίτηση για 3D γραφικά είναι η σχεδιαγράφηση µια επιφάνειας, που ορίζεται σαν συνάρτηση δύο µεταβλητών f(x, y), και αυτές µπορεί να σχεδιαγραφούν στο OCTAVE µε διαφορετικούς τρόπους. Πρώτα όµως, για να σχεδιαγραφήσουµε αυτές τις συναρτήσεις χρειαζόµαστε ένα πλέγµα σηµείων στα οποία η συνάρτηση πρέπει να αξιολογηθεί. Ένα τέτοιο πλέγµα (grid) µπορεί να δηµιουργηθεί µε την χρήση της meshgrid συνάρτησης του OCTAVE: x = 2:0.2:4; % Define the x- and y- coordinates y = 1:0.2:3; % of the grid lines [X, Y] = meshgrid(x, y); %Make the grid Οι πίνακες X και Y τότε περιέχουν τις x και y συντεταγµένες των σηµείων δείγµατος. Η συνάρτηση µπορεί να αξιολογηθεί σε κάθε ένα από αυτά τα σηµεία. Για παράδειγµα, για τη σχεδιαγράφηση της συνάρτησης f(x, y) = (x 3) 2 (y 2) 2 πάνω στο πλέγµα που υπολογίστηκε προηγουµένως, θα εισάγουµε: Z=(X-3).^2 - (Y-2).^2; surf(x, Y, Z) Η εντολή surf είναι µία από τους πιθανούς τρόπους απεικόνισης της επιφάνειας. Το Σχήµα 11 δεικνύει, στην κορυφή αριστερά, αυτή την επιφάνεια σχεδιαγραφηµένη χρησιµοποιώντας την εντολή surf, και επίσης τα αποτελέσµατα από µερικές άλλες δυνατές 3D εντολές σχεδιαγράφησης. Surf Σχήµα 11: Παραδείγµατα της ίδιας επιφάνειας µορφής-σαµάρι (saddle-shaped) απεικονιζόµενης χρησιµοποιώντας διαφορετικές OCTAVE εντολές. ( οκιµάστε τη σχεδιαγράφηση των άλλων 3 γραφηµάτων στο ίδιο σχήµα χρησιµοποιώντας την εντολή subplot(2, 2, i)). Εισαγωγή στο OCTAVE Σελ. 65 από 99

66 12.5 Εικόνες και κινηµατογραφική ταινία (Images and Movies) Μια εικόνα είναι απλά ένας πίνακας, όπου κάθε αριθµός αντιπροσωπεύει το χρώµα ή την ένταση εκείνου του κάθε εικονοστοιχείου (pixel). εν πρέπει λοιπόν να εκπλαγούµε ότι το OCTAVE µπορεί επίσης να κάνει επεξεργασία εικόνας. Ας υποθέσουµε ότι ένας πίνακας µε τιµές φωτεινότητας µιας εικόνας έχει αποθηκευτεί σε ένα αρχείο που ονοµάζεται cued.mat, τότε οι παρακάτω εντολές το φορτώνουν και το εµφανίζουν: load cued colormap(gray(64)) % Tell Octave to expect a grayscale image image(a) Η εντολή image εµφανίζει τον πίνακα σαν µια εικόνα. Η εντολή colormap λέει στο OCTAVE να διερµηνεύσει κάθε αριθµό σαν σκιά του grey, και τι είναι το εύρος των αριθµών 21. Το OCTAVE µπορεί επίσης να δηµιουργήσει και να εµφανίσει κινηµατογραφικές ταινίες (movies), αλλά σε αντίθεση µε το MATLAB αυτή η δυνατότητα είναι δύσχρηστη. Ελπίζοµε να βελτιωθεί αυτή η δυνατότητα στο µέλλον. 13. Ιδιοδιανύσµατα και Αποσύνθεση ιδιόµορφων τιµών (Eigenvectors and the Singular Value Decomposition) Μετά από τη λύση της Ax=b, η άλλη σπουδαία εξίσωση πινάκων είναι Ax=λx, η λύση της οποίας είναι τα ιδιοδιανύσµατα (eigenvectors) και οι ιδιοτιµές (eigenvalues) του πίνακα Α. Εξισώσεις αυτής της µορφής εµφανίζονται συχνά σε εφαρµογές µηχανικών, και το OCTAVE πάλι παρέχει τα κατάλληλα εργαλεία Η συνάρτηση eig (The eig function) Η συνάρτηση eig στο OCTAVE υπολογίζει τα ιδιοδιανύσµατα και τις ιδιοτιµές. Εάν χρησιµοποιηθεί µόνη της, απλά επιστρέφει ένα διάνυσµα που περιέχει τις ιδιοτιµές, όπως για παράδειγµα: A = [ ]; eig(a) ans = οκιµάστε colormap(jet) για ένα παράδειγµα µιας εναλλακτικής διερµηνείας των αριθµών (αυτό είναι το προεπιλεγµένο colormap). Το colormap επίσης χρησιµοποιείται να προσδιορίσει τα χρώµατα για το ύψος στις 3D εντολές σχεδιαγράφησης. Εισαγωγή στο OCTAVE Σελ. 66 από 99

67 Για να πάρουµε τα ιδιοδιανύσµατα, χρειαζόµαστε να δώσουµε δύο µεταβλητές για την απάντηση: [V, D] = eig(a) V = D = Οι στήλες του πίνακα V είναι τα ιδιοδιανύσµατα, και οι ιδιοτιµές αυτή τη φορά επιστρέφονται στη διαγώνιο ενός πίνακα. Τα ιδιοδιανύσµατα και οι ιδιοτιµές επιστρέφονται σ αυτή τη µορφή διότι αυτή είναι συµβατή µε τη διαγώνιο µορφή του πίνακα. Πρέπει να ανακαλέσουµε, εάν U είναι ο πίνακας µε τα ιδιοδιανύσµατα και Λ ο διαγώνιος πίνακας µε τις ιδιοτιµές, τότε A = UΛU 1. Μπορούµε εύκολα να το ελέγξουµε αυτό χρησιµοποιώντας τους πίνακες που επιστράφηκαν µε την εντολή eig: V*D*inv(V) ans = που είναι ο αρχικός πίνακας A Αποσύνθεση ιδιόµορφων τιµών (The Singular Value Decomposition) Τα ιδιοδιανύσµατα και οι ιδιοτιµές µπορεί να βρεθούν µόνο για ένα τετραγωνικό πίνακα, και έτσι η αποσύνθεση σε UΛU 1 είναι δυνατή µόνο για αυτούς του πίνακες. Η αποσύνθεση ιδιόµορφων τιµών (Singular Value Decomposition (SVD)) είναι µια πολύ χρήσιµη τεχνική, η οποία προσφέρει µια παρόµοια αποσύνθεση για οποιονδήποτε πίνακα. Λεπτοµέρειες καλύπτονται στο µάθηµα Γραµµική Άλγεβρα, αλλά µια σύνοψη του αποτελέσµατος της αποσύνθεσης δίνεται εδώ. T Η SVD τεχνική παίρνει έναν m n πίνακα A και τον παραγοντοποιεί σε A= Q1Σ Q2, όπου: Q 1 είναι ένας m m ορθογώνιος πίνακας µε στήλες τα ιδιοδιανύσµατα του AA T Q 2 είναι ένας n n ορθογώνιος πίνακας µε στήλες τα ιδιοδιανύσµατα του A T A Σ είναι ένας m n διαγώνιος πίνακας µε στοιχεία τις τετραγωνικές ρίζες των ιδιοτιµών του AA T και A T A (και οι δύο έχουν τις ίδιες ιδιοτιµές, αλλά διαφορετικά ιδιοδιανύσµατα) Εισαγωγή στο OCTAVE Σελ. 67 από 99

68 Αυτό το αποτέλεσµα καλύτερα φαίνεται γραφικά: T Q2 ( nxn) A( mxn) Q1 ( mxm) Σ( mxn) m = m m n n m n n Το πιο σπουδαίο µέρος αυτής της αποσύνθεσης είναι η θεώρηση του πίνακα Σ, ο διαγώνιος πίνακας, του οποίου τα στοιχεία ονοµάζονται ιδιόµορφες τιµές, σ i : σ 1 σ 2 O 0 Σ= σr 0 O 0 0 Επειδή είναι µέρος του διαγωνίου πίνακα, αυτές πολλαπλασιάζουν µόνο ειδικές στήλες του Q 1 ή του Q Το µέγεθος της ιδιόµορφης τιµής µας λέει ακριβώς πόσο επηρεασµό οι αντίστοιχες γραµµές και στήλες του Q 1 και Q 2 T έχουν στον διαγώνιο πίνακα. Ευκρινώς, εάν µία ιδιόµορφη τιµή είναι µικρή, πολύ λίγο από τις αντίστοιχες γραµµές και στήλες προστίθενται στον πίνακα A όταν ανακατασκευαστεί. Είναι συχνά κοινό για έναν πίνακα να έχει µερικές µηδενικές ιδιοτιµές, όπως φαίνεται παραπάνω. Αυτά τα µηδενικά στοιχεία στη διαγώνιο αντιστοιχούν στις γραµµές ή στήλες που δεν δίνουν επιπρόσθετες πληροφορίες. Αυτό σηµαίνει, φυσικά, ότι όχι όλος ο πίνακας είναι χρήσιµος δηλαδή είναι ελλιπής στην τάξη (rank deficient). Ή, σε όρους ταυτόχρονες εξισώσεις, ότι όχι όλες οι εξισώσεις είναι ανεξάρτητες. Η τεχνική SVD είναι πολύ χρήσιµο εργαλείο για την ανάλυση ενός πίνακα, και οι λύσεις σε πολλά προβλήµατα µπορεί απλά να διαβαστούν από την αποσύνθεση των πινάκων. Για παράδειγµα, ο µηδενικός χώρος ενός πίνακα (η λύση Ax = 0) είναι απλά οι στήλες του Q 2 που αντιστοιχούν στις µηδενικές ιδιόµορφες τιµές. Η SVD είναι επίσης αριθµητικά υψηλά ευσταθής πίνακες που είναι λίγο κακής κατάστασης (ill-conditioned) έχουν περισσότερες δυνατότητες να δουλεύουν µε SVD από οτιδήποτε άλλο. 22 Οι ιδιόµορφες τιµές Σ φυσικά πολλαπλασιάζουν τις γραµµές του Q 2 T, και έτσι τις στήλες του µηαντιστραµένης έκδοσης, Q 2. Εισαγωγή στο OCTAVE Σελ. 68 από 99

69 13.3 Προσέγγιση πινάκων: Αλλαγή τάξης (Approximating matrices: Changing rank) Μια άλλη σπουδαία χρήση της τεχνικής SVD είναι η διορατικότητα που δίνει στο ποσό που ένας πίνακας είναι σπουδαίος, και πώς να απλοποιηθεί ένας πίνακας µε ελάχιστη αποδιοργάνωση. Οι ιδιόµορφες τιµές είναι συνήθως διατεταγµένες σε σειρά µεγέθους, µε την πρώτη σ 1, να είναι η µεγαλύτερη και περισσότερο σηµαντική. Οι αντίστοιχες στήλες του Q 1 και Q 2 είναι επίσης διατεταγµένες σε σπουδαιότητα. Αυτό σηµαίνει ότι, ενώ µπορούµε να βρούµε την ακριβή τιµή του A πολλαπλασιάζοντας Q 1 ΣQ 2 T, εάν εξαλείψουµε (για παράδειγµα) την τελευταία στήλη του Q 1 και Q 2, και την τελευταία ιδιόµορφη τιµή, θα εξαλείφουµε τα λιγότερο σπουδαία δεδοµένα. Εάν µετά πολλαπλασιάσουµε αυτούς τους απλούστερους πίνακες, θα πάρουµε µόνο κάποια προσέγγιση του A, αλλά εκείνη που ακόµη περιέχει όλες εκτός τις πιο ασήµαντες πληροφορίες Η svd εντολή (The svd function) Η τεχνική SVD εκτελείται στο OCTAVE χρησιµοποιώντας την συνάρτηση svd. Όπως µε την συνάρτηση eig, από µόνη της επιστρέφει τις ιδιόµορφες τιµές (singular values), αλλά εάν της δοθούν τρεις πίνακες για την απάντηση τότε θα τους συµπληρώσει µε την πλήρη αποσύνθεση: A = [ ]; svd (A) ans = [U, S, V] = svd (A, 0) U = e e e e e e e e e-01 S = Εισαγωγή στο OCTAVE Σελ. 69 από 99

70 V = U*S*V % Check Answers ans = Σηµειώνεται ότι το OCTAVE αυτόµατα βάζει σε σειρά τις ιδιόµορφες τιµές σε φθίνουσα διάταξη Η εντολή svd (Economy SVD) Αν ένας πίνακας Α διαστάσεων m n έχει m > n, τότε ο πίνακας µοναδικών τιµών του Σ, θα έχει τουλάχιστον µια γραµµή µε µηδενικά: [U, S, V] = svd (A) U = S = V = Εάν µετά θεωρήσουµε τον πολλαπλασιασµό A = U*S*V, µπορούµε να δούµε ότι η τελευταία στήλη του U δεν έχει λόγο ύπαρξης: πολλαπλασιάζει τα µηδενικά της S, και έτσι κάλλιστα µπορεί να φύγει. Έτσι αυτή η τελευταία στήλη µπορεί µε ασφάλεια να εξαλειφθεί, και το ίδιο ισχύει για την τελευταία γραµµή του S. Τότε αυτό που µένει είναι πίνακες της ακόλουθης µορφής: Εισαγωγή στο OCTAVE Σελ. 70 από 99

71 T A( mxn ) Σ ( nxn ) Q2 ( nxn ) Q1 ( mxm ) M M M M m m = n n n m n n Το OCTAVE µπορεί να κάνει αυτή την οικονοµική τεχνική SVD µε το να προσθέσουµε ένα, 0 στο όρισµα της συνάρτησης (µηδέν, όχι το γράµµα ο ): [U, S, V] = svd (A, 0) U = S = V = Αυτό συνιστάται για πίνακες αυτής της µορφής, διότι παίρνει πολύ λιγότερο µνήµη και χρόνο να επεξεργαστούν. 14. Μιγαδικοί αριθµοί (Complex numbers) Πέρα από τους υπολογισµούς πινάκων και διανυσµάτων, το OCTAVE επίσης υποστηρίζει πολλά µαθηµατικά σκεπτικά και σκεπτικά µηχανικής, και µεταξύ αυτών είναι οι µιγαδικοί αριθµοί. Οι µιγαδικοί αριθµοί µπορεί να εισαχθούν στο OCTAVE ακριβώς όπως τους γράφουµε, για παράδειγµα: z1 = 4-3i z1 = 4-3i Εναλλακτικά, τα i και j αρχικοποιούνται από το OCTAVE να είναι 1 και έτσι (εάν δεν ορίσαµε διαφορετικά) µπορούµε να εισάγουµε: z2 = 1 + 3*j Εισαγωγή στο OCTAVE Σελ. 71 από 99

72 z2 = 1 + 3i Μπορούµε να εκτελέσουµε όλες τις σύνηθες αριθµητικές πράξεις στους µιγαδικούς αριθµούς, ακριβώς όπως για τους πραγµατικούς αριθµούς: z2-z1 ans = i z1+z2 ans = 5 z2/z1 ans = i z1^2 ans = 7-24i Το OCTAVE επίσης παρέχει µερικές συναρτήσεις και άλλες τυπικές µιγαδικές πράξεις, όπως ανεύρεση µιγαδικού συζυγή, µέγεθος και τη φάση αριθµού, κλπ. (βλ. επόµενο Πίνακα 9). Πίνακας 9: Συναρτήσεις µιγαδικών αριθµών (Complex number functions) Συνάρτηση (function) Σηµασία (meaning) Ορισµός (definition (z= a+ bi )) imag Imaginary part b real Real part a abs Absolute value (modulus) r= z conj Complex conjugate z = a bi angle Phase angle (argument) θ = 1 tan ( b / a) Άλλες συναρτήσεις που µαθηµατικά ορίζονται για µιγαδικούς αριθµούς, όπως sin(x) ή e x, επίσης λειτουργούν µε µιγαδικούς αριθµούς: sin (z2) Εισαγωγή στο OCTAVE Σελ. 72 από 99

73 ans = i exp (j*pi) %Should be -1 ans = e e-16i exp (j*2) ans = i cos (2) + j*sin(2) %Should be the same as e^2i ans = i Πίνακες και διανύσµατα µπορούν, φυσικά, επίσης να περιέχουν µιγαδικούς αριθµούς Σχεδιαγράφοντας µιγαδικούς αριθµούς (Plotting complex numbers) Η εντολή plot του OCTAVE επίσης καταλαβαίνει µιγαδικούς αριθµούς. Έτσι µπορούµε να την χρησιµοποιήσουµε για να κάνουµε το Argand σχεδιάγραµµα (όπου ο x-άξονας αντιπροσωπεύει το πραγµατικό µέρος και ο y-άξονας το φανταστικό): plot (z1, *, z2, * ) axis ([ ]) Αυτές οι εντολές παράγουν τα σχεδιαγράµµατα που φαίνονται στο Σχήµα 12. Σχήµα 12: Γραφική αντιπροσώπευση των µιγαδικών αριθµών z1 = 4 3i και z2 = 1 + 3i χρησιµοποιώντας τη συνάρτηση plot. Εισαγωγή στο OCTAVE Σελ. 73 από 99

74 14.2 Βρίσκοντας ρίζες πολυωνύµων (Finding roots of polynomials) Για την εύρεση ριζών πολυωνυµικών εξισώσεων, το OCTAVE παρέχει την συνάρτηση roots. Η εξίσωση εισάγεται στο OCTAVE, χρησιµοποιώντας ένα διάνυσµα για τους συντελεστές. Για παράδειγµα, η πολυωνυµική εξίσωση: θα αντιπροσωπευτεί ως: x x x x = 0 c = [ ]; Η συνάρτηση roots καλείται χρησιµοποιώντας αυτό το διάνυσµα: roots (c) ans = i i i i i 15. Χειρισµοί πολυωνύµων (Polynomial manipulation) Στο Octave ένα πολυώνυµο αντιπροσωπεύεται από τους συντελεστές του (διατεταγµένους σε φθίνουσα σειρά). Για παράδειγµα, ένα διάνυσµα c µήκους N+1 αντιστοιχεί στο εξής πολυώνυµο τάξης N: p(x) = c(1) x^n c(n) x + c(n+1) Η τιµή ενός πολυωνύµου που αντιπροσωπεύεται από το διάνυσµα c µπορεί να αποτιµηθεί στο σηµείο x πολύ εύκολα, όπως φαίνεται στο επόµενο παράδειγµα: c = [1 2 3]; N = length(c)-1; val = dot( 2.^(N:-1:0), c ); val = 11 Ενώ το παραπάνω παράδειγµα δείχνει πόσο εύκολο είναι να υπολογιστεί η τιµή ενός πολυωνύµου, δεν είναι όµως ο πιο ευσταθής αλγόριθµος. Με µεγαλύτερα πολυώνυµα πρέπει να χρησιµοποιούµε περισσότερο κοµψούς αλγόριθµους, όπως τη µέθοδο του Horner, που είναι ακριβώς αυτή που χρησιµοποιείται στη συνάρτηση polyval (c, x) του Octave. Για να πάρουµε τη γραφική παράσταση του p(x) (βλ. παρακάτω Σχήµα 13) στο διάστηµα [-1, 1] γράφουµε: Εισαγωγή στο OCTAVE Σελ. 74 από 99

75 x=linspace(-1, 1); plot(x, polyval(c, x)) Σχήµα 13: Γραφική παράσταση του p(x). Στην περίπτωση που το x είναι τετραγωνικός πίνακας, το πολυώνυµο που δίνεται µε το διάνυσµα c παραµένει να είναι καλά-ορισµένο. Όπως όταν το x είναι αριθµός η προφανής υλοποίηση εύκολα εκφράζεται στο Octave, αλλά επίσης σε αυτή την περίπτωση περισσότερο κοµψοί αλγόριθµοι αποδίδουν καλύτερα. Η συνάρτηση polyvalm (c, x) παρέχει έναν τέτοιο αλγόριθµο, δηλ. η polyvalm (c, x) θα αποτιµήσει το πολυώνυµο µε την έννοια των πινάκων, που σηµαίνει πολλαπλασιασµός πινάκων χρησιµοποιείται αντί στοιχείο προς στοιχείο πολλαπλασιασµό όπως χρησιµοποιείται στην polyval. Το όρισµα x πρέπει να είναι ένας τετραγωνικός πίνακας Υπολογισµός ριζών (Finding Roots) Το Octave µπορεί να βρει τις ρίζες ενός δεδοµένου πολυωνύµου υπολογίζοντας τον συµπληρωµατικό (companion) πίνακα του πολυωνύµου (βλ. την συνάρτηση compan, παρακάτω για ορισµό), και µετά βρίσκοντας τις ιδιοτιµές του (eigenvalues). Η συνάρτηση roots (v) για ένα διάνυσµα v µε N στοιχεία, επιστρέφει τις ρίζες του πολυωνύµου: v(1) * z^(n-1) v(n-1) * z + v(n) Για παράδειγµα, ο παρακάτω κώδικας υπολογίζει τις ρίζες του τετραγωνικού πολυωνύµου p(x) = x^2 5: c = [1, 0, -5]; roots(c) Εισαγωγή στο OCTAVE Σελ. 75 από 99

76 ans = Σηµειώνεται ότι το πραγµατικό αποτέλεσµα είναι +/- sqrt(5) που είναι περίπου +/ Βλέπετε επίσης τη συνάρτηση compan Η συνάρτηση compan (c) Η συνάρτηση compan (c) υπολογίζει τον συµπληρωµατικό (companion) πίνακα που αντιστοιχεί στο πολυώνυµο µε συντελεστές το διάνυσµα c. Ο συµπληρωµατικός (companion) πίνακας είναι: c2 / c1 c3 / c1 L cn / c1 cn+ 1 / c L A= 0 1 L 0 0 M M O M M 0 0 L 1 0 Οι ιδιοτιµές του συµπληρωµατικού πίνακα είναι ίσον µε τις ρίζες του πολυωνύµου Γινόµενο και διαίρεση πολυωνύµων Για να πολλαπλασιάσουµε δύο πολυώνυµα χρησιµοποιούµε την εντολή conv (a, b). Για παράδειγµα, για τον πολλαπλασιασµό των πολυωνύµων p(x)=x+2 και q(x)=x^2+4x+8: p=[1, 2]; q=[1, 4, 8]; z=conv(p, q) z = Βρήκαµε, δηλαδή, ότι z(x) = p(x) q(x) = x^3 + 6x^2 + 16x Για να διαιρέσουµε δύο πολυώνυµα χρησιµοποιούµε την εντολή deconv(a,b). Για παράδειγµα, για να διαιρέσουµε τώρα το z(x) µε το q(x) έχουµε: [p, r] = deconv(z, q) p = 1 2 r = (Η διαίρεση είναι φυσικά ακριβής.) Εισαγωγή στο OCTAVE Σελ. 76 από 99

77 15.4 Παράγωγος ενός πολυωνύµου Για να βρούµε την παράγωγο ενός πολυωνύµου χρησιµοποιούµε την εντολή polyder (p). Για παράδειγµα, η παράγωγος του p(x) = 3x^3 4x^2 x + 2 είναι: p=[3, -4, -1, 2]; polyder(p) ans = Χαρακτηριστικό πολυώνυµο ενός τετραγωνικού πίνακα Η εντολή poly βρίσκει το χαρακτηριστικό πολυώνυµο ενός τετραγωνικού πίνακα. Για παράδειγµα: A=[1, 2, 3; 0, 2, 4; 0 0 5] A = p=poly(a) p = Μπορούµε να βρούµε τις ρίζες του χαρακτηριστικού πολυωνύµου (δηλ. τις ιδιοτιµές του Α) µε την: roots(p) ans = ή πιο απλά µε την εντολή eig: eig(a) ans = Εισαγωγή στο OCTAVE Σελ. 77 από 99

78 15.6 Προσαρµογή δεδοµένων (curve fitting) Μια από τις κύριες εφαρµογές των πολυωνύµων είναι η προσαρµογή δεδοµένων (curve fitting), που είναι επίσης γνωστή ως παλινδρόµηση (regression). Σε αυτή τη διαδικασία, έχουµε σαν δεδοµένα ένα πεπερασµένο αριθµό σηµείων και θέλουµε να βρούµε µια συνάρτηση, συνήθως πολυώνυµο µικρού βαθµού, που να αντιπροσωπεύει τα δεδοµένα, δηλ. να προσαρµόσουµε το πολυώνυµο στα δεδοµένα. Αν απαιτήσουµε το πολυώνυµο να περνά από όλα τα σηµεία), τότε παίρνουµε το λεγόµενο πολυώνυµο παρεµβολής (interpolant), του οποίου ο βαθµός είναι ίσος µε τον αριθµό των σηµείων πλην ένα. Αν δεν απαιτήσουµε το πολυώνυµο να περνά από όλα τα σηµεία, αλλά να έχει βαθµό µικρότερο από τον αριθµό των σηµείων πλην ένα, τότε αυτό µπορεί να γίνει µε διάφορες µεθόδους, η πιο συνηθισµένη των οποίων είναι η µέθοδος των ελάχιστων τετραγώνων (least squares method). Στο Octave τα πιο πάνω γίνονται µε την εντολή polyfit, που δουλεύει ως εξής: Έστω ότι τα (xi, yi), i= 1,...,N+1 είναι τα δεδοµένα που έχουν αποθηκευτεί σε δύο διανύσµατα x και y, αντίστοιχα. Τότε, η εντολή: p = polyfit(x, y, Μ) µας δίνει τους συντελεστές του πολυωνύµου p που έχει βαθµό Μ και που αντιπροσωπεύει τα δεδοµένα. Σηµειώνεται ότι αν Μ=Ν, τότε παίρνουµε τους συντελεστές του πολυώνυµου παρεµβολής που περνά από όλα τα σηµεία (xi, yi), ενώ αν Μ<N τότε παίρνουµε τους συντελεστές ενός πολυωνύµου που προσαρµόζει τα δεδοµένα µε την µέθοδο των ελάχιστων τετραγώνων. Αν Μ>N, τότε το πολυώνυµο δεν είναι µοναδικό. Όµως αυτή η περίπτωση δεν παρουσιάζει ενδιαφέρον. Για παράδειγµα, έστω ότι έχουµε: x = [ ]; y = [ ]; Τότε, p = polyfit(x, y, 3) p = το οποίο σηµαίνει ότι το πολυώνυµο p (x) = 2x^3 15x^2 + 35x 20 περνά από όλα τα δοθέντα σηµεία, µιας και έχουµε 4 σηµεία και το πολυώνυµο που κατασκευάστηκε έχει βαθµό 3. Εισαγωγή στο OCTAVE Σελ. 78 από 99

79 Για να κάνουµε τη γραφική παράσταση του p(t) (βλ. παρακάτω Σχήµα 14), µε t στο διάστηµα [1, 4] και για να δείξουµε τα δεδοµένα σηµεία στους ίδιους άξονες, εισάγουµε τον παρακάτω κώδικα: t = linspace(1, 4); p_times = polyval(p, t); plot(t, p_times, x, y, 'o') xlabel('x') ylabel('y') legend('p(x)','data') Σχήµα 14: Γραφική παράσταση του p(x). 16. OCTAVE - Εφαρµογές στα Συστήµατα Αυτοµάτου Ελέγχου Η θεωρία αυτοµάτου ελέγχου είναι ένας διεπιστηµονικός κλάδος της µηχανικής και των εφαρµοσµένων µαθηµατικών µε αντικείµενο την ανάλυση, σχεδιασµό και υλοποίηση ελεγκτών που αυτόµατα (χωρίς την ανθρώπινη επέµβαση) χειρίζονται τις εισόδους ενός δυναµικού συστήµατος για να επιτευχθεί το επιθυµητό αποτέλεσµα στην έξοδο. Έστω το δυναµικό σύστηµα που αποτελείται από ένα ελατήριο και µια µάζα κρεµασµένη στο ένα άκρο του όπως στο παρακάτω σχήµα. Εισαγωγή στο OCTAVE Σελ. 79 από 99

80 Η διαφορική εξίσωση που περιγράφει τις δυναµικές του συστήµατος είναι: 2 d d M yt ( ) + b yt ( ) + kyt ( ) = ut ( ) 2 dt dt όπου: k...είναι ο συντελεστής σκληρότητας του ελατηρίου M...η µάζα του ελατηρίου y(t)... είναι η απόσταση του κέντρου βάρους της µάζας από το σηµείο ισορροπίας, και u(t)...είναι η κάθετη δύναµη την οποία εφαρµόζουµε στη µάζα b...µια σταθερά που εξαρτάται από την αντίσταση του αέρα. Εάν οι παράµετροι M=10, κ=5 και b=2, τότε γνωρίζουµε ότι η χαρακτηριστική εξίσωση της 2 οµογενούς εξίσωσης του συστήµατος είναι 10p + 2p+ 5= 0. Χρησιµοποιώντας το OCTAVE βρίσκουµε τις ρίζες του χαρακτηριστικού πολυωνύµου του συστήµατος: p = [10 2 5]; roots (p) ans = i i Επειδή οι ρίζες είναι µιγαδικές αυτό σηµαίνει ότι η ελεύθερη απόκριση του συστήµατος θα παρουσιάζει ταλαντώσεις. Επίσης γνωρίζουµε ότι εάν ορίσουµε για τη θέση και την ταχύτητα τις καταστάσεις x ( t) = yt ( ) και 1 x& ( t) = yt &( ) = x ( t) αντίστοιχα, τότε στο χώρο καταστάσεων το σύστηµα που περιγράφεται µε µε 1 2 την παραπάνω δευτέρας τάξης διαφορική εξίσωση µπορεί να αντικατασταθεί µε το παρακάτω σύστηµα δύο διαφορικών εξισώσεων πρώτης τάξης: x& t x& ( t) x ( t) 1 1 ( ) = k b 1 u( t) Ax( t) bu( t) x2 ( t) = + = + x2 ( t) & M M M x1 ( t) y( t) = [ 1 0] x2( t) Εισαγωγή στο OCTAVE Σελ. 80 από 99

81 Θέτοντας τις τιµές των παραµέτρων M=10, κ=5 και b=2 το παραπάνω σύστηµα γίνεται: x& 1( t) 0 1 x1 ( t) 0 ut ( ) x2( t) = x2 ( t) 0.1 & x1( t) yt ( ) = [ 1 0 ] = Cxt ( ) + 0 ut ( ) x2( t) Στο OCTAVE το παραπάνω σύστηµα στο χώρο καταστάσεων αντιπροσωπεύεται µε το αντικείµενο που δηµιουργείται µε την εντολή ss (state space) ως εξής: A = [0 1; ]; b = [0; 0.1]; c = [1 0]; sys = ss(a, b, c, 0); 16.1 Ελεύθερη απόκριση συστήµατος Η ελεύθερη απόκριση ενός συστήµατος είναι η έξοδός του yελ ( t) όταν η είσοδος είναι 0. Αφού πρώτα έχουµε ορίσει το διάνυσµα του χρόνου, το διάνυσµα της εισόδου και τις αρχικές του συνθήκες y (0) = 1 και dy(0) / dt= y& (0) = 2, µπορούµε εύκολα να επιβεβαιώσουµε ότι η ελεύθερη απόκριση του συστήµατος παρουσιάζει ταλαντώσεις και να βρούµε την µέγιστη τιµή της κάνοντας προσοµοίωση στο OCTAVE χρησιµοποιώντας την εντολή lsim ως εξής: t = [0:0.1:100]; u = zeros(1001, 1); y0 = 1; 2]; y = lsim (sys, u, t, y0); mx=max(abs(y)) % µέγιστη τιµή ταλάντωσης plot(t,y,'color',[0 0 1], 'LineWidth',2, mx, * ); title('free response of a Mass Spring System'); xlabel('t'), ylabel('y(t)'), grid('on'); mx = Το παρακάτω Σχήµα 15 δεικνύει τις ταλαντώσεις της ελεύθερης απόκρισης του συστήµατος και τη µέγιστη αποµάκρυνση mx = που παρουσιάζει το ελατήριο από τη θέση ισορροπίας. Εισαγωγή στο OCTAVE Σελ. 81 από 99

82 Σχήµα 15: Ελεύθερη απόκριση ενός συστήµατος µάζας-ελατηρίου Κρουστική απόκριση συστήµατος Η απόκριση του συστήµατος σε είσοδο την κρουστική συνάρτηση Dirac δ(t) δίνεται από την εντολή: impulse(sys, 1, 100, 1000); title('impulse response of a Mass Spring System'); όπου 1 είναι ο δείκτης της µεταβλητής που διεγείρεται, 100 είναι πάλι το χρονικό διάστηµα που µελετάµε το σύστηµα (βλ. παρακάτω Σχήµα 16), και 1000 είναι το πλήθος των σηµείων προσοµοίωσης. Σχήµα 16: Κρουστική (Impulse) απόκριση του συστήµατος. Εισαγωγή στο OCTAVE Σελ. 82 από 99

83 16.3 Βηµατική απόκριση συστήµατος Αντίστοιχα µε την εντολή step υπολογίζουµε την απόκριση του συστήµατος σε βηµατική είσοδο: step(sys, 1, 100, 1000); title('step response of a Mass Spring System'); όπου 1 είναι ο δείκτης της µεταβλητής που διεγείρεται, 100 είναι πάλι το χρονικό διάστηµα που µελετάµε το σύστηµα (βλ. παρακάτω Σχήµα 17), και 1000 είναι το πλήθος των σηµείων προσοµοίωσης. Σχήµα 17: Βηµατική (Step) απόκριση του συστήµατος Σχεδιασµός ελεγκτή γραµµικού ρυθµιστή Η απόκριση του συστήµατος (βλ. παραπάνω Σχήµα 17) µε βηµατική είσοδο δεικνύει ότι στο αρχικό διάστηµα υπάρχουν αισθητές ταλαντώσεις οι οποίες αποσβήνουν περίπου τελείως στο χρονικό διάστηµα µετά τα 40 sec. Είναι επιθυµητό να σχεδιαστεί ένας ανατροφοδοτικός (feedback) ελεγκτής έτσι ώστε για βηµατική είσοδο αυτές να µην είναι πολύ αισθητές και να αποσβήνουν σε σύντοµο χρονικό διάστηµα. Υπάρχουν αρκετοί τρόποι σχεδίασης τέτοιων ελεγκτών. Εδώ θα χρησιµοποιήσουµε τη µεθοδολογία του γραµµικού ρυθµιστή (linear regulator). Ο γραµµικός ρυθµιστής είναι ο ανατροφοδοτικός ελεγκτής που για το σύστηµα: xt &( ) = Axt ( ) + But ( ) ελαχιστοποιεί το τετραγωνικό κόστος: Εισαγωγή στο OCTAVE Σελ. 83 από 99

84 T T J = x ( t) Qxt ( ) + u ( t) Rut ( ) dt to όπου οι πίνακες βαρύτητας των καταστάσεων Q 0 και του ελέγχου R> 0. Το OCTAVE έχει ενσωµατωµένη τη συνάρτηση lqr η οποία επιστρέφει το κέρδος Κ του ανατροφοδοτικού ελεγκτή ut ( ) = Kxt ( ) έτσι ώστε το σύστηµα κλειστού βρόχου [ ] xt &( ) = A BK xt ( ) = Aclxt ( ) να είναι ευσταθές (ιδιοτιµές του πίνακα A cl µικρότερες του µηδενός). Επίσης η συνάρτηση lqr, σύµφωνα µε τη θεωρία, δίνει τη λύση της αλγεβρικής Riccati εξίσωσης και τις ιδιοτιµές του κλειστού βρόχου συστήµατος A cl. Η σύνταξη της συνάρτησης lqr είναι: [k, p, e] = lqr (a, b, q, r) 15 0 Έτσι επιλέγοντας τους πίνακες βαρύτητας των καταστάσεων Q= και του ελέγχου R= 0.25> 0 ο παρακάτω OCTAVE κώδικας µας δίνει τη βηµατική απόκριση του κλειστού βρόχου συστήµατος που δεικνύεται στο Σχήµα 18: A = [0 1; ]; b = [0; 0.1]; c = [1 0]; q = [10 0; 0 25]; r = 0.25; [k, p, e] = lqr (A, b, q, r); Acl = A b*k; sys = ss(acl, b, c, 0); step(sys, 1, 100, 1000); title('step response of the Closed loop Mass Spring System'); Εισαγωγή στο OCTAVE Σελ. 84 από 99

85 Σχήµα 18: Βηµατική Απόκριση συστήµατος κλειστού βρόχου. Συγκρίνοντας τα παραπάνω Σχήµατα 17 και 18 είναι προφανές ότι ο γραµµικός ρυθµιστής (ανατροφοδοτικός ελεγκτής) αποσβήνει πλήρως τις ταλαντώσεις του συστήµατος σε σύντοµο χρονικό διάστηµα και µε χωρίς µεγάλη υπερύψωση. 17. Εφαρµογές του OCTAVE στη Ψηφιακή Επεξεργασία Σήµατος Η ψηφιακή επεξεργασία σήµατος (Digital signal processing (DSP)) διαπραγµατεύεται την αντιπροσώπευση σηµάτων µε µια αλληλουχία αριθµών ή συµβόλων και την επεξεργασία αυτών των σηµάτων. Περιλαµβάνει διάφορους τοµείς όπως επεξεργασία ακουστικών σηµάτων και οµιλίας, σηµάτων sonar και radar, σηµάτων διατάξεων αισθητήρων, εκτιµήσεις φάσµατος, στατιστική επεξεργασία σήµατος, ψηφιακή επεξεργασία εικόνων, επεξεργασία σηµάτων τηλεπικοινωνιών, σηµάτων βιοϊατρικής, έλεγχο συστηµάτων, επεξεργασία σεισµικών δεδοµένων, κλπ Συνέλιξη και φιλτράρισµα (Convolution and Filtering) Η µαθηµατική υποδοµή για το φιλτράρισµα σηµάτων είναι η συνέλιξη (convolution). Η OCTAVE συνάρτηση conv εκτελεί την τυπική µονο-διάστατη συνέλιξη ενός διανύσµατος µε ένα άλλο: Για παράδειγµα, conv([1 1 1],[1 1 1]) ans = Εισαγωγή στο OCTAVE Σελ. 85 από 99

86 Η έξοδος y(k) ενός ψηφιακού φίλτρου είναι η συνέλιξη του σήµατος εισόδου του x(k) µε την κρουστική του απόκριση (impulse response) h(k). Μαθηµατικά, η αντιπροσώπευση αυτής της σχέσης έχει ως εξής: y( k) = hk ( )* xk ( ) = hk ( n) xn ( ) n= Εάν η κρουστική απόκριση h(k) ενός φίλτρου είναι πεπερασµένου µήκους και η είσοδός του x(k) είναι επίσης πεπερασµένου µήκους, τότε µπορούµε να υλοποιήσουµε το φίλτρο χρησιµοποιώντας τη συνάρτηση conv. Αποθηκεύουµε τις τιµές x(k) σε ένα διάνυσµα x, τις τιµές h(k) σε ένα διάνυσµα h, και εκτελούµε τη συνέλιξή τους ως εξής: x = randn(5,1); % Τυχαίο διάνυσµα µήκους 5 (µε διαστάσεις 5x1) h = ¼*[ ]; % Φίλτρο µέσου όρου µήκους 4 y = conv(h,x); y = Φίλτρα και συναρτήσεις µεταφοράς (Filters and Transfer Functions) Γενικά, ο µετασχηµατισµός-ζ Y(z) της εξόδου y(n) ενός ψηφιακού φίλτρου σχετίζεται µε το µετασχηµατισµό-ζ X(z) της εισόδου του x(n) ως εξής: 1 n b(1) + b(2) z bn ( + 1) z Y ( z) = H ( z) X ( z) = X ( z) 1 m a(1) + a(2) z a( m+ 1) z όπου H(z) είναι η συνάρτηση µεταφοράς του φίλτρου. Οι σταθερές b(i) και a(i) είναι οι συντελεστές του φίλτρου και η τάξη του φίλτρου είναι το µέγιστο των n και m. Το OCTAVE αποθηκεύει τους συντελεστές σε δύο διανύσµατα σε µορφή γραµµής, ένα για τον αριθµητή (b) και ένα για τον παρονοµαστή (a). Εισαγωγή στο OCTAVE Σελ. 86 από 99

87 Αρκετά τυπικά ονόµατα φίλτρων αντανακλούν τον αριθµό των a και b συντελεστών που υπάρχουν ως εξής: Όταν n = 0 (που σηµαίνει ότι το b είναι ένας αριθµός), το φίλτρο είναι ένα Infinite Impulse Response (IIR) φίλτρο, all-pole, recursive, ή autoregressive (AR) φίλτρο. Όταν m = 0 (που σηµαίνει ότι το a είναι ένας αριθµός), το φίλτρο είναι ένα Finite Impulse Response (FIR), all-zero, nonrecursive, ή moving-average (MA) φίλτρο. Εάν και τα δύο n και m είναι µεγαλύτερα από µηδέν, το φίλτρο είναι ένα IIR, pole-zero, recursive, ή autoregressive moving-average (ARMA) φίλτρο. Τα αρκτικόλεξα AR, MA, και ARMA συνήθως χρησιµοποιούνται σε φίλτρα που σχετίζονται µε το φιλτράρισµα στοχαστικών διεργασιών Συνάρτηση filter (Function filter) Από το z-µετασχηµατισµό µπορούµε να µεταβούµε πίσω στη µορφή της σχέσης µε την εξίσωση διαφορών. Υποθέτοντας ότι a(1) = 1, πολλαπλασιάζουµε τον παρονοµαστή µε την αριστερή πλευρά και παίρνουµε τον αντίστροφο z-µετασχηµατισµό (inverse z-transform) ως εξής: y( k) + a y( k 1) a y( k m) = bxk ( ) + bxk ( 1) b xk ( n) 2 m n+ 1 Με τους τρέχοντες και παρελθοντικούς όρους της εισόδου και τις παρελθοντικές τιµές της εξόδου y(k) έχουµε: y( k) = bxk ( ) + bxk ( 1) b xk ( n) a y( k 1) a y( k m) 1 2 n+ 1 2 m+ 1 Αυτή η αντιπροσώπευση είναι τυπική (standard) στο πεδίο του χρόνου για ένα ψηφιακό φίλτρο, και υπολογίζεται αρχίζοντας µε y(1) και υποθέτοντας µηδενικές αρχικές συνθήκες. Η πρόοδος αυτής της αντιπροσώπευσης είναι: y(1) = bx(1) 1 y(2) = bx(2) + bx(1) a y(1) y(3) = bx(3) + bx(2) + bx(1) a y(2) a y(1) M = M Ένα φίλτρο σε αυτή τη µορφή είναι εύκολο να υλοποιηθεί µε τη συνάρτηση filter του OCTAVE. Για παράδειγµα, ένα απλό χαµηλοπερατό (lowpass) φίλτρο ενός πόλου είναι: Εισαγωγή στο OCTAVE Σελ. 87 από 99

88 b = 1; % Αριθµητής a = [1-0.9]; % Παρονοµαστής όπου τα διανύσµατα b και a αντιπροσωπεύουν τους συντελεστές ενός φίλτρου σε µορφή συνάρτησης µεταφοράς. Για την εφαρµογή αυτού του φίλτρου σε δεδοµένα µε το διάνυσµα x χρησιµοποιούµε τη σύνταξη: y = filter(b, a, x); Η συνάρτηση filter µας δίνει τόσα δείγµατα εξόδου όσα υπάρχουν στην είσοδο, δηλ. το µήκος του διανύσµατος y είναι το ίδιο µε το µήκος του διανύσµατος x. Εάν το πρώτο στοιχείο του a δεν είναι 1, η συνάρτηση filter διαιρεί του συντελεστές µε a(1) πριν την υλοποίηση της εξίσωσης διαφορών Κρουστική Απόκριση (Impulse Response) Η κρουστική απόκριση ενός ψηφιακού φίλτρου είναι η έξοδος που προκύπτει από τη µοναδιαία κρουστική αλληλουχία στην είσοδο που ορίζεται ως: 1, n= 1 xn ( ) = 0, n 1 Στο OCTAVE µπορούµε να δηµιουργήσουµε µια κρουστική αλληλουχία µε πολλούς τρόπους. Ένας απλός τρόπος είναι: imp = [1; zeros(49, 1)]; Η κρουστική απόκριση του απλού φίλτρου b = 1 και a = [1-0.9] είναι: h = filter(b, a, imp); 17.5 ιακριτός µετασχηµατισµός Fourier (Discrete Fourier Transform) Ο διακριτός µετασχηµατισµός Fourier (discrete Fourier transform), ή DFT, είναι το κύριο εργαλείο για ψηφιακή επεξεργασία σήµατος. Η αλγοριθµική µέθοδος για τον υπολογισµό του DFT µε µειωµένο χρόνο εκτέλεσης είναι ο γρήγορος µετασχηµατισµός Fourier (fast Fourier transform (FFT)). Το OCTAVE παρέχει τις συναρτήσεις fft και ifft για τον υπολογισµό του διακριτού µετασχηµατισµού Fourier (discrete Fourier transform, DFT) και τον αντίστροφό του αντίστοιχα. Για µια αλληλουχία εισόδου x και του DFT µετασχηµατισµού του X (σε ισοµερή συχνότητες γύρω από τον µοναδιαίο κύκλο), οι δύο συναρτήσεις υλοποιούν τις σχέσεις: Εισαγωγή στο OCTAVE Σελ. 88 από 99

89 N 1 X ( k+ 1) = xn ( + 1) W n= 0 k= 0 kn N N 1 1 xn ( + 1) = X ( k+ 1) W N kn N όπου N 2π j( ) N W = e. Για παράδειγµα, µπορούµε να δηµιουργήσουµε ένα διάνυσµα χρόνου και ένα διάνυσµα σήµατος ως εξής: t = (0:1/100:10-1/100); x = sin(2*pi*15*t) + sin(2*pi*40*t); % ιάνυσµα χρόνου % Σήµα Τότε το DFT του σήµατος, το µέτρο και η φάση της µετασχηµατισµένης σειράς είναι: y = fft(x); % Υπολογισµός DFT του x m = abs(y); p = unwrap(angle(y)); % Μέτρο καο φάση Για να πάρουµε το γράφηµα του µέτρου και της φάσης (βλ. Σχήµα 19) εισάγουµε τις εξής εντολές: f = (0:length(y)-1)*99/length(y); % Frequency vector plot(f, m); title('magnitude'); set(gca,'xtick',[ ]); figure; plot(f, p*180/pi); title('phase'); set(gca, 'XTick',[ ]); Σχήµα 19: Μέτρο και φάση του y=fft((sin(2*pi*15*t) + sin(2*pi*40*t)). Εισαγωγή στο OCTAVE Σελ. 89 από 99

90 Για να πειραµατιστείτε µε τον αντίστροφο διακριτό µετασχηµατισµό Fourier (συνάρτηση ifft) δοκιµάστε το παρακάτω παράδειγµα όπου η αρχική αλληλουχία x και η ανακτηµένη αλληλουχία είναι ταυτόσηµες (στα πλαίσια σφάλµατος στρογγυλοποίησης). t = (0:1/255:1); x = sin(2*pi*120*t); y = real(ifft(fft(x))); 18. Επεξεργασία εικόνας µε την Οκτάβα 18.1 Εργαλειοθήκη επεξεργασίας εικόνας «image» Για την επεξεργασία εικόνας χρειαζόµαστε την σχετική εργαλειοθήκη image. Οι εργαλειοθήκες της Οκτάβας παρατίθενται στη δνση: Στην σελίδα που θα εµφανιστεί αναφέρονται όλες οι εργαλειοθήκες που είναι άνω των 80. Επιλέγοντας details βλέπουµε τις εντολές µιας εργαλειοθήκης ενώ πατώντας download τις κατεβάζουµε. Πάντως ο πιο εύκολος τρόπος εγκατάστασης είναι µέσω του Synaptics package manager. Η Οκτάβα προσφέρεται για επεξεργασία εικόνων γιατί οι εικόνες παριστάνονται ως δισδιάστατοι (grayscale) ή τρισδιάστατοι πίνακες (έγχρωµες). Ο όρος grayscale αποδίδεται εδώ ως γκρι και όχι ασπρόµαυρη [που έχει µόνο άσπρα και µαύρα εικονοστοιχεία]. Το : στο τέλος της εντολής αποκρύπτει τους ενδιάµεσους αριθµητικούς υπολογισµούς. Το # δηλώνει σχόλιο. Πηγή: Ακολουθεί Κώδικας µε σχόλια 18.2 Εισαγωγή και προβολή εικόνων clc # clear screen - καθαρισµός οθόνης τερµατικού # Χρησιµοποιούµε την εντολή imread( διαδροµή ) για να διαβάσουµε # µιαν εικόνα. myimage1 = imread("/home/antony/octave_scripts/d5.gif"); # get # original image no.1 myimage2 =imread("/home/antony/octave_scripts/applbw.jpg"); # get Εισαγωγή στο OCTAVE Σελ. 90 από 99

91 # original gray image no.1 myimage3 =imread("/home/antony/octave_scripts/apple.jpg"); # get # original image no.3 # Χρησιµοποιούµε την εντολή imshow(όνοµα_εικόνας) για να # διαβάσουµε µιαν εικόνα. imshow(myimage1) # πρόβαλε την εικ.1 Εικ. 1 Αρχική εικόνα 18.3 Μετατροπές εικόνων # Η δυαδική συνάρτηση isgray(εικόνα1) επιστρέφει 1 αν η εικόνα1 είναι # σε διαβαθµίσεις του γκρί. ιαφορετικά, (έγχρωµη), επιστρέφει 0. # isgray() # Boolean. Returns true for a gray-scale intensity image. # Η συνάρτηση flipud(myimage1) αναποδογυρίζει µια γκρί εικόνα # try with a colour image to see the difference # Αναποδογύρισε και πρόβαλε µιαν εικόνα αν είναι γκρί if (isgray(myimage1)) cc=flipud(myimage1); # flip a 2-D (B/W) image; disp('image is grayscale') imshow(cc) # show result else disp('image is NOT grayscale') end # end_if Η συνάρτηση rgb2gray µετατρέπει µιαν έχρωµη εικόνα σε γκρί. # rgb2gray # Converts an RGB image to a gray scale image Εισαγωγή στο OCTAVE Σελ. 91 από 99

92 myimage2 = imread("/home/antony/octave_scripts/d5.gif"); # get # original image no.2 d6= rgb2gray(myimage2); # convert to gray BOOL1 = isgray(d6) # check if gray [should be "1"] imshow(d6) # show result # j=histeq(d6) # δείξε το ιστόγραµµα της εικ. d6 Εικ.2 Μετατροπή αρχικής εικόνας σε γκρι # ALTERNATIVELY, --- µια πιο συµπαγής σύνταξη είναι: # d7= rgb2gray(imread("/home/antony/octave_scripts/d5.gif")); # get original image no.1 # imshow(d7) # Τώρα που έχουµε την γκρί εικόνα, µπορούµε να την # αναποδογυρίσουµε: d7=flipud(d6); imshow(d7) # flip a 2-D (B/W) image; # show result Εικ.3 Αναποδογύρισµα της γκρι εικόνας [δ7] Εισαγωγή στο OCTAVE Σελ. 92 από 99

93 18.4 Επεξεργασία γκρί εικόνας Περιστροφή γκρί εικόνας # Χρησιµοποιούµε την εντολή imrotate που συντάσσεται ως εξής: ## imrotate(imgpre, THETA, METHOD, BBOX, EXTRAPVAL) d8= imrotate(d6, 30, "nearest", "loose", 0); # περιστροφή κατά 30 imshow(d8) # show result Εικ.4 Περιστροφή της γκρι εικόνας κατά 30 [δ8] d9= imrotate(d6, -30, "nearest", "crop", 0); # περιστροφή κατά # -30 και επιπλέον, # kopse o,ti perisseuei apo to arxiko plaisio imshow(d9) # show result Εικ.5 Περιστροφή της γκρι εικόνας κατά -30 µέσα στο αρχικό πλαίσιο [δ9] d10 =imresize(d6,0.5); # Σµίκρυνση 50% Εισαγωγή στο OCTAVE Σελ. 93 από 99

Εισαγωγή στην Αριθμητική Ανάλυση

Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στη MATLAB ΔΙΔΑΣΚΩΝ: ΓΕΩΡΓΙΟΣ ΑΚΡΙΒΗΣ ΒΟΗΘΟΙ: ΔΗΜΗΤΡΙΑΔΗΣ ΣΩΚΡΑΤΗΣ, ΣΚΟΡΔΑ ΕΛΕΝΗ E-MAIL: SDIMITRIADIS@CS.UOI.GR, ESKORDA@CS.UOI.GR Τι είναι Matlab Είναι ένα περιβάλλον

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Γενικός τρόπος σύνταξης: Όνομα_συνάρτησης(όρισμα1,όρισμα2,,όρισμαΝ) Η ονομασία τους είναι δεσμευμένη. Παραδείγματος χάριν: sin(x) cos(x) tan(x) exp(x)

Γενικός τρόπος σύνταξης: Όνομα_συνάρτησης(όρισμα1,όρισμα2,,όρισμαΝ) Η ονομασία τους είναι δεσμευμένη. Παραδείγματος χάριν: sin(x) cos(x) tan(x) exp(x) Εσωτερικές (built-in) συναρτήσεις του Matlab Γενικός τρόπος σύνταξης: Όνομα_συνάρτησης(όρισμα1,όρισμα2,,όρισμαΝ) Επιτελούν διάφορες προκαθορισμένες λειτουργίες Η ονομασία τους είναι δεσμευμένη Παραδείγματος

Διαβάστε περισσότερα

Για τη δημιουργία ενός διανύσματος με στοιχεία από το 0 μέχρι το 20 με βήμα το 2 (χρησιμοποιείται συνήθως για διανύσματα χρόνου) δίνουμε

Για τη δημιουργία ενός διανύσματος με στοιχεία από το 0 μέχρι το 20 με βήμα το 2 (χρησιμοποιείται συνήθως για διανύσματα χρόνου) δίνουμε Εργαστήριο Συστημάτων Αυτομάτου Ελέγχου Άσκηση 1 η Εισαγωγή στο Matlab 1 Άσκηση 1 η : Εισαγωγή στο Matlab Αντικείμενο Εξοικείωση με τις βασικές λειτουργίες του Matlab (πρόγραμμα αριθμητικής ανάλυσης και

Διαβάστε περισσότερα

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) 8 ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) ιάλεξη 2 2.1 ΜΕΤΑΒΛΗΤΕΣ (ΜΕΡΟΣ Β) Στην προηγούµενη διάλεξη µάθαµε ότι µπορούµε να χρησιµοποιούµε τη ρητή ή την αυτονόητη δήλωση µεταβλητών

Διαβάστε περισσότερα

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

Εισαγωγή στο MATLAB. Κολοβού Αθανασία, ΕΔΙΠ, Εισαγωγή στο MATLAB Κολοβού Αθανασία, ΕΔΙΠ, akolovou@di.uoa.gr Εγκατάσταση του Matlab Διανέμεται ελεύθερα στα μέλη του ΕΚΠΑ το λογισμικό MATLAB με 75 ταυτόχρονες (concurrent) άδειες χρήσης. Μπορείτε να

Διαβάστε περισσότερα

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

Συστήματα Αναμονής (Queuing Systems) ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ - ΕΜΠ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧ. ΥΠΟΛΟΓΙΣΤΩΝ Τομέας Επικοινωνιών, Ηλεκτρονικής & Συστημάτων Πληροφορικής Εργαστήριο Διαχείρισης & Βέλτιστου Σχεδιασμού Δικτύων Τηλεματικής

Διαβάστε περισσότερα

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 17

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 17 ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 17 10 Νοεµβρίου, 2006 Γεώργιος Έλληνας Επίκουρος Καθηγητής ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΑ ΘΕΜΑΤΑ

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Σύντομες εισαγωγικές σημειώσεις για την. Matlab Σύντομες εισαγωγικές σημειώσεις για την Matlab Δήλωση Μεταβλητών Για να εισάγει κανείς δεδομένα στη Matlab υπάρχουν πολλοί τρόποι. Ο πιο απλός είναι στη γραμμή εντολών να εισάγουμε αυτό που θέλουμε και

Διαβάστε περισσότερα

Χρονικές σειρές 1 ο μάθημα: Εισαγωγή στη MATLAB

Χρονικές σειρές 1 ο μάθημα: Εισαγωγή στη MATLAB Χρονικές σειρές 1 ο μάθημα: Εισαγωγή στη MATLAB Εαρινό εξάμηνο 2018-2019 Τμήμα Μαθηματικών ΑΠΘ Διδάσκουσα: Αγγελική Παπάνα Μεταδιδακτορική Ερευνήτρια Πολυτεχνική σχολή, Α.Π.Θ. & Οικονομικό Τμήμα, Πανεπιστήμιο

Διαβάστε περισσότερα

Σχήµα 4.1: Εισαγωγή βρόγχου while-loop.

Σχήµα 4.1: Εισαγωγή βρόγχου while-loop. Ο βρόγχος While-loop 1. Ο βρόγχος while-loop εκτελείται έως ότου ικανοποιηθεί µία προκαθορισµένη συνθήκη. 2. Ο αριθµός των επαναλήψεων ενός βρόγχου while-loop δεν είναι εκ των προτέρων προκαθορισµένος,

Διαβάστε περισσότερα

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

Εισαγωγή στη Matlab Βασικές Συναρτήσεις Πανεπιστήμιο Θεσσαλίας Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής με Εφαρμογές στη Βιοϊατρική Εργαστήριο Γραμμικής Άλγεβρας Εισαγωγή στη Matlab Βασικές Συναρτήσεις 2016-2017 Εισαγωγή στη Matlab Matlab

Διαβάστε περισσότερα

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

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ. Παράδειγμα #1. Πράξεις μεταξύ ακεραίων αριθμών ΥΠΟΛΟΓΙΣΤΕΣ Ι ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ Τύποι δεδομένων Οι παρακάτω τύποι δεδομένων υποστηρίζονται από τη γλώσσα προγραμματισμού Fortran: 1) Ακέραιοι αριθμοί (INTEGER). 2) Πραγματικοί αριθμοί απλής ακρίβειας

Διαβάστε περισσότερα

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

Έναρξη Τερματισμός του MatLab Σύντομος Οδηγός MATLAB Β. Χ. Μούσας 1/6 Έναρξη Τερματισμός του MatLab Η έναρξη της λειτουργίας του MatLab εξαρτάται από το λειτουργικό σύστημα. Στα συστήματα UNIX πληκτρολογούμε στη προτροπή του συστήματος

Διαβάστε περισσότερα

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1 Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave Περιεχόμενο εργαστηρίου: - Το περιβάλλον ανάπτυξης προγραμμάτων Octave - Διαδικασία ανάπτυξης προγραμμάτων MATLAB - Απλά

Διαβάστε περισσότερα

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

Εισαγωγή στο Πρόγραμμα Maxima Εισαγωγή στο Πρόγραμμα Maxima Το Maxima είναι ένα πρόγραμμα για την εκτέλεση μαθηματικών υπολογισμών, συμβολικών μαθηματικών χειρισμών, αριθμητικών υπολογισμών και γραφικών παραστάσεων. Το Maxima λειτουργεί

Διαβάστε περισσότερα

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

Μαθηµατικοί Υπολογισµοί στην R Κεφάλαιο 3 Μαθηµατικοί Υπολογισµοί στην R Ενα µεγάλο µέρος της ανάλυσης δεδοµένων απαιτεί διάφορους µαθηµατικούς υπολογισµούς. Αυτό το κεφάλαιο εισαγάγει τον αναγνώστη στις διάφορες δυνατότητες που έχει

Διαβάστε περισσότερα

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 14

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 14 ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 14 20 Οκτωβρίου, 2005 Ηλίας Κυριακίδης Λέκτορας ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ 2005Ηλίας Κυριακίδης,

Διαβάστε περισσότερα

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

Ο ΗΓΙΕΣ ΧΡΗΣΗΣ ΤΟΥ MATLAB Ο ΗΓΙΕΣ ΧΡΗΣΗΣ ΤΟΥ MATLAB (το παρόν αποτελεί τροποποιηµένη έκδοση του οµόνυµου εγχειριδίου του κ. Ν. Μαργαρη) 1 ΠΡΑΓΜΑΤΙΚΟΙ ΑΡΙΘΜΟΙ 1.1 ΠΡΑΞΕΙΣ ΜΕ ΠΡΑΓΜΑΤΙΚΟΥΣ ΑΡΙΘΜΟΥΣ 1.1.1 ΠΡΟΣΘΕΣΗ» 3+5 8 % Το σύµβολο

Διαβάστε περισσότερα

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

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι κ. ΠΕΤΑΛΙΔΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ 1 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται

Διαβάστε περισσότερα

Βασικά στοιχεία του MATLAB

Βασικά στοιχεία του MATLAB ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΣΗΜΑΤΑ ΚΑΙ ΣΥΣΤΗΜΑΤΑ ΕΡΓΑΣΤΗΡΙΟ Εξοικείωση µε το περιβάλλον του MATLAB και χρήση βασικών εντολών και τεχνικών δηµιουργίας προγραµµάτων, συναρτήσεων

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ Λογικός τύπος ( ) Ο τύπος είναι κατάλληλoς για την αναπαράσταση ποσοτήτων που μπορούν να πάρουν δύο μόνο τιμές (π.χ. ναι/όχι, αληθές/ψευδές, ). Τιμές ή Δήλωση Εκχώρηση Ισοδυναμία με ακέραιους

Διαβάστε περισσότερα

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο Ενότητα 1: Εισαγωγή στο Matlab Διδάσκουσα: Τσαγκαλίδου Ροδή Τμήμα: Ηλεκτρολόγων Μηχανικών ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

Διαβάστε περισσότερα

Σχήµα 5.1: Εισαγωγή της δοµής formula node στο Block Diagram.

Σχήµα 5.1: Εισαγωγή της δοµής formula node στο Block Diagram. Η δοµή Formula Node 1. Η δοµή Formula Node επιτρέπει την εισαγωγή αναλυτικών σχέσεων στο Block Diagram µε πληκτρολόγηση, αποφεύγοντας έτσι την εισαγωγή των εικονίδιων συναρτήσεων απλών αλγεβρικών πράξεων

Διαβάστε περισσότερα

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

Τυπικές χρήσεις της Matlab Matlab Μάθημα 1 Τι είναι η Matlab Ολοκληρωμένο Περιβάλλον Περιβάλλον ανάπτυξης Διερμηνευμένη γλώσσα Υψηλή επίδοση Ευρύτητα εφαρμογών Ευκολία διατύπωσης Cross platform (Wintel, Unix, Mac) Τυπικές χρήσεις

Διαβάστε περισσότερα

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) 1 ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) ιάλεξη 1 1.1 ΕΙΣΑΓΩΓΗ ΣΤΗ FORTRAN 77 Ένα πρόγραµµα σε οποιαδήποτε γλώσσα προγραµµατισµού δεν τίποτα άλλο από µια σειρά εντολών που πρέπει

Διαβάστε περισσότερα

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

Πρώτη επαφή με το μαθηματικό πακέτο Mathematica Πρώτη επαφή με το μαθηματικό πακέτο Mathematica Με δύο λόγια, μπορούμε να πούμε ότι η Mathematica είναι ένα πρόγραμμα που το χρησιμοποιούμε για να κάνουμε αναλυτικούς και αριθμητικούς υπολογισμούς αλλά

Διαβάστε περισσότερα

3) το παράθυρο Πίνακας τιμών όπου εμφανίζονται οι τιμές που παίρνουν οι παράμετροι

3) το παράθυρο Πίνακας τιμών όπου εμφανίζονται οι τιμές που παίρνουν οι παράμετροι Ο Δ Η Γ Ι Ε Σ Γ Ι Α Τ Ο M O D E L L U S 0.0 4. 0 5 Για να κατεβάσουμε το πρόγραμμα Επιλέγουμε Download στη διεύθυνση: http://modellus.co/index.php/en/download. Στη συνέχεια εκτελούμε το ModellusX_windows_0_4_05.exe

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB. Κολοβού Αθανασία Ε.Τ.Ε.Π.

ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB. Κολοβού Αθανασία Ε.Τ.Ε.Π. ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB Κολοβού Αθανασία Ε.Τ.Ε.Π. http://users.uoa.gr/~akolovou/ MATRIX LABORATORY Μαθηματικό λογισμικό πακέτο Everything is a matrix Εύκολο να ορίσουμε τους πίνακες >> A = [6 3; 5 0] A = 6

Διαβάστε περισσότερα

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ 1 Τύποι δεδομένων Η γλώσσα προγραμματισμού C++ υποστηρίζει τους παρακάτω τύπους δεδομένων: 1) Ακέραιοι αριθμοί (int). 2) Πραγματικοί αριθμοί διπλής ακρίβειας

Διαβάστε περισσότερα

Εισαγωγή στον επιστημονικό προγραμματισμό 2 o Μάθημα

Εισαγωγή στον επιστημονικό προγραμματισμό 2 o Μάθημα Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές Εισαγωγή στον επιστημονικό προγραμματισμό 2 o Μάθημα Λεωνίδας Αλεξόπουλος Λέκτορας ΕΜΠ email: leo@mail.ntua.gr url: http://users.ntua.gr/leo Μελάς Ιωάννης Υποψήφιος

Διαβάστε περισσότερα

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

1. ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB... 13 ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ 1. ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB... 13 1.1. Τι είναι το Matlab... 13 1.2. Περιβάλλον εργασίας... 14 1.3. Δουλεύοντας με το Matlab... 16 1.3.1. Απλές αριθμητικές πράξεις... 16 1.3.2. Σχόλια...

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Ηλεκτρονική Υγεία. Εργαστήριο 5 ο : MATLAB

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Ηλεκτρονική Υγεία. Εργαστήριο 5 ο : MATLAB Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Ηλεκτρονική Υγεία Εργαστήριο 5 ο : MATLAB Αν. καθηγητής Αγγελίδης Παντελής e-mail: paggelidis@uowm.gr Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Άδειες

Διαβάστε περισσότερα

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

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΧΗΜΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΙΚΟ ΚΕΝΤΡΟ Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού Μάθημα 2ο Μεταβλητές Μεταβλητή ονομάζεται ένα μέγεθος

Διαβάστε περισσότερα

Χρονικές σειρές 2 o μάθημα: Εισαγωγή στη MATLAB

Χρονικές σειρές 2 o μάθημα: Εισαγωγή στη MATLAB Χρονικές σειρές 2 o μάθημα: Εισαγωγή στη MATLAB Εαρινό εξάμηνο 2018-2019 Τμήμα Μαθηματικών ΑΠΘ Διδάσκουσα: Αγγελική Παπάνα Μεταδιδακτορική Ερευνήτρια Πολυτεχνική σχολή, Α.Π.Θ. & Οικονομικό Τμήμα, Πανεπιστήμιο

Διαβάστε περισσότερα

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

Προγραμματισμός I (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός I (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Οκτώβριος 2017 Δρ. Δημήτρης Βαρσάμης Οκτώβριος

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL Δυνατότητα ανάπτυξης, μεταγλώττισης και εκτέλεσης προγραμμάτων στη PASCAL. Κατανόηση της σύνταξης των προτάσεων της PASCAL. Κατανόηση της εντολής εξόδου για

Διαβάστε περισσότερα

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

Εισαγωγή στο GNU Octave/MATLAB Εισαγωγή στο GNU Octave/MATLAB Δρ. Βασίλειος Δαλάκας Καλώς ήρθατε στο εργαστήριο Σημάτων και Συστημάτων με το λογισμικό Octave (Οκτάβα). Οι σημειώσεις αυτές έχουν βασιστεί στις σημειώσεις του εργαστηρίου

Διαβάστε περισσότερα

Κεφάλαιο 5ο: Εντολές Επανάληψης

Κεφάλαιο 5ο: Εντολές Επανάληψης Χρήστος Τσαγγάρης ΕΕ ΙΠ Τµήµατος Μαθηµατικών, Πανεπιστηµίου Αιγαίου Κεφάλαιο 5ο: Εντολές Επανάληψης Η διαδικασία της επανάληψης είναι ιδιαίτερη συχνή, αφού πλήθος προβληµάτων µπορούν να επιλυθούν µε κατάλληλες

Διαβάστε περισσότερα

a = 10; a = k; int a,b,c; a = b = c = 10;

a = 10; a = k; int a,b,c; a = b = c = 10; C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 4 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Τα αλφαριθμητικά αποτελούνται από γράμματα, λέξεις ή άλλους χαρακτήρες (π.χ. μήλο, Ιούλιος 2009, You win!).

Τα αλφαριθμητικά αποτελούνται από γράμματα, λέξεις ή άλλους χαρακτήρες (π.χ. μήλο, Ιούλιος 2009, You win!). ΑΛΦΑΡΙΘΜΗΤΙΚΑ Τα αλφαριθμητικά αποτελούνται από γράμματα, λέξεις ή άλλους χαρακτήρες (π.χ. μήλο, Ιούλιος 2009, You win!). Αποθηκεύονται σε μεταβλητές ή σε λίστες (όπως ή ). Μπορείτε να ενώσετε δυο αλφαριθμητικά

Διαβάστε περισσότερα

Πληρουορική Γ Γσμμασίοσ

Πληρουορική Γ Γσμμασίοσ Πληρουορική Γ Γσμμασίοσ Προγραμματισμός και Αλγόριθμοι Από το και τημ Χελώμα στημ Ευριπίδης Βραχνός http://evripides.mysch.gr/ 2014 2015 1 Προγραμματισμός Ζάννειο Πρότυπο Πειραματικό Γυμνάσιο Πειραιά Ενότητα:

Διαβάστε περισσότερα

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram.

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram. Εισαγωγή αρχείων δεδοµένων 1. Η εισαγωγή αρχείων δεδοµένων στο LaVIEW γίνεται στο Block Diagram µε την εντολή Read From Spreadsheet File. 2. Εισάγουµε την εντολή Read From Spreadsheet File στο Block Diagram

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Εισαγωγή στην Tcl. Τί είναι η Tcl; 1 Εισαγωγή στην Tcl Τί είναι η Tcl; Το αρκτικόλεξο Tcl προέρχεται από τις λέξεις «Tool Control Language». Η Tcl είναι μια γλώσσα προγραμματισμού για scripts γενικής χρήσεως, τα οποία επίσης μπορούν να

Διαβάστε περισσότερα

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

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ και ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ 2.1 Να δοθεί ο ορισμός

Διαβάστε περισσότερα

Σχήµα 3.1: Εισαγωγή shift register σε βρόγχο for-loop.

Σχήµα 3.1: Εισαγωγή shift register σε βρόγχο for-loop. Η δοµή «Shift register» 1. Η δοµή «Shift register» εισάγεται στο βρόγχο for-loop αλλά και σε άλλους βρόγχους που θα δούµε στη συνέχεια, όπως ο βρόγχος «While loop». Ο τρόπος εισαγωγής και λειτουργίας της

Διαβάστε περισσότερα

Αλληλεπίδραση με το Matlab

Αλληλεπίδραση με το Matlab Αλληλεπίδραση με το Matlab Περιγραφή της διαδικασίας πως εργαζόμαστε με το Matlab, και της προετοιμασίας και παρουσίασης των αποτελεσμάτων μιας εργασίας με το Matlab. Ειδικότερα θα συζητήσουμε μερικά στοιχεία

Διαβάστε περισσότερα

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

Pascal, απλοί τύποι, τελεστές και εκφράσεις Pascal, απλοί τύποι, τελεστές και εκφράσεις 15 Νοεμβρίου 2011 1 Γενικά Στην standard Pascal ορίζονται τέσσερις βασικοί τύποι μεταβλητών: integer: Παριστάνει ακέραιους αριθμούς από το -32768 μέχρι και το

Διαβάστε περισσότερα

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

1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΗΠΕΙΡΟΥ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Τ.Ε. Εργαστήριο Επεξεργασία Εικόνας & Βίντεο 1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή Νικόλαος Γιαννακέας Άρτα 2018 1 Εισαγωγή Το Matlab

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα.

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα. ΚΕΦΑΛΑΙΟ 7 ο 1. Επιλογή της κατάλληλης γλώσσας προγραµµατισµού Εκατοντάδες γλώσσες προγραµµατισµού χρησιµοποιούνται όπως αναφέρθηκε σήµερα για την επίλυση των προβληµάτων µε τον υπολογιστή, τη δηµιουργία

Διαβάστε περισσότερα

ζωγραφίζοντας µε τον υπολογιστή

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

Διαβάστε περισσότερα

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

Εισαγωγή στους. Υπολογιστές Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές Εισαγωγή γή στον επιστημονικό προγραμματισμό 2 ο Μάθημα Λεωνίδας Αλεξόπουλος Λέκτορας ΕΜΠ E mail: leo@mail.ntua.gr URL: http://users.ntua.gr/leo Μελάς Ιωάννης Υποψήφιος

Διαβάστε περισσότερα

Γνωρίστε το Excel 2007

Γνωρίστε το Excel 2007 Εισαγωγή τύπων Γνωρίστε το Excel 2007 Πληκτρολογήστε το σύμβολο της ισότητας (=), χρησιμοποιήστε ένα μαθηματικό τελεστή (+,-,*,/) και πατήστε το πλήκτρο ENTER. Πρόσθεση, διαίρεση, πολλαπλασιασμός και αφαίρεση

Διαβάστε περισσότερα

ΣΧΕ ΙΑΣΜΟΣ ΕΠΙΦΑΝΕΙΑΣ Με το σχεδιασµό επιφάνειας (Custom επιφάνεια) µπορούµε να σχεδιάσουµε επιφάνειες και αντικείµενα που δεν υπάρχουν στους καταλόγους του 1992. Τι µπορούµε να κάνουµε µε το σχεδιασµό

Διαβάστε περισσότερα

Ηβασική δοµή δεδοµένων είναι ο πίνακας που δεν χρειάζεται να οριστεί η διάσταση του.

Ηβασική δοµή δεδοµένων είναι ο πίνακας που δεν χρειάζεται να οριστεί η διάσταση του. MATrix LABoratory Ηβασική δοµή δεδοµένων είναι ο πίνακας που δεν χρειάζεται να οριστεί η διάσταση του. Τι είναι το MATLAB ; Μια γλώσσα υψηλού επιπέδου η οποία είναι χρήσιµη για τεχνικούς υπολογισµούς.

Διαβάστε περισσότερα

Εισαγωγή στην επιστήµη των υπολογιστών ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ

Εισαγωγή στην επιστήµη των υπολογιστών ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ Εισαγωγή στην επιστήµη των υπολογιστών ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ 1 Αριθµητικό Σύστηµα! Ορίζει τον τρόπο αναπαράστασης ενός αριθµού µε διακεκριµένα σύµβολα! Ένας αριθµός αναπαρίσταται διαφορετικά σε κάθε σύστηµα,

Διαβάστε περισσότερα

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

Εισαγωγή στους Υπολογιστές Εισαγωγή στους Υπολογιστές Ενότητα #2: Αναπαράσταση δεδομένων Αβεβαιότητα και Ακρίβεια Καθ. Δημήτρης Ματαράς Πολυτεχνική Σχολή Τμήμα Χημικών Μηχανικών Αναπαράσταση δεδομένων (Data Representation), Αβεβαιότητα

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB- SIMULINK

ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB- SIMULINK ΕΙΣΑΓΩΓΗ ΣΤΟ MATLAB- SIMULINK ρ. Γεώργιος Φ. Φραγκούλης Καθηγητής Ver. 0.2 9/2012 ιανύσµατα & ισδιάστατοι πίνακες Ένα διάνυσµα u = (u1, u2,, u ) εισάγεται στη MATLAB ως εξής : u=[ u1, u2,, un ] ή u=[ u1

Διαβάστε περισσότερα

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor ΕισαγωγήστουςΗ/Υ PHP Hypertext Preprocessor ΤιείναιηPHP; PHP είναιµία server-based scripting language σχεδιασµένη ειδικά για το web. Σε µία html σελίδα µπορούµε να ενσωµατώσουµε php κώδικα που εκτελείται

Διαβάστε περισσότερα

1 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ

1 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα 1 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ Ενότητα: ΜΑΘΑΙΝΟΝΤΑΣ ΤΟ MATLAB, ΜΕΡΟΣ Α Aναστασία Βελώνη Τμήμα Η.Υ.Σ Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 5 ο Έλεγχος Προγράµµατος Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Η εντολή if (Ι) Η εντολή if είναι µία από τις βασικότερες δοµές ελέγχου ροής στη C, αλλά και στις περισσότερες

Διαβάστε περισσότερα

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

MATLAB Desktop (Επιφάνεια Εργασίας MATLAB) [1.] Εισαγωγή στο MATLAB Το MATLAB αποτελεί ένα εμπορικό εργαλείο το οποίο προσφέρει ένα διαδραστικό προγραμματιστικό περιβάλλον στον χρήστη και χρησιμοποιείται σε ένα μεγάλο εύρος εφαρμογών. Ενσωματώνει μια

Διαβάστε περισσότερα

Επιστηµονικός Υπολογισµός Ι - Πρώτη εργαστηριακή άσκηση

Επιστηµονικός Υπολογισµός Ι - Πρώτη εργαστηριακή άσκηση Επιστηµονικός Υπολογισµός Ι - Πρώτη εργαστηριακή άσκηση Ηµεροµηνία επιστροφής : Τετάρτη 4/11/2010 18 Οκτωβρίου 2010 1 Γραµµική άλγεβρα (20 µονάδες) Η παράγωγος ενός µητρώου H ορίζεται ως η παράγωγος κάθε

Διαβάστε περισσότερα

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 5 ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 5 Σημειώσεις βασισμένες στο βιβλίο Το MATLAB στην Υπολογιστική Επιστήμη και Τεχνολογία Μια Εισαγωγή Πίνακες (Arrays) [1/2] Δομές δεδομένων για την αποθήκευση δεδομένων υπό

Διαβάστε περισσότερα

o AND o IF o SUMPRODUCT

o AND o IF o SUMPRODUCT Πληροφοριακά Εργαστήριο Management 1 Information Συστήματα Systems Διοίκησης ΤΕΙ Τμήμα Ελεγκτικής Ηπείρου Χρηματοοικονομικής (Παράρτημα Πρέβεζας) και Αντικείµενο: Μοντελοποίηση προβλήµατος Θέµατα που καλύπτονται:

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) 1. Εισαγωγή Χαρακτηριστικά της γλώσσας Τύποι δεδοµένων Γλώσσα προγραµµατισµού

Διαβάστε περισσότερα

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

Εισαγωγή στη Matlab 2 Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής Εισαγωγή στη Matlab 2 Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής email: dzavanti@cs.uoi.gr Περιεχόμενα Ορισμοί Λογικοί τελεστές f0r loops while loops if else

Διαβάστε περισσότερα

Ηλεκτρονικοί Υπολογιστές

Ηλεκτρονικοί Υπολογιστές ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 5: Εντολές Αντικατάστασης, Συναρτήσεις και Σχόλια στη C++ Ζαχαρούλα Ανδρεοπούλου Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

Διαβάστε περισσότερα

Γνωριµία µε τη Microsoft Access

Γνωριµία µε τη Microsoft Access Γνωριµία µε τη Microsoft Access ηµιουργία νέας βάσης δεδοµένων Έναρξη - Προγράµµατα - Microsoft Access - ηµιουργία νέας βάσης δεδοµένων µε χρήση Κενής βάσης δεδοµένων - ΟΚ Επιλέγουµε Φάκελο και στο Όνοµα

Διαβάστε περισσότερα

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

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΧΗΜΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΙΚΟ ΚΕΝΤΡΟ Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού Μάθημα 9ο Aντώνης Σπυρόπουλος Σφάλματα στρογγυλοποίησης

Διαβάστε περισσότερα

Δύο είναι οι κύριες αιτίες που μπορούμε να πάρουμε από τον υπολογιστή λανθασμένα αποτελέσματα εξαιτίας των σφαλμάτων στρογγυλοποίησης:

Δύο είναι οι κύριες αιτίες που μπορούμε να πάρουμε από τον υπολογιστή λανθασμένα αποτελέσματα εξαιτίας των σφαλμάτων στρογγυλοποίησης: Ορολογία bit (binary digit): δυαδικό ψηφίο. Τα δυαδικά ψηφία είναι το 0 και το 1 1 byte = 8 bits word: η θεμελιώδης μονάδα σύμφωνα με την οποία εκπροσωπούνται οι πληροφορίες στον υπολογιστή. Αποτελείται

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ. Δρ. Π. Νικολαΐδου

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ. Δρ. Π. Νικολαΐδου ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ Δρ. Π. Νικολαΐδου Προγραμματίζοντας στη γλώσσα R Εισαγωγή ( 1 ο Μάθημα ) Βασικές εντολές - λειτουργίες Μπορούμε να διαγράψουμε το περιεχόμενο της R κονσόλας επιλέγοντας Edit>Clear

Διαβάστε περισσότερα

Προγραµµατισµός στην Basic

Προγραµµατισµός στην Basic Προγραµµατισµός στην Basic 1. εντολή εισόδου Χρησιµοποιείται η εντολή INPUT, η οποία µπορεί να συνταχθεί : α. INPUT X, αν το δεδοµένο που ζητάει είναι αριθµητικό ή β. INPUT X$, αν το δεδοµένο που ζητάει

Διαβάστε περισσότερα

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής Διάλεξη 1 Πράξεις Τελεστές Έλεγχος Ροής Διοργάνωση : ΚΕΛ ΣΑΤΜ Διαφάνειες: Skaros, MadAGu Παρουσίαση: MadAGu Άδεια: Creative Commons 3.0 Αριθμητικοί Τελεστές- Αριθμητικές Πράξεις 2 Internal use only Αριθμητικοί

Διαβάστε περισσότερα

Επεξεργασία πολλαπλών φύλλων εργασίας - Γραφημάτων Excel

Επεξεργασία πολλαπλών φύλλων εργασίας - Γραφημάτων Excel Επεξεργασία πολλαπλών φύλλων εργασίας - Γραφημάτων Excel 11.1. Πολλαπλά φύλλα εργασίας Στο προηγούμενο κεφάλαιο δημιουργήσαμε ένα φύλλο εργασίας με τον προϋπολογισμό δαπανών του προσωπικού που θα συμμετάσχει

Διαβάστε περισσότερα

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Εργαστήρια Αριθμητικής Ανάλυσης Ι. 1 ο Εργαστήριο. Εισαγωγή στο Matlab Εργαστήρια Αριθμητικής Ανάλυσης Ι 1 ο Εργαστήριο Εισαγωγή στο Matlab 2017 Εισαγωγή Στα εργαστήρια θα ασχοληθούμε με την υλοποίηση των αριθμητικών μεθόδων που βλέπουμε στο θεωρητικό μέρος του μαθήματος,

Διαβάστε περισσότερα

Κεφάλαιο M3. Διανύσµατα

Κεφάλαιο M3. Διανύσµατα Κεφάλαιο M3 Διανύσµατα Διανύσµατα Διανυσµατικά µεγέθη Φυσικά µεγέθη που έχουν τόσο αριθµητικές ιδιότητες όσο και ιδιότητες κατεύθυνσης. Σε αυτό το κεφάλαιο, θα ασχοληθούµε µε τις µαθηµατικές πράξεις των

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΣΤΗ ΔΙΟΙΚΗΣΗ ΚΑΙ ΣΤΗΝ ΟΙΚΟΝΟΜΙΑ 7 Ο ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΟΣΤΟΛΙΑ ΠΑΓΓΕ Περιεχόμενα 2 Δυαδικό Σύστημα Προσημασμένοι δυαδικοί αριθμοί Αφαίρεση

Διαβάστε περισσότερα

3. Σηµειώσεις Access. # Εισαγωγή ψηφίου ή κενού διαστήµατος. Επιτρέπονται τα ση-

3. Σηµειώσεις Access. # Εισαγωγή ψηφίου ή κενού διαστήµατος. Επιτρέπονται τα ση- Μάθηµα 3 Προχωρηµένες ιδιότητες πεδίων Μάσκες εισαγωγής Οι ιδιότητες Μορφή και Μάσκα εισαγωγής περιγράφονται µαζί γιατί έχουν κοινά χαρακτηριστικά που αφορούν την εµφάνιση. Με την ιδιότητα Μορφή καθορίζουµε

Διαβάστε περισσότερα

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

Εισαγωγή στους Υπολογιστές Εισαγωγή στους Υπολογιστές Ενότητα #5: Διαγράμματα ροής (Flow Charts), Δομές επανάληψης Καθ. Δημήτρης Ματαράς Πολυτεχνική Σχολή Τμήμα Χημικών Μηχανικών Διαγράμματα ροής (Flow Charts), Δομές επανάληψης

Διαβάστε περισσότερα

3. Στο Block Diagram αναπτύσουµε το υπολογιστικό µέρος του προγράµµατος. Σχήµα 1.1: Το Front Panel του LabVIEW.

3. Στο Block Diagram αναπτύσουµε το υπολογιστικό µέρος του προγράµµατος. Σχήµα 1.1: Το Front Panel του LabVIEW. Front Panel και Block Diagram 1. Το LAbVIEW αποτελείται από δύο καρτέλες. Το Front Panel και το Block Diagram. Εναλλασσόµαστε ανάµεσα στις δύο καρτέλες µε τη συντόµευση CTRL+E ή µε το µενού Windows / Show

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΕΠΙΣΤΗΜΟΝΙΚΟΥΣ ΥΠΟΛΟΓΙΣΜΟΥΣ

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΕΠΙΣΤΗΜΟΝΙΚΟΥΣ ΥΠΟΛΟΓΙΣΜΟΥΣ Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΕΠΙΣΤΗΜΟΝΙΚΟΥΣ ΥΠΟΛΟΓΙΣΜΟΥΣ Βασικές Έννοιες και Μαθηματικές Συναρτήσεις Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD MATLAB Προέρχεται από

Διαβάστε περισσότερα

Σύντοµος Οδηγός της Qbasic. Πέρδος Αθανάσιος Καθηγητής Πληροφορικής

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

Διαβάστε περισσότερα

Βασικό Επίπεδο στο Modellus

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

Διαβάστε περισσότερα

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Βασικές Έννοιες Προγραμματισμού Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD Αριθμητικά συστήματα Υπάρχουν 10 τύποι ανθρώπων: Αυτοί

Διαβάστε περισσότερα

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD Σε ορισµένες περιπτώσεις είναι ιδιαίτερα χρήσιµη η δηµιουργία ιστοσελίδων ενηµερωτικού περιεχοµένου οι οποίες στη συνέχεια µπορούν να δηµοσιευθούν σε κάποιο τόπο

Διαβάστε περισσότερα

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

ιαδικαστικός Προγραμματισμός ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ιαδικαστικός Προγραμματισμός Α Εξάμηνο Μάθημα 2 ο : Εντολές ελέγχου > εντολές υπό συνθήκη Στόχοι μαθήματος Να κατανοήσετε τη σχέση μεταξύ εντολών και παραστάσεων. Να αναγνωρίζετε

Διαβάστε περισσότερα

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό 5 ο Εργαστήριο Λογικοί Τελεστές, Δομές Ελέγχου Λογικοί Τελεστές > μεγαλύτερο = μεγαλύτερο ή ίσο!= διαφορετικό Οι λογικοί τελεστές χρησιμοποιούνται για να ελέγξουμε

Διαβάστε περισσότερα

Εισαγωγή στην επιστήµη των υπολογιστών. Πράξεις µε µπιτ

Εισαγωγή στην επιστήµη των υπολογιστών. Πράξεις µε µπιτ Εισαγωγή στην επιστήµη των υπολογιστών Πράξεις µε µπιτ 1 Πράξεις µε µπιτ 2 Αριθµητικές Πράξεις σε Ακέραιους Πρόσθεση, Αφαίρεση, Πολλαπλασιασµός, Διαίρεση Ο πολλαπλασιασµός και η διαίρεση στο επίπεδο του

Διαβάστε περισσότερα