Χρονικές σειρές 8 o μάθημα: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΤΗ MATLAB (2) Εαρινό εξάμηνο 2018-2019 Τμήμα Μαθηματικών ΑΠΘ Διδάσκουσα: Αγγελική Παπάνα Μεταδιδακτορική Ερευνήτρια Πολυτεχνική σχολή, Α.Π.Θ. & Οικονομικό Τμήμα, Πανεπιστήμιο Μακεδονίας http://users.auth.gr/~agpapana/ 1
Βρόχοι while Οι βρόχοι while είναι της μορφής: while relation statements Οι λέξεις while και χρησιμοποιούνται στην αρχή και στο τέλος του βρόχου. Η ακολουθία εντολών «statements» εκτελούνται εφόσον η συνθήκη relation ικανοποιείται (δηλ. είναι αληθής) και σταματούν όταν αυτή παύει να ισχύει. 2
Παράδειγμα Το function m-file xlgmin.m, που φαίνεται πιο κάτω, βρίσκει τον ελάχιστο ακέραιο για τον οποίο ισχύει log n x, όπου x δοσμένος αριθμός. function [n] = xlgmin(x) % function [n] = xlgmin(x) % Briskei ton elaxisto akeraio n gia ton opoio isxuei log n >= x % O x prepei na einai gnhsia 0etikos n = 1 ; while log(n) < x n = n+1; % Telos tou xlgmin.m 3
Τρέχουμε το πιο πάνω m-file για διάφορες τιμές του x: >> xlgmin(1) ans = 3 >> xlgmin(3) ans = 21 >> xlgmin(8) ans = 2981 4
Οι εντολές break, return και continue Οι βρόχοι for και while μπορούν να διακοπούν με την εντολή break η οποία μεταφέρει τον έλεγχο στην πρώτη εντολή μετά το τελικό του βρόχου στον οποίο χρησιμοποιείται. Έτσι αν έχουμε εγκιβωτισμένους βρόχους ο έλεγχος περνά στον επόμενο (εξωτερικό βρόχο). Η εντολή break ορίζεται μόνο μέσα σε βρόχους for και while. Μια παρόμοια εντολή που μπορεί να χρησιμοποιηθεί εναλλακτικά και εκτός βρόχων for και while είναι η εντολή return. Γενικά η εντολή αυτή μεταφέρει τον έλεγχο στην καλούσα συνάρτηση (π.χ. στο καλόν m-file) ή στο πληκτρολόγιο. Χρησιμοποιείται επίσης για τερματισμό της εντολής keyboard που μεταφέρει τον έλεγχο από ένα m-file στο πληκτρολόγιο. Όπως θα δούμε στη συνέχεια με την εντολή return μπορούμε να διακόψουμε όταν χρειάζεται την εκτέλεση των εντολών ενός m-file. 5
Αν για παράδειγμα ένας πίνακας δεν είναι αντιστρέψιμος θα ήταν καλό να μην προχωρήσουμε στην εύρεση του αντιστρόφου του. Τέλος η εντολή continue μεταβιβάζει τον έλεγχο στην επόμενη επανάληψη ενός βρόχου for ή while χωρίς να εκτελεστούν οι εναπομένουσες εντολές του βρόχου. Θα δούμε παραδείγματα χρήσης αυτών των εντολών παρακάτω. 6
Η εντολή if Η εντολή if μας επιτρέπει να ελέγξουμε αν μια (ή περισσότερες) συνθήκες ισχύουν και να εκτελέσουμε σε κάθε περίπτωση την επιθυμητή ακολουθία εντολών και πράξεων. Η εντολή έχει την γενική μορφή: if relation_1 statement(s) elseif relation_2 statement(s) else statement(s) 7
Οι συνθήκες ελέγχονται με τη χρήση σχεσιακών και λογικών τελεστών. Σημειώνουμε επίσης ότι η εντολή elseif γράφεται σαν μια λέξη (δεν πρέπει να υπάρχει κενό μεταξύ του else και του if). Η απλούστερη μορφή της εντολής if είναι η πιο κάτω: if relation statement(s) Οι εντολές εκτελούνται μόνο αν ικανοποιείται η συνθήκη relation. Διαφορετικά δεν εκτελείται καμιά εντολή στο σημείο αυτό του προγράμματος και η ροή του τελευταίου συνεχίζει κανονικά. Αν θέλουμε να γράψουμε στην ίδια γραμμή άλλες εντολές χρησιμοποιούμε κόμμα ή ερωτηματικό για να χωρίσουμε την εντολή if από την επόμενη. 8
Παράδειγμα if x>0 x=sqrt(x) ή if x>0, x=sqrt(x); 9
Παράδειγμα To παρακάτω script υπολογίζει το μισθό ενός εργαζόμενου ως εξής: Μέχρι τις 40 ώρες εργασίας, ο μισθός είναι το γινόμενο των ωρών επί το ωρομίσθιο, ενώ πάνω από τις 40 ώρες, οι απολαβές είναι κατά 50% μεγαλύτερες. % Script file workerpay.m Pay = t*h; if t > 40 Pay = Pay + (t-40)*0.5*h; disp('to eisodeima tou ergazomevou eivai ') format bank disp(pay) % Telos tou workerpay.m 10
Ορίζουμε τις μεταβλητές t και h και μπορούμε να τρέξουμε το script: >> t=46; >> h= 4.25; >> workerpay To eisodeima tou ergazomevou eivai 208.25 >> t=35; >> h= 4; >> workerpay To eisodeima tou ergazomevou eivai 140.00 11
Παράδειγμα To m-file gee.m, που φαίνεται πιο κάτω, ορίζει την συνάρτηση function [G] = gee(x) for i=1:length(x) if x(i) <= 0.5 G(i) = x(i)^2; else G(i) = 0.25; % Telos tou gee.m g x = x2, x 0.5 0.25, x > 0.5 12
Τρέχουμε το m-file και παίρνουμε τις εξής τιμές: >> gee(0) ans = 0 >> gee(0.2) ans = 0.04 >> gee(3) ans = 0.25 >> gee([1:7]') ans = 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 13
Μπορούμε, επίσης, να πάρουμε τη γραφική παράσταση της συνάρτησης g, π.χ. στο διάστημα [ 2, 2], ως εξής: >> x=linspace(-2,2); >> plot(x,gee(x)) 14
Παράδειγμα function [Ainv] = invnew(a) % Elegxei an o pinakas A einai tetragwnikos, an o pinakas A einai antistreyimos, kai an ikanopoiountai oi sunthikes briskei ton antistrofo tou [m,n] = size(a); if m~=n % Elegkse an o A einai tetragwnikos disp('matrix A is not square.'); return %eksodos apo to programma elseif rank(a) ~= n disp('matrix is singular'); return %eksodos apo to programma else Ainv = inv(a); 15
>> A=rand(4); >> invnew(a) >> A=rand(3,2); >> invnew(a) Matrix A is not square. >> A=zeros(3) >> invnew(a) Matrix is singular 16
Βιβλιογραφία 1. Γ. Γεωργίου, Χ. Ξενοφώντος. Εισαγωγή στη MATLAB. Πανεπιστήμιο Κύπρου, Λευκωσία, 2007 (ISBN 978-9963-644-57-5). 2. Matlab, High-Performance Numeric Computation and Visualization Software. The Math Works Inc, 1992. 17