90 likes | 246 Views
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ι. Σαρρής , sarris@uth.gr , τηλ . 2421074090. Διάλεξη 12 : Ασκήσεις- παραδείγματα στο Matlab. Εαρινό εξάμηνο 2008. Οργάνωση της παρουσίασης. Αυτοεπαναληπτικές διαδικασίες – 3 η άσκηση Matlab
E N D
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ι. Σαρρής,sarris@uth.gr, τηλ. 2421074090 Διάλεξη 12: Ασκήσεις- παραδείγματα στο Matlab Εαρινό εξάμηνο 2008
Οργάνωση της παρουσίασης • Αυτοεπαναληπτικές διαδικασίες – 3η άσκηση Matlab • Γραμμικά συστήματα – 5η άσκηση Μόνο με την πρακτική εξάσκηση αυτά που θα δείτε στην τάξη θα σας κάνουν άνετους με το Matlab!!!
Άσκηση 3 Γράψτε μια συνάρτηση με όνομα funct, με όρισμα εισαγωγής έναν αριθμό n, η οποία θα υπολογίζει τη συνάρτηση, που δίδεται παρακάτω, στο n. Καλέστε την μέσα από το κύριο πρόγραμμα σας για n=4 και n=12. Εμφανίστε στην οθόνη τα αποτελέσματα με κατάλληλα σχόλια.
Παράδειγμα διαδικασίας function y = fact(x) %FACT factorial by a recursive procedure. % FACT(X) is the factorial of X by a recursive procedure, % where X is an integer scalar. See Section 7.6, Recursion. if sum(size(x)) ~= 2 error('Argument is not a scalar, calculation aborted') elseif x ~= fix(x) error('Argumentis not an integer, calculation aborted') else if x == 0 y = 1; else y = x*fact(x-1); end end
Άσκηση 5 Υλοποιήστε μια συνάρτηση με όνομα mymtdv η οποία θα δέχεται σαν ορίσματα εισαγωγής ένα πίνακα Α και ένα διάνυσμα b, και η οποία θα επιστρέφει ένα πίνακα του οποίου τα στοιχεία θα υπολογίζονται από τη σχέση . Μη κάνετε χρήση των εντολών/ιδιοτήτων του Matlab. Καλέστε τη συνάρτηση μέσα από το κύριο πρόγραμμα σας για τα , και εμφανίστε στην οθόνη τα αποτελέσματα με κατάλληλα σχόλια. και
Παράδειγμα διαδικασίας function [sum, difference] = sumdiff(a, b); % function [sum, difference] = sumdiff(a, b); % % Μια απλή συνάρτηση για τον υπολογισμό την πρόσθεσης % και της αφαίρεσης των δύο ορισμάτων a και b % % Γ. Σαρρής, Μάιος 2008 % % Είσοδος: % a: πίνακας μεγέθους r x c % b: πίνακας μεγέθους r x c % % Έξοδος: % sum: a + b % difference: a - b % error checking [rowsa, colsa] = size(a); [rowsb, colsb] = size(b); if( rowsa ~= rowsb ) | ( colsa ~= colsb) error(‘sizes of a and b do not match’); end sum = a + b; difference = a – b;
Μέθοδος Euler % αρχείο: simpleEuler.m % Αυτό το αρχείο matlab file θα βρει την προσεγγιστική λύση της εξίσωσης: % % dy/dx = 1/y % y(0) = starty % % Για να εκτελεστεί το αρχείο πρέπει να προσδιορίσουμε % τα ακόλουθα: % h : το μέγεθος του βήματος % starty : την αρχική τιμή % % Ο κώδικας θα παράγει τρία διανύσματα. Το πρώτο % διάνυσμα είναι το x αρχίζοντας από το x0=0 και με βήμα h. % Το δεύτερο διάνυσμα είναι η προσεγγιστική λύση που βρίσκουμε % Το τρίτο διάνυσμα είναι η πραγματική λύση της Δ.Ε. % x = [0:h:1]; y = 0*x; y(1) = starty; fori=2:max(size(y)), y(i) = y(i-1) + h/y(i-1); end true =sqrt(2*x+1);
Η βασική συνάρτηση επίλυσης function[x,y] = eulerApprox(startx,h,endx,starty,func) % Αρχείο: eulerApprox.m % Αυτή η υπορουτίνα του matlab μας δίνει την προσεγγιστική λύση Δ.Ε. της μορφής: % y' = func(x,y) % y(startx) = starty % % Για την εκτέλεση του κώδικα πρέπει πρώτα να ορίσουμετα ακόλουθα: % startx : την αρχική τιμή του x % h : το βήμα % endx : την τελική τιμή του x % starty : την αρχική τιμή της συνάρτησης % func : το όνομα της συνάρτησης που θα υπολογίσουμε. % % πχ: [x,y] = eulerApprox(0,1,1/16,1,'f'); % % Η συνάρτηση θα παράγει δύο διανύσματα. Το πρώτο διάνυσμα περιέχει % το x. Το δεύτερο διάνυσμα περιέχει την προσεγγιστική λύση της Δ.Ε. % x = [startx:h:endx]; y = 0*x; y(1) = starty; fori=2:max(size(y)), y(i) = y(i-1) + h*feval(func,x(i-1),y(i-1)); end
Εφαρμογή της μεθόδου Euler >> simpleEuler ??? Undefined function or variable h. Error in ==> /home/black/math/mat/examples/simpleEuler.m On line 28 ==> x = [0:h:1]; >> h = 1/16; >> starty = 1; >> simpleEuler >> whos Name Size Bytes Class h 1x1 8 double array i 1x1 8 double array starty 1x1 8 double array true 1x17 136 double array x 1x17 136 double array y 1x17 136 double array Grand total is 54 elements using 432 bytes >> plot(x,y,'rx',x,true) function[f] = f(x,y) % Το δεξί μέλος της διαφορικής εξίσωσης. f = 1/y;