Matlab functions Κολοβού Αθανασία, ΕΔΙΠ, Τμήμα Πληροφορικής και Τηλεπικοινωνιών, ΕΚΠΑ
Μ-files Στο Matlab μπορούμε να εκτελούμε μία σειρά από εντολές οι οποίες βρίσκονται αποθηκευμένες σε αρχεία τύπου *.m Υπάρχουν δύο είδη τέτοιων αρχείων τα script files και τα function files. Ένα script file περιλαμβάνει μία σειρά από εντολές matlab. Αν για παράδειγμα το αρχείο λέγεται roll.m, τότε η εντολή roll θα προκαλέσει την εκτέλεση όλων των εντολών του αρχείου. Τα function files παρέχουν επεκτασιμότητα στο matlab. Μπορούμε να δημιουργήσουμε δικές μας συναρτήσεις οι οποίες θα έχουν το ίδιο status με τις υπόλοιπες built-in συναρτήσεις.
Ορισμός συνάρτησης Αρχικά ανοίγουμε ένα καινούριο αρχείο μέσα στο οποίο θα γράψουμε τις εντολές για την συνάρτηση. Στο αρχείο αυτό ακολουθούμε τους παρακάτω κανόνες Πρέπει να ξεκινάει με τη λέξη function Όνομα της συνάρτησης, ίδιο με το όνομα του m file function [a,b,c]=funname(input1,input2) Μεταβλητές εξόδου (αν είναι περισσότερες από μία πρέπει να είναι μέσα σε []) Μεταβλητές εισόδου
Συναρτήσεις Η πρώτη γραμμή ονομάζεται Function header function [outputs] = function_name (inputs) Παρατηρούμε ότι η λέξη function γίνετε μπλε. ( η λέξη function ονομάζεται keyword). function [out]= myadder(a,b,c) out=a+b+c; end Παρατηρείστε επίσης την ενολή end που βάζουμε στο τέλος της συνάρτησης.
Παράδειγμα Στο παρακάτω παράδειγμα αν δεν ξέρετε τι κάνουν οι εντολές randint,floor αναζητήστε τς στο help manual. function a=randint(m,n) %This function generates a mxn %matrix of random integers %between 0 and 9 a=floor(10*rand(m,n)); end a=randint(5,3) a = 8 0 1 9 2 9 1 5 9 9 9 4 6 9 8
Συναρτήσεις Χρησιμοποιούμε σχόλια μέσα στις συναρτήσεις...
Παράδειγμα Κλήση της συνάρτησης myadder για να υπολογίσουμε το άθροισμα δύο αριθμών.
Διαφορετικοί τρόποι κλήσης μίας συνάρτησης Μπορούμε να χρησιμοποιήσουμε την συνάρτηση myadder για να υπολογίσουμε για παράδειγμα το άθροισμα του αποτέσματος άλλων συναρτήσεψν, για παράδειγμα των sin (π), cos (π), και tan (π). Επίσης, θα μπορούσαμε στα ορίσματα της συνάρτησης να βάλουμε μία άλλη πράξη.
Επιστροφή τιμών από συνάρτηση Οι συναρτήσεις μπορούν να έχουν περισσότερες από μία τιμές / μεταβλητές επιστροφής
Επιστροφή τιμών από συνάρτηση Τι θα συμβεί αν δεν δώσουμε τιμή στην μεταβλητή B μέσα στην συνάρτηση mytrigsum? (unassigned )
Function Workspace Το workspace είναι ένας χώρος όπου αποθηκεύονται όλες οι μεταβλητές που δημιουργούμε στο command prompt. Μία συνάρτηση έχει το δικό της workspace. Το workspace της συνάρτησης είναι ο χώρος στην μνήμη που δεσμέυεται για τις μεταβλητές που χρησιμοποιεί η συνάρτηση. Το workspace της συνάρτησης δεν είναι το ίδιο με το workspace του command window. Επομένως μία μεταβλητή που έχουμε ορίσει στο command window μπορεί να χρησιμοποιηθεί σε μία συνάρτηση, χωρίς να αλλάξει η τιμή που έχει έξω από την συνάρτηση. Το workspace της συνάρτησης χρησιμοποιείται κάθε φορά που καλούμε τη συνάρτηση.
Function Workspace Ας το δοκιμάσουμε! Ποια θα είναι η τιμή της μεταβλητής out? (η μεταβλητή out χρησιμοποιείται μέσα στην συνάρτηση myadder) Η μεταβλητή out χρησιμοποιείται στο function workspace της συνάρτησης myadder. Επομένως δε μπορεί να επηρεάσει άλλες μεταβλητές και ενέργειες σε άλλο workspace.
Function Workspace Στη συνέχεια θα δούμε ένα από τους λόγους για τους οποίους δεν πρέπει να αφήνουμε γραμμές χωρίς ερωτηματικά μέσα σε μία συνάρτηση. Ας αλλάξουμε την συνάρτηση myadder έτσι ώστε να μην έχει το ερωτηματικό στην γραμμή out = a + b + c, και επιπλέον έχει άλλη μία εντολή όπου θέτει την τιμή 2 στην μεταβλητή y (επίσης χωρίς ερωτηματικό).
Function Workspace Κοιτώντας προσεχτικά τα πραδείγματα μπορείτε να σκεφτείτε κάποιους λόγους για τους οποίους χρειαζόμαστε ξεχωριστά workspaces? Τα διαφορετικά workspaces προστεύεουν μία συνάρτηση από εξωτερικές επιρροές. Το μόνο που μπορεί να επηρεάσει το τι θα συμβεί στην συνάρτηση είναι οι μεταβλητές εισόδου, και το μόνο που μπορεί να ξεφύγει από την συνάρτηση είναι οι μεταβλητές που αυτή επιστρέφει!
Παράδειγμα
Matlab path Όταν μια συνάρτηση καλείται στη γραμμή εντολών ή μέσα από μια συνάρτηση, to MATLAB πρέπει να αναζητήσει το m-file το οποίο θα εκτελεστεί. Το MATLAB αναζητά τη λειτουργία αυτή μέσω του MATLAB path. Το MATLAB path είναι η σειρά με την οποία το MATLAB ψάχνει για μια συνάρτηση, όταν αυτή καλείται. Όταν MATLAB καλείται να εκτελέσει μια συνάρτηση, ψάχνει πρώτα για την εν λόγω συνάρτηση στον τρέχοντα φάκελο εργασίας (current working directory) ή την αναζητά ως subfunction (που περιγράφεται στην επόμενη ενότητα).
Matlab path Αν δεν είναι η συνάρτηση στον τρέχοντα φάκελο ή σε subfunction,τότε το MATLAB την αναζητά σε φακέλους κατά μήκος της διαδρομής του MATLAB path μέχρι να βρει το κατάλληλο m-file για να εκτελέσει. Προσπαθήστε να καλέσετε τον ανύπαρκτο αβψδεφδ λειτουργία για την τιμή εισόδου, 4, και να ορίσετε την έξοδο στη μεταβλητή, a.
Matlab path Εάν υπάρχουν δύο συναρτήσεις με το ίδιο όνομα στο MATLAB path, MATLAB θα εκτελέσει τη συνάρτηση που συνάντησε πρώτη φορά στην αναζήτησή του. Γράφοντας μια συνάρτηση με το ίδιο όνομα με μια άλλη και τοποθετώντας την σε υψηλότερη διαδρομή στο MATLAB path, ονομάζεται υπερφόρτωση. Μπορείτε να δείτε το MATLAB path πατώντας File Set Path
Subfunctions Από τη στιγμή που θα γράψετε και θα αποθυκέυσετε την δική σαε συνάρτηση αυτή θα συμπεριφέρεται όπως οποιαδήποτε άλλη συνάρτηση στο MATLAB. Μπορείτε να καλέσε την συνάρτηση στο command window ή άλλες συναρτήσεις να καλούν τη συνάρτησής σας. Έαν subfunction είναι μία συνάρτηση, η οποία ορίζεται στο ίδιο m-file με την κύρια/βασική συνάρτηση (parent function) Μόνο η parent function μπορεί να καλέσει την subfunction. Παρόλα αυτά η subfunction διατηρεί ένα ξεχωριστό workspace από την βασική της συνάρτηση(parent function). Μία subfunction ορίζεται μετά το end statement της βασικής συνάρτησης, και πρέπει να έχει και ένα δικό της end.
Παράδειγμα subfunctions Οι μεταβλητές D, x, και y εμφανίζονται και στην mydistxyz και στην mydist. Αυτό επιτρέπεται γιατί το subfunction έχει ξεχωριστό workspace. Τα Subfunctions είναι χρήσιμα όταν θέλουμε νε εκτέσουμε μία εργασία πολλές φορές μέσα σε μία συνάρτηση, αλλά όχι έξω από τν συνάρτηση αυτή.. Με αυτό τον τρόπο μπορούμε να φτιάχνουμε αποδοτικές συναρ τησεις χωρίς να γεμίζουμε το working directory με επιπλέον m-files.
Παράδειγμα subfunctions Δοκιμάστε το! Καλέστε την mydistxyz για x = [0 0], y = [0 1], z = [1 1]. Δοκιμάστε τώρα να καλέσετε την subfunction mydist από το command prompt.
Script Files Ένα script file είναι ένα m-file που περιέχει μία ακολουθία από εντολές αλλά δεν είναι συνάρτηση. Σε αντίθεση με τις συνάρτήσεις το script μοιράζεται το ίδιο workspace με τον τρέχοντα φάκελο ( current directory). Ένα script δημιουργείται απλά γράφοντας γραμμές με εντολές όπως θα τις γράφαμε και στο command prompt. Το script εκτελείται όταν γράψουμε το όνομα του στο command prompt ή πατώντας το κουμπί Run.
Ασκήσεις Έστω ο πίνακας Μ Γράψτε μία συνάρτηση [M] = mycheckerboard(n), που όταν την καλούμε να έχουμε το παρακάτω αποτέλεσμα
Αναδρομή Υπολογισμός του παραγοντικού με αναδρομή
Άσκηση Γράψτε μία αναδρομική συνάρτηση που υπολογίζει τον ν-οστό Fibonacci αριθμό.