340 likes | 468 Views
Εισαγωγή στην Επιστήμη των Η/Υ ΙΙ Μάθημα 6 Παλινδρόμηση – Δημιουργία Video - Συναρτήσεις - GUI. http://seismo.geology.upatras.gr/comp/. Προσαρμογή δεδομένων (curve fitting). Παλινδρόμηση (Regression). Μέθοδος των ελαχίστων τετραγώνων. Υ. Εξαρτημένη μεταβλητή. Χ.
E N D
Εισαγωγή στην Επιστήμη των Η/Υ ΙΙ Μάθημα 6 Παλινδρόμηση – Δημιουργία Video - Συναρτήσεις - GUI http://seismo.geology.upatras.gr/comp/
Παλινδρόμηση (Regression) Μέθοδος των ελαχίστων τετραγώνων Υ Εξαρτημένη μεταβλητή Χ Ανεξάρτητη μεταβλητή
Παλινδρόμηση –Regression με τη Matlab • Polyfit – υπολογισμός καμπύλης παλινδρόμησης p = polyfit(x,y,n), υπολογίζει για τα δεδομένα x,y τους συντελεστές του πολυωνύμου p που έχει βαθμό n και προσαρμόζεται στα δεδομένα
Παλινδρόμηση –Regression με τη Matlab x = (0: 0.1: 2.5)'; y = erf(x); p = polyfit(x,y,6) p = 0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004
Παλινδρόμηση –Regression με τη Matlab y = polyval (p , x) Υπολογίζει την τιμή ενός πολυωνύμου σε ένα σημείο X. Είσοδος: οι συντελεστές του πολυωνύμου p Έξοδος : οι τιμές που αντιστοιχούν στα σημεία X p = polyfit(x,y,6) f = polyval(p,x); plot(x,y,'o',x,f,'-')
Δημιουργία βίντεο με τη Matlab • Αποθήκευση καρέ – καρέ • Απευθείας χειρισμός των συντεταγμένων του γραφήματος
Δημιουργία βίντεο με τη Matlab • moviein(n) - δεσμεύει μνήμη για το βίντεο (δεν χρησιμοποιείται σε νέες εκδόσεις) • getframe - επιστρέφει ένα καρέ • movie – προβάλει το βίντεο • movie2avi – μετατρέπει το βίντεο σε μορφή AVI • mpgwrite – μετατρέπει το βίντεο σε μορφή MPEG
Δημιουργία βίντεο με τη Matlab getframe - επιστρέφει ένα καρέ F = getframe F = getframe(h) F = getframe(h,rect), [left bottom width height] Παράδειγμα for j = 1:n «…plotting commands…» F(j) = getframe; End movie(F)
Δημιουργία βίντεο με τη Matlab Z = peaks; surf(Z) axis tight set(gca,'nextplot','replacechildren'); for j = 1:20 surf(sin(2*pi*j/20)*Z,Z) F(j) = getframe; end movie(F,20) movie2avi(F,'test.avi’)
Δημιουργία βίντεο με τη Matlab movie-προβάλει το βίντεο movie(M) movie(M,n) movie(M,n,fps ) movie(h,...) movie(h,M,n,fps,loc) Όπου M ένας πίνακας οι στήλες του οποίου είναι καρέ του βίντεο, συνήθως η έξοδος της getframe n – είναι ο αριθμός των προβολών • * Το n μπορεί να είναι διάνυσμα με την εξής μορφή: • [αριθμός προβολών σειρά προβολής καρέ] • π.χ. movie(M,[13 1 2 3 4 5 4 3 2 1]) • NumberofPlays = 2; • FrameOrder = [1:5 4:-1:2]; • movie(M,[NumberofPlaysFrameOrder])
Δημιουργία βίντεο με τη Matlab movie2avi – μετατρέπει το βίντεο σε μορφή AVI movie2avi(mov,filename) movie2avi(mov,filename,param,value,param,value...) mov – το βίντεο της Matlab (πίνακας με καρέ)
Δημιουργία συναρτήσεων (function) στη Matlab
Δημιουργία συναρτήσεων (function) στη Matlab H Matlab μπορεί να εκτελέσει μια ακολουθία εντολών που είναι αποθηκευμένη σε ένα αρχείο με την προέκταση .m, τα αρχεία αυτά ονομάζονται “M-files” και υπάρχουν δύο τύποι τέτοιων αρχείων τα scriptfilesκαι τα function files. • Αρχεία script ή αρχεία εντολών δεν έχουν ορίσματα εισόδου και εξόδου αλλά εκτελούν μια ακολουθία εντολών σε μεταβλητές του περιβάλλοντος εργασίας • Αρχεία συναρτήσεων (function m-files) δέχονται ορίσματα εισόδου και επιστρέφουν μεταβλητές στην έξοδο, οι εσωτερικές μεταβλητές των function είναι τοπικές. Λειτουργούν όπως οι εντολές της Matlab. Τα αρχεία script και τα αρχεία function δημιουργούνται από έναν editor (καλύτερα με τον editor της Matlab - εντολή edit)
Δημιουργία συναρτήσεων (function) στη Matlab Παράδειγμα script
Δημιουργία συναρτήσεων (function) στη Matlab Τα αρχεία function περιέχουν και αυτά μια σειρά από εντολές της Matlab, έχουν όμως και μεταβλητές εισόδου – εξόδου Γενικά, έχουν την πιο κάτω δομή 1. Επικεφαλίδα (header) Απαραίτητα με τη μορφή: function [output1, output2, ….] = filename (input1, input2, ….) To filename είναι το όνομα του αρχείου .m ΑΛΛΑ και του function υποχρεωτικά πρέπει να είναι ίδια. Προσέξτε ότι οι μεταβλητές εισόδου είναι σε παρενθέσεις ενώ οι μεταβλητές εξόδουβρίσκονται σε αγκύλες. Οι τελευταίες δεν είναι απαραίτητες αν έχουμε μόνο μια μεταβλητή εξόδου. Για παράδειγμα αντί function [out1] = parad(x, y) μπορούμε να γράψουμε function out1 = parad(x, y) 2. Σχόλια (comments) Χρησιμοποιώντας το σύμβολο % μπορούμε να εισάγουμε σχόλια (προαιρετικά). Τασχόλια εμφανίζονται με τη μορφή βοήθειας όταν τρέχουμε την εντολή help για τοfunction. 3. Εντολές Μπορούν να χρησιμοποιηθούν όλες οι εντολές της Matlab και απαραίτητα θα πρέπει να υπολογίζονται τα output.
Δημιουργία συναρτήσεων (function) στη Matlab function y = randint(m,n,a,b) % RANDINT Randomly generated integral matrix. % randint(m,n) returns an m-by-n such matrix with % entries between 0 and 9. % randint(m,n,a,b) returns entries between integers a and b. if nargin < 3, a=0; b=9; end y = floor((b-a+1)*rand(m,n))+a; Ο παραπάνω κώδικας πρέπει να αποθηκευτεί σε ένα αρχείο με το όνομα randint.m.
Δημιουργία συναρτήσεων (function) στη Matlab Οι εντολές της MATLAB, όπως οι max, size, κλπ είναι function m-files. Για την ονομασία ενός function ισχύουν οι κανόνες ονοματολογίας που ισχύουν και για τις μεταβλητές: • Το όνομα αρχίζει με γράμμα (του αγγλικού αλφαβήτου). • Το όνομα περιέχει μόνο γράμματα, αριθμούς και υποπαύλες (underscore). • Δεν χρησιμοποιούνται ονόματα που έχουν δεσμευτεί από τη MATLAB (π.χ.συναρτήσεις βιβλιοθήκης και εργαλειοθηκών). • Προτιμούνται μικρά ονόματα για πρακτικούς λόγους αν και δεν υπάρχει περιορισμός στο μήκος των ονομάτων.
Δημιουργία συναρτήσεων (function) στη Matlab function [mean, stdev] = stat(x) % STAT Mean and standard deviation % For a vector x, stat(x) returns the % mean and standard deviation of x. % For a matrix x, stat(x) returns two row % vectors containing, respectively, the % mean and standard deviation of each column. [m n] = size(x); if m == 1 m = n; % handle case of a row vector end mean = sum(x)/m; stdev = sqrt(sum(x.^2)/m -mean.^2);
Graphical User Interfaces GUI είναι ένα γραφικό περιβάλλον με το οποίο αλληλεπιδρά ο χρήστης, μέσω διαφόρων «αντικειμένων» που περιέχονται στο GUI. Τα αντικείμενα μπορεί να είναι menus, toolbars, push buttons, radio buttons, list boxes, and sliders κλπ. Τα GUI της Matlab μπορούν επίσης να χρησιμοποιήσουν σαν «αντικείμενα» διαγράμματα και να δημιουργήσουν ομάδες «αντικειμένων»
Δημιουργώντας GUI με το GUIDE To guideείναι το πρόγραμμα σχεδιασμού GUI της Matlab. Εμφανίζεται με την εντολή guideκαι μας δίνει τη δυνατότητα να σχεδιάσουμε το GUI και να προσθέσουμε τον κώδικα. Το guide δημιουργεί δύο αρχεία: *.fig που περιέχει το GUI *.m που περιέχει τον κώδικα
Δημιουργώντας GUI • Σχεδιασμός • Δημιουργία • Με το guide • Προγραμματισμός • Με το guide και το edit (δημιουργία callback) • Εκτέλεση, έλεγχος λειτουργίας
Δημιουργώντας GUI - Προγραμματισμός Προγραμματισμός είναι η δημιουργία των callback δηλαδή η ακολουθία των εντολών που εκτελούνται όταν ενεργοποιείται ένα «αντικείμενο» • Οι εντολές callback αποθηκεύονται στο M-file του GUI • τα callback ανήκουν στα αντικείμενα (e.g. CreateFnc, ButtonDwnFnc, Callback, DeleteFnc) Ένα callback αποτελείται από τα παρακάτω στάδια: • 1. Έλεγχος της κατάστασης του αντικειμένου που ξεκινά την ενέργεια • 2. Έλεγχος της κατάστασης του αντικειμένου που δέχεται την ενέργεια και του οποίου θα αλλάξουν οι ιδιότητες • 3. Συλλογή των δεδομένων/πληροφοριών • 4. Επεξεργασία • 5. Αλλαγή κατάσταση στο αντικείμενο που δέχεται την ενέργεια
Δημιουργώντας GUI - Προγραμματισμός % Create the data to plot. handles.peaks=peaks(35); handles.membrane=membrane; [x,y] = meshgrid(-8:.5:8); r = sqrt(x.^2+y.^2) + eps; sinc = sin(r)./r; handles.sinc = sinc; % Set the current data value. handles.current_data = handles.peaks; surf(handles.current_data)
% Display surf plot of the currently selected data. surf(handles.current_data);
% Determine the selected data set. str = get(hObject, 'String'); val = get(hObject,'Value'); % Set current data to the selected data set. switch str{val}; case 'Peaks' % User selects peaks. handles.current_data = handles.peaks; case 'Membrane' % User selects membrane. handles.current_data = handles.membrane; case 'Sinc' % User selects sinc. handles.current_data = handles.sinc; end % Save the handles structure. guidata(hObject,handles)
[FileName,PathName] = uigetfile('*.m','Select the M-file'); helpdlg('Choose 10 points from the figure','Point Selection'); prompt = {'Enter matrix size:','Enter colormap name:'}; dlg_title = 'Input for peaks function'; num_lines= 1; def = {'20','hsv'}; answer = inputdlg(prompt,dlg_title,num_lines,def);