Υπολογιστική Επιστήμη & Τεχνολογία Εξέταση Ιουνίου 2015 Διάρκεια 2.5 ώρες 1. Ιεραρχίες μνήμης (1μ) Να υλοποιήσετε σε MATLAB την επίλυση του γραμμικού συστήματος T X = B, όπου ο T είναι άνω τριγωνικός πίνακας n n και ο B πίνακας n m, χρησιμοποιώντας αντίστοιχα πράξεις BLAS1, BLAS2 και BLAS3. [n, m] = size(b); % BLAS 1 for j = 1:m for i = n:-1:1 X1(i,j) = (B(i,j) - T(i,i+1:)*X1(i+1:,j))/T(i,i); % BLAS 2 for j = 1:m X2(:,j) = T\B(:,j); % BLAS 3 X3 = T\B; 2. Monte Carlo (1.5μ) Γράψτε μια συνάρτηση Matlab p = Int(L,R) που να υπολογίζει στο p το ολοκλήρωμα p = R L 1 2π e x2 /2 dx Θεωρήστε ότι L < 0 < R. ΥΠΟΔΕΙΞΗ: Βρείτε και χρησιμοποιήστε κατάλληλα το ακρότατο της συνάρτησης στο διάστημα ολοκλήρωσης. Η συνάρτηση έχει μέγιστη τιμή 1/ 2π στο x = 0. function p = Int(L, R) n = 10000; 1
% Ρίχνουμε n βέλη στο ορθογώνιο με βάση R-L και ύψος ymax ymax = 1/sqrt(2*pi); x = L + rand(n,1)*(r-l); % x στο [L, R] y = ymax*rand(n,1); % y στο [0, ymax] hits = 0; % Υπολογισμός βελών κάτω από τη συνάρτηση (Α τρόπος) for k = 1:n if y(k) <= ymax*exp(-x(k)^2/2) hits = hits + 1; % Υπολογισμός βελών κάτω από τη συνάρτηση (Β τρόπος) % hits = sum(y <= exp(-x.^2/2)/sqrt(2*pi)); p = ymax*(r-l)*hits/n; 3. Αριθμητική υπολογιστών (1μ) (αʹ) Ποια είναι η δυαδική αναπαράσταση των αριθμών z = 112 + x και z (x τα 3 τελευταία ψηφία του Α.Μ. σας), σε υπολογιστή με 10 bits και στα συστήματα αναπαράστασης (i) συμπλήρωμα ως προς 2, και (ii) πλεόνασμα κατά 512. (βʹ) Έστω ένα σύστημα- παιχνίδι κινητής υποδιαστολής με m = 4 και e = 2. Ποιος είναι (i) ο μεγαλύτερος, (ii) ο μικρότερος κανονικοποιημένος και (iii) ο μικρότερος μηκανονικοποιημένος αριθμός που μπορεί να παρασταθεί στο σύστημα αυτό; (αʹ) Έστω x = 123. Μετατρέπουμε με κάποιον από τους γνωστούς τρόπους (διαφάνεια 5 στις σημειώσεις) τον z = 112 + 123 = 235 σε δυαδικό και κρατάμε μόνο τα τελευταία 10 bits: z = 235 10 = 0011101011 2. (i) συμπλήρωμα ως προς 2: z = 0011101011 2, z = 1100010101 2 (διαφάνεια 10). (ii) Το πλεόνασμα κατά 512 είναι το συμπλήρωμα ως προς το 2 με το πρόσημο αντετραμμένο: z = 1011101011 2, z = 0100010101 2 (διαφάνεια 11). (βʹ) (i) 9.999 10 99, (ii) 1.000 10 99 = 10 99, (iii) 0.001 10 99 = 10 102. 4. Αραιοί πίνακες (1.5μ) (αʹ) Έστω ο πίνακας Να επιλέξετε έναν τυχαίο και αραιό πίνακα 5 5 με ακριβώς 12 μη-μηδενικά στοιχεία και να τον αποθηκεύσετε με το σύστημα CRS. (βʹ) Να γράψετε αλγόριθμο πολλαπλασιασμού συμμετρικού αραιού πίνακα με διάνυσμα, όταν είναι αποθηκευμένο μόνο το άνω τριγωνικό μέρος του πίνακα με το σύστημα συντεταγμένων. 2
(αʹ) Έστω τότε 4.6 0 4.7 0 0 3.5 1.2 8.8 0 5.2 A = 0 0 2.7 0 3.3 0.5 1.6 0 0 0 0 7.3 3.9 0 0 val = [4.6 4.7 3.5 1.2 8.8 5.2 2.7 3.3 0.5 1.6 7.3 3.9] col = [1 3 1 2 3 5 3 5 1 2 2 3] start = [1 3 7 9 11 13] (βʹ) Κώδικας για y = Ax, A αραιός συμμετρικός πίνακας αποθηκευμένος με το σύστημα συντεταγμένων: m = length(val); n = length(x); y = zeros(n,1); for k = 1:m i = row(k); j = col(k); y(i) = y(i) + val(k)*x(j); if i ~= j y(j) = y(j) + val(k)*x(i); 5. Αλυσίδες Markov (1μ) Έστω ότι 5 χώρες, A, B, C, D και E μοιράζονται την παγκόσμια παραγωγή καφέ με ποσοστά στην παρούσα χρονική στιγμή 0.15, 0.18, 0.35, 0.25 και 0.07 αντίστοιχα. Έστω ότι καθεμιά από αυτές διατηρεί το 96% της αγοράς της κάθε χρόνο και χάνει 1% από καθεμιά από τις ανταγωνίστριες της. Να γράψετε συνάρτηση MATLAB που να υπολογίζει τα ποσοστά κάθε χώρας σε μια περίοδο T ετών να τα παριστάνει γραφικά σε μία γραφική παράσταση. function p = markovcoffee(t) p = [0.15; 0.18; 0.35; 0.25; 0.07]; % Aρχική κατάσταση M = toeplitz([0.96 0.01 0.01 0.01 0.01]); % Πίνακας μετάβασης % Αρχικοποίηση πίνακα ποσοστών. Η στήλη J του πίνακα % αντιστοιχεί στα ποσοστά των εταιριών στην περίοδο J. Y = zeros(5, T); Y(:,1) = p; for i = 2:T p = M*p; Y(:,i) = p; % Η γραμμή I είναι τα ποσοστά της εταιρίας I σε κάθε περίοδο % Πλοτάρει τις ΓΡΑΜΜΕΣ του πίνακα. plot(y ); 3
6. Τυχαίοι περίπατοι (1μ) Έστω τυχαίος περίπατος σε μια διάσταση (ένα ευθύγραμμο τμήμα) με N ενδιάμεσους σταθμούς. Ο περίπατος ξεκινάει στο ένα άκρο με σκοπό να καταλήξει στο άλλο άκρο. Ευρισκόμενος σε έναν ενδιάμεσο κόμβο, ο περίπατος μεταβαίνει ισοπίθανα σε έναν από τους 2 γειτονικούς του κόμβους. Γράψτε μια συνάρτηση visits = rand1d(n), που προσομοιώνει τον τυχαίο αυτό περίπατο και καταγράφει την επισκεψιμότητα κάθε κόμβου (πόσες φορές ο περίπατος βρέθηκε σε έναν δεδομένο κόμβο). Η συνάρτησή σας πρέπει επίσης να πλοτάρει ένα ραβδόγραμμα με την επισκεψιμότητα κάθε κόμβου. function visits = rand1d(n) NN = N + 2; visits = zeros(nn, 1); x = 1; visits(x) = 1; while x ~= NN if x == 1, x = x + 1; else p = rand(1); if p < 0.5 x = x - 1; else x = x + 1; visits(x) = visits(x) + 1; bar(visits); 7. Προσομοίωση (1μ) Στο πρόβλημα καταδίωξης ταύρου-οδοιπόρου, θεωρούμε ότι ο ταύρος κουράζεται εύκολα και η ταχύτητά του είναι V b (t) = 10e 0.01t. Θεωρούμε επίσης ότι ο οδοιπόρος, ζεσταίνεται σιγάσιγά, αλλά τελικά κουράζεται και επομένως η ταχύτητά του είναι V h (t) = 8+2 sin(πt/40). Πως τροποποιείται ο αλγόριθμος καταδίωξης με τα νέα δεδομένα? Να γράψετε τον τροποποιημένο αλγόριθμο σαν συνάρτηση MATLAB, με κατάλληλες παραμέτρους εισόδου/εξόδου. function saved = pursuit(xb, yb, xh, xf, dt) t = 0; s = sqrt((xb-xh)^2+yb^2); while xh<xf && s>1 t = t + dt; vb = 10*exp(-0.01*t); vh = 8 + 2*sin(pi*t/40); xb = xb + (xh-xb)*vb*dt/s; yb = yb - yb*vb*dt/s; xh = xh + vh*dt; s = sqrt((xb-xh)^2+yb^2); if xh >= xf, saved = true; 4
else saved = false; 8. MATLAB structs (1μ) Συμπληρώστε την παρακάτω συνάρτηση έτσι ώστε να λειτουργεί σύμφωνα με τις προδιαγραφές της: function d = PolyLength(P) % Το P ένας πίνακας δομών από n σημεία. % Το d είναι το μήκος της κλειστής πολυγωνικής γραμμής % που ορίζεται από τα P(1), P(2),...,P(n). Θεωρήστε ότι τα πεδία της δομής ενός σημείου είναι τα x και y. Χρησιμοποιούμε τη βοηθητική συνάρτηση GetDist από το βιβλίο για τον υπολογισμό της απόστασης δύο σημείων function d = GetDist(P1,P2) d = sqrt((p1.x - P2.x)^2 + (P1.y - P2.y)^2); Η ζητούμενη συνάρτηση: function d = PolyLength(P) n = length(p); d = 0; for i = 1:n-1 d = d + GetDist(P(i), P(i+1)); d = d + GetDist(P(n), P(1)); 9. Επεξεργασία εικόνας (1μ) Γράψτε μια συνάρτηση PhotoFrame(filename, width, colour) που να δέχεται ένα ασπρόμαυρο jpeg αρχείο filename και να το εμφανίζει μέσα σε εξωτερικό πλαίσιο πλάτους width και απόχρωσης γκρίζου colour. function PhotoFrame(filename, width, colour) photo = imread(filename); [nr, nc] = size(photo); % Δημιουργία μεγαλύτερου πίνακα που περιλαμβάνει τα περιθώρια. % Ο πίνακας πρέπει να είναι τύπου uint8 και αρχικοποιείται στην % απόχρωση colour. framedphoto = colour*ones(nr+2*width, nc+2*width, uint8 ); % H αρχική φωτογραφία εντάσεται στο πλαίσιο. framedphoto(width+1:width+nr, width+1:width+nc) = photo; imshow(framedphoto); 5
10. Επεξεργασία ήχου (1μ) Γράψτε συνάρτηση error = SoundInsert(infile1, Tstart, T, infile2, outfile) που να αντικαθιστά, στο wav αρχείο infile1, το ηχητικό στιγμιότυπο ανάμεσα στις χρονικές στιγμές Tstart και T με την ηχογράφηση στο wav αρχείο infile2 και να το αποθηκεύει στο αρχείο outfile. Η συνάρτησή σας να ελέγχει αν οι δεδομένες χρονικές στιγμές Tstart, T είναι μέσα στα όρια της ηχογράφησης (error = 0) ή όχι (error = 1). Θεωρήστε χωρίς έλεγχο ότι Tstart < T. Θεωρούμε ότι και οι δυο ηχογραφήσεις έχουν τον ίδιο ρυθμό δειγματοληψίας. error = SoundInsert(infile1, Tstart, T, infile2, outfile) [sound1, rate] = wavread(infile1); error = 0; n = length(sound1); % Διάρκεια ηχογράφησης σε sec T = (n-1)/rate; % Έλεγχος ορίων if Tstart < 0 T > T error = -1; return % Θέσεις στο διάνυσμα που αντιστοιχούν στα Tstart, T. istart = Tstart*rate + 1; i = T*rate + 1; [sound2, rate] = wavread(infile2); % Νέο διάνυσμα δειγμάτων. newsound = [sound1(1:istart-1) sound2 sound1(i+1:n)]; wavwrite(newsound, rate, 8, outfile); 6