Πανεπιστήμιο Θεσσαλίας Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής με Εφαρμογές στη Βιοϊατρική Εργαστήριο Γραμμικής Άλγεβρας H Matlab ως γλώσσα προγραμματισμού
Προγραμματιστικές δομές Έλεγχος ροής if if λογική έκφραση εντολές elseif λογική έκφραση εντολές else εντολές Δομή επανάληψης for for μεταβλητή = αρχική τιμή : βήμα : τελική τιμή μεταβλητής εντολές
Λογικοί & σχεσιακοί τελεστές
Matlab Editor Άνοιγμα με: > την εντολή edit > File -> New -> M-file > το εικονίδιο New M-file > File -> Open > διπλό κλικ σε κάποιο αποθηκευμένο αρχείο
Function στο Matlab (1) Ανοίγοντας το Matlab Editor πηγαίνοντας File -> New -> Function εμφανίζεται ο παρακάτω κώδικας: function [ output_args ] = Untitled( input_args ) % UNTITLED Summary of this function goes here % Detailed explanation goes here Στο input_args ορίζονται οι παράμετροι x1,x2,,xm ως είσοδος στη συνάρτηση και στο output_args επιστρέφονται ως έξοδος y1,y2,,yn, που είναι τα αποτελέσματα της συνάρτησης. Η έξοδος μπορεί να παραλειφθεί γράφοντας function Untitled( input_args ) Αν θεωρηθούν παράμετροι στην έξοδο, αυτές πρέπει να αναφέρονται σε όλα τα διερευνητικά στάδια του ελέγχου ροής ή ροής επανάληψης. Στη συνέχεια αναπτύσσονται οι εντολές χρησιμοποιώντας τις παραμέτρους-εισόδου ώστε να παράγονται τα αποτελέσματα στην έξοδο. H function κλείνει με
Function στο Matlab (2) Έτσι η εικόνα που εμφανίζεται είναι : Με εξόδους function [y1,y2, yn] = myfun(x1,x2,...,xm) Χωρίς εξόδους function myfun(x1,x2,...,xm).. ένα σύνολο ή.... απαιτούμενων εντολών...... ένα σύνολο απαιτούμενων εντολών Η συνάρτηση αποθηκεύεται current directory Για να καλέσουμε μια συνάρτηση, γράφουμε στο Command Window την παραπάνω δομή χωρίς την εντολή function, δηλαδή: Με εξόδους Χωρίς εξόδους [y1,y2, yn] = myfun(x1,x2,...,xm) ή myfun(x1,x2,...,xm)
Function/Script files Απαγορεύεται το όνομα του.m αρχείου να είναι ίδιο με το όνομα της μεταβλητής που υπολογίζεται Το όνομα του αρχείου πρέπει να ξεκινάει με ένα γράμμα και μπορεί να περιέχει γράμματα, αριθμούς και την κάτω παύλα (_) Προσοχή στα ονόματα των μεταβλητών που χρησιμοποιούνται, δεν πρέπει να ταυτίζονται με συναρτήσεις της Matlab Συχνός και σταδιακός έλεγχος του αναπτυσσόμενου κώδικα Με το σύμβολο % δίνεται η δυνατότητα να εισάγονται σχόλια στον editor, ό,τι υπάρχει στον κώδικα μετά το % είναι μη εκτελέσιμο κείμενο
Παραδείγματα 1/4 Να δημιουργηθεί συνάρτηση, η οποία να εισάγει τα άκρα a,b του πεδίου ορισμού των συναρτήσεων y 1 = cos(x) και y 2 = x 2, το βήμα διαμέρισης k (άρα 3 στοιχεία είναι ως είσοδοι-παράμετροι) και να σχεδιάζει στο ίδιο σύστημα αξόνων και στο ίδιο παράθυρο τις γραφικές παραστάσεις των συναρτήσεων, με κόκκινο χρώμα την πρώτη και με μπλε χρώμα και λεπτή διακεκομμένη γραμμή τη δεύτερη. function test(a,b,k) x=a:k:b y 1 = cos(x); y 2 = x.^2; plot(x,y1,, r, x,y2, b: ); Αποθηκεύουμε το διπλανό script ως test.m Στo Command Window γράφουμε : a= a1; %Δίνεται αριθμητική τιμή b= a2; %Δίνεται αριθμητική τιμή k= a3; %Δίνεται αριθμητική τιμή test (a,b,k)
Παραδείγματα 2/4 Να δημιουργηθεί συνάρτηση, η οποία να εισάγει δύο αριθμούς (άρα 2 στοιχεία είναι ως είσοδοι-παράμετροι) και να τους προσθέτει (άρα 1 στοιχείο είναι η έξοδος). function [sum] = add(x,y) sum = x + y; Αποθηκεύουμε το διπλανό script ως add.m Στo Command Window γράφουμε : x= a1; %Δίνεται αριθμητική τιμή y= a2; %Δίνεται αριθμητική τιμή [sum] = add(x,y)
Παραδείγματα 3/4 Να δημιουργηθεί συνάρτηση, η οποία να εισάγει έναν πίνακα Α, να βρίσκει το μέγεθός του, να επιστρέφει την ορίζουσα του πίνακα αυτού και να τον αντίστροφό του, εάν υπάρχει, (άρα 2 στοιχεία στην έξοδο). function [d, B] = inver(a) [m,n]= size(a); d=det(a); if d~= 0 B=inv(A); else B=zeros(m,n); % βάζουμε να αντικαθιστάται ο Β με κάτι που θα υπενθυμίζει ότι δεν υπάρχει αντίστροφος disp( δεν υπάρχει αντίστροφος )
Παραδείγματα 4/4 Να δημιουργηθεί συνάρτηση, η οποία να εισάγει δύο θετικούς ακεραίους, οι αριθμοί θα είναι οι διαστάσεις του πίνακα Α που θα εμφανίζεται στην έξοδο και κάθε στοιχείο του θα ισούται με το άθροισμα των δεικτών της γραμμής και της στήλης στην οποία αυτό ανήκει. Τα στοιχεία του πίνακα Α να υπολογιστούν με χρήση της επαναληπτικής εντολής for (2 φορές). function [A] = sumindex(m,n) for i=1:m for j=1:n A(i,j)=i+j;
Αλγόριθμος 1 Γραμμική ανεξαρτησία των διανυσμάτων v, v,, vk 1 2 του n Βήμα 1 Βήμα 2 Σχηματισμός του n x k πίνακα Α με στήλες τα δοθέντα διανύσματα Αν n = k, υπολογισμός της ορίζουσας του πίνακα A, det (A) i) αν det (A) 0, τότε τα διανύσματα είναι γραμμικά ανεξάρτητα ii) αν det(a) = 0, τότε τα διανύσματα είναι γραμμικά εξαρτημένα Βήμα 3 αν k < n, υπολογισμός του βαθμού του πίνακα A, rank(a) i) αν rank(a) = k, τότε τα διανύσματα είναι γραμμικά ανεξάρτητα ii) αν rank(a) < k, τότε τα διανύσματα είναι γραμμικά εξαρτημένα Βήμα 4 Αν k > n, τότε τα διανύσματα είναι γραμμικά εξαρτημένα Στη συνέχεια δίνεται μία συνάρτηση που περιγράφει τη διαδικασία του Αλγορίθμου 1.
Συνάρτηση Αλγορίθμου 1 function [r,a]=ind(a) [n,k]=size(a); r=rank(a); function if k==n d=det(a); if d~=0 disp('the vectors are linearly indepent'); else disp('the vectors are linearly depent'); elseif k<n if r==k disp( τα διανύσματα είναι γραμμικά ανεξάρτητα'); else disp( τα διανύσματα είναι γραμμικά εξαρτημένα'); else % k>n disp('the vectors are linearly depent');