ΜΑΣ 9. Μαθηματικά με Υπολογιστές Διδάσκων: Γιώργος Γεωργίου Ενδιάμεση εξέταση Θεωρία 8 Μαρτίου 9 ΟΝΟΜΑ: ΑΤ:. Πρόβλημα (α) Ποια από τα πιο κάτω ονόματα μεταβλητών δεν είναι αποδεκτά στη MATLAB; (i) f (ii) sin (iii) Inf (iv) if (v) name μ. (β) Συμπληρώστε τον πίνακα με τις τιμές που επιστρέφουν οι συναρτήσεις βιβλιοθήκης round, floor, ceil και fi όταν =.49. Εντολή round() floor() ceil() fi() Αποτέλεσμα μ. (α) Τα f (δεν αρχίζει με γράμμα του Αγγλικού αλφαβήτου) και if (λέξη κλειδί). >> isvarname('f'), isvarname('sin'), isvarname('inf'), isvarname('if'), isvarname('name') (β) >> =.49; round(), floor(), ceil(), fi()
Εντολή Αποτέλεσμα round() floor() ceil() fi()
Πρόβλημα Να συμπληρωθούν τα αποτελέσματα που δίνει η ΜΑΤLAB: >> =[- NaN -Inf eps]; >> y=.:.5:.9; >> >> length() Αποτέλεσμα >> length(y) Αποτέλεσμα >> >> isfinite() Αποτέλεσμα >> find(isfinite()) Αποτέλεσμα 4 >> (find(isfinite())) Αποτέλεσμα 5 >> >> all() Αποτέλεσμα 4 μ. >> =[- NaN -Inf eps]; >> y=.:.5:.9; >> >> length() >> length(y) >> >> isfinite() >> find(isfinite()) 5 >> (find(isfinite())) -.. >> >> all()
Πρόβλημα Δίνονται οι πιο κάτω εντολές της ΜΑΤLΑΒ: >> clear >> z=+i z =. +.i >> i=z i =. +.i >> z=+i; >> c=z==z; Ποιες είναι οι τιμές των μεταβλητών z και c; μ. >> z,c z =. +.i c = Παρατηρούμε ότι η z είναι μιγαδική μεταβλητή ενώ η c είναι λογική μεταβλητή. Αυτό μπορούμε να το δούμε με την εντολή whos: >> whos Name Size Bytes Class Attributes c logical i double comple z double comple z double comple 4
Πρόβλημα 4 (α) Αν u = ( u, u,, u n ), πως μπορεί να υπολογιστεί με μια μόνο εντολή της MATLAB το άθροισμα n S = u u k = μ. (β) Γράψτε τις εντολές για να σχεδιαστούν στο ίδιο γράφημα και στο διάστημα [,π] με βήμα π/ οι γραφικές παραστάσεις των συναρτήσεων y = sin sin( ), y = sin( )sin( ), y = sin( 4)sin( ) k+ με κόκκινη συνεχή γραμμή πάχους, μπλε συνεχή γραμμή πάχους και πράσινη διακεκομμένη γραμμή πάχους, αντίστοιχα. μ. (α) >> sum(abs(u(:n)-u(:n-))) Για παράδειγμα, >> u=[ - 5 ] u = - 5 >> sum(abs(u(:n)-u(:n-))) (β) Με τις εντολές >> =:pi/:*pi; >> y=sin().*sin(*); plot(,y,'r','linewidth',), hold on; >> y=sin(-).*sin(*); plot(,y,'b','linewidth',); >> y=sin(-4).*sin(*); plot(,y,'g--','linewidth',); παίρνουμε το ακόλουθο γράφημα: k.8..4. -. -.4 -. -.8-4 5 7 5
Πρόβλημα 5 Αν p = + + q= 4 5 8 4, 5 γράψτε τις εντολές MATLAB για τα εξής: (α) Υπολογισμός του pq μ. (β) Υπολογισμός του p μ. (γ) Εύρεση των ριζών του p μ. (δ) Εύρεση των σημείων τομής των p και q μ. (α) >> p=[5 - -8 4]; q=[5 -]; >> conv(p,q) 75 - -8 5-8 (β) >> conv(p, conv(p,p)) Columns through 7 75 5 7 - -98 448 84 Columns 8 through -84-5 -84 4 (γ) >> roots(p) -.78 -.5.5.874 (δ) >> roots(p-[ q]) -.885 -.5.5.55
Πρόβλημα Να συμπληρωθούν οι τρεις εντολές της MATLAB που λείπουν: >> Εντολή Name Size Bytes Class Attributes L logical Name char f function_handle 8 double 8 double 7 double z double comple >> pi^.459 >> Εντολή >> ans.45957785 >> Εντολή Your variables are: μ. >> whos Name Size Bytes Class Attributes L logical Name char f function_handle 8 double 8 double 7 double z double comple >> pi^.459 >> format long >> ans.45957785 >> who * Your variables are: 7
Πρόβλημα 7 (α) Ορίστε στη MATLAB τα εξής: A = και b = 4 μ. Γράψτε τις εντολές της MATLAB που υπολογίζουν τα ακόλουθα: (β) Την ορίζουσα και τον βαθμό του Α. μ. (γ) Τον ανάστροφο και τον αντίστροφο του Α. μ. (δ) Τις ιδιοτιμές και τα ιδιοδιανύσματα του Α. μ. (ε) Τη λύση του συστήματος A=b μ. (α) (β) (γ) (δ) >> A=[eye() ones(,); ones(,4)], b=[:4]' A = b = 4 >> det(a) - >> rank(a) 4 >> A' >> inv(a).5 -.5 -.5.5 -.5.5 -.5.5 -.5 -.5.5.5.5.5.5 -.5 >> [V,D]=eig(A) V =.48 -..7887.48.48.7887 -..48.48 -.5774 -.5774.48 8
-.77.77 D = -.7...7 (ε) >> A\b 9
Πρόβλημα 8 (α) Κατασκευάστε με απλό τρόπο (και όχι με απευθείας εκχώρηση τιμών) τον πίνακα: A = 9 7 5 μ. (β) Κατασκευάστε με απλό τρόπο (και όχι με απευθείας εκχώρηση τιμών) τον πίνακα: B = μ. (γ) Κατασκευάστε με απλό τρόπο (και όχι με απευθείας εκχώρηση τιμών) τον πίνακα: 4 4 4 4 5 4 4 4 4 5 4 4 4 4 5 C = 4 4 4 4 5 μ. (α) >> A=[*ones() eye(,4);:-:] A = 9 7 5 (β) (γ) >> B=*ones(4,5); B(:4,:4)= B = >> n=7; % For eample >> C=4*ones(n); C(:,end)=5; C(end,:)= C = 4 4 4 4 4 4 5 4 4 4 4 4 4 5 4 4 4 4 4 4 5 4 4 4 4 4 4 5 4 4 4 4 4 4 5 4 4 4 4 4 4 5
Πρόβλημα 9 Ορίστε τη συνάρτηση f( ) = e sin( ) όπου το να μπορεί να είναι διάνυσμα με τους εξής τρόπους: (α) Με function m-file. μ. (β) Με ανώνυμη συνάρτηση. μ. (γ) Με την εντολή inline. μ. (δ) Σχεδιάστε το γράφημα της f στο [,5] με διαφορετικές εντολές. μ. (α) function y=f() % F y=ep( sqrt().* sin(*) ); % End of F (β) (γ) >> f=@() ep( sqrt().* sin(*) ) f = @() ep( sqrt().* sin(*) ) >> f=inline('ep( sqrt().* sin(*) )','') f = Inline function: f() = ep( sqrt().* sin(*) ) (δ) ος τρόπος Εντολή plot Με τις εντολές >> =:.:5; plot(,f()) παίρνουμε το γράφημα: 9 8 7 5 4.5.5.5.5 4 4.5 5 ος τρόπος Εντολή fplot Εφόσον έχουμε ορίσει ανώνυμη συνάρτηση ή συνάρτηση inline, με την εντολή >> fplot(f,[,5]) παίρνουμε το γράφημα
.5.5.5.5 4 4.5 5 9 8 7 5 4 ος τρόπος Εντολή ezplot Χρησιμοποιούμε τη συνάρτηση ezplot: >> ezplot(f,,5) 8 ep( sqrt() sin( ) ) 7 5 4.5.5.5.5 4 4.5 5
y - - 9 Πρόβλημα (α) Σχεδιάστε το γράφημα της καμπύλης 4 4 4 + + y 4y + 4y = στο διάστημα [-,]. μ. (β) Σχεδιάστε τις ισοϋψείς -9:.5: της 4 f ( y, ) = 4 + + y 4y + 4y στο ορθογώνιο [-,] [-,] και βάλτε ετικέτες για τις τιμές -9::. 5 μ. (α) Με την εντολή >> ezplot('4*-^4+^/+*y-4*y^+4*y^4',[-,]) παίρνουμε το ακόλουθο γράφημα: 4 4-4 + /+ y-4 y +4 y 4 =.5.5 -.5 - -.5 - - -.5 - -.5.5.5 (β) Με τις εντολές >> [,y]=meshgrid(-:.5:,-:.5:); >> z=4*-.^4+.^/+.*y-4*y.^+4*y.^4; >> [C,h]=contour(,y,z,-9:.5:); >> clabel(c,h,-9::) παίρνουμε το γράφημα.5-9 - - 9 9.5-9 - -.5 - - -.5-9 - 9 9 9 - - -.5 - -.5.5.5
Πρόβλημα (α) Ένας αριθμός μηχανής γράφεται γενικά στη μορφή (. ) = σ aa at β Εξηγήστε τι αντιπροσωπεύουν τα σ, t, β και e. μ. (β) Τι καλούμε υπερχείλιση (overflow) και τι υπεκχείλιση (underflow). μ (γ) Ποιος είναι ο κατ απόλυτη τιμή μέγιστος αριθμός μηχανής; μ. (δ) Ποιος είναι ο κατ απόλυτη τιμή ελάχιστος αριθμός μηχανής; μ. (α) Το σ είναι το πρόσημο του αριθμού. Το β είναι η βάση του αριθμητικού συστήματος. Το t είναι το πλήθος των σημαντικών ψηφίων που αποθηκεύει το σύστημα. Το e είναι ο εκθέτης. (β) Υπερχείλιση (overflow) συμβαίνει όταν το αποτέλεσμα μιας πράξης στον υπολογιστή είναι κατ απόλυτη τιμή μεγαλύτερο από τον απόλυτα μέγιστο αριθμό μηχανής: > ma Στην περίπτωση αυτή η MATLAB θέτει τον ίσο με Inf ή Inf.. Υπεκχείλιση (underflow) συμβαίνει όταν το αποτέλεσμα μιας πράξης στον υπολογιστή είναι κατ απόλυτη τιμή μικρότερο από τον απόλυτα ελάχιστο αριθμό μηχανής: < min Στην περίπτωση αυτή η MATLAB θέτει τον ίσο με. Και στις δυο περιπτώσεις χάνεται κάθε πληροφορία για τον αριθμό. e β (γ) Ο κατ απόλυτη τιμή μέγιστος αριθμός μηχανής είναι ο ( β β β ) U ma =.( )( ) ( ) β όπου U η μέγιστη τιμή που μπορεί να πάρει ο εκθέτης. (δ) Ο κατ απόλυτη τιμή ελάχιστος αριθμός μηχανής είναι ο ( ) = L min. β β όπου L η ελάχιστη τιμή που μπορεί να πάρει ο εκθέτης. β 4
Πρόβλημα (α) Αν μια δυαδική μηχανή αποθηκεύει μέχρι 8 σημαντικά ψηφία και χρησιμοποιεί στρογγύλευση, πως θα αποθηκεύσει το δυαδικό αριθμό.; μ (β) Ποια αποτελέσματα δίνει η MATLAB στις ακόλουθες περιπτώσεις /, inf/inf, realmin+realma, NaN-ΝaΝ μ (γ) Ποια από τις πιο κάτω «ισοδύναμες» εντολές είναι προτιμότερη και γιατί; (i) y=(-).^ (ii) y=.^-*.^+*- μ (α) Αν =. και t=8, τότε με στρογγύλευση (β) >> / Warning: Divide by zero. NaN >> >> Inf/Inf NaN >> >> realmin/realma >> >> NaN-NaN NaN >> fl()=.. (γ) Η (i) γιατί απαιτεί λιγότερες πράξεις, είναι πιο ακριβής για τιμές του στην περιοχή του και είναι πιο απλή! Για παράδειγμα, >> =.9999; >> y=(-).^ y = -.e- >> y=.^-*.^+*- y = -.5e- 5
Πρόβλημα Ορίστε τη συνάρτηση gy y y (, ) = ( )sin( + ) έτσι ώστε το να μπορεί να είναι διάνυσμα με τους εξής τρόπους: (α) Με function m-file. μ. (β) Με ανώνυμη συνάρτηση. μ. (γ) Με την εντολή inline. μ. (δ) Πως μπορούμε να σχεδιάσουμε το γράφημα της g στο [-,] [-,] με δύο διαφορετικούς τρόπους; μ. (ε) Σχεδιάστε το γράφημα και τις ισοϋψείς της g όπως φαίνεται στο σχήμα. μ. ( -y) sin( +y ) ( -y) sin( +y ).5 4.5 - -4 y -.5 - - y - - - - -.5 - - - (α) function z=g(,y) % G z=(.^-y).*sin(.^+y.^); % End of G (β) (γ) >> g=@(,y) (.^-y).*sin(.^+y.^) g = @(,y) (.^-y).*sin(.^+y.^) >> g=inline('(.^-y).*sin(.^+y.^)','','y') g = Inline function: g(,y) = (.^-y).*sin(.^+y.^) (δ) ος τρόπος Εντολή surf Με τις εντολές >> [,y]=meshgrid(-:.:,-:.:); >> surf(,y,g(,y))
παίρνουμε το γράφημα: 4 - -4 - - - - -.5 - -.5.5.5 ος τρόπος Εντολή ezsurf Εφόσον έχουμε ορίσει ανώνυμη συνάρτηση ή συνάρτηση inline, με την εντολή >> ezsurf(g, [-,, -, ]) παίρνουμε το γράφημα ( -y) sin( +y ) 4 - -4 - y - - - -.5 - -.5.5.5 (ε) Τα γραφήματα έγιναν στο χωρίο [-,] [-,] με τις εντολές >> subplot(,,), ezsurfc(g,[-,,-,]) >> subplot(,,), ezcontourf(g,[-,,-,]) 7
Πρόβλημα 4 (α) Γράψτε ένα m-file με επικεφαλίδα function [inside]=inunitcircle(,y,iplot) το οποίο θα ελέγχει αν το σημείο (,y) βρίσκεται μέσα ή στο σύνορο του μοναδιαίου κύκλου ο οποίος ορίζεται παραμετρικά ως εξής: + y = = cos t, y = sin t, t [, π ] Η μεταβλητή εξόδου θα παίρνει τις τιμές, ή, αν το (,y) βρίσκεται εκτός, εντός ή στο σύνορο του μοναδιαίου κύκλου, αντίστοιχα. Η inunitcircle θα επιστρέφει χωρίς να κάνει γραφικά όταν iplot=. Διαφορετικά θα σχεδιάζει τον κύκλο με μπλε συνεχή γραμμή και το σημείο (,y) με κόκκινο τετράγωνο μεγέθους 8 points και πάχος ακμής. 4 μ. (β) Γράψτε τώρα ένα m-file με επικεφαλίδα function [inside]=inanycircle(,y,iplot,, y, R) το οποίο θα ελέγχει αν το σημείο (,y) βρίσκεται μέσα ή στο σύνορο του κύκλου με κέντρο το (,y) και ακτίνα R, ( ) + ( y y ) = R, και θα κάνει κατά τα άλλα ότι κάνει και το inunitcircle.m στο (α) 4 μ. Σημείωση: η παραμετρική μορφή του κύκλου έχει ως εξής: = + Rcos t, y = y + Rsin t, t [, π ] (α) function [inside]=inunitcircle(,y,iplot) % INUNITCIRCLE % Checks if (,y) is inside the unit circle % If iplot== it plots the circle and the point % inside = : (,y) is outside % : (,y) is inside % : (,y) is on the boundary r=sqrt(^+y^); if r > inside=; elseif r== inside=; else inside=; end % Plot if iplot== if iplot== ezplot('cos(t)', 'sin(t)',[,*pi]), ais equal, hold plot(,y,'rs','markersize',8,'linewidth',), hold off set(gcf,'color','w') end % End of INUNITCIRCLE on 8
Με την εντολή >> inunitcircle(.5,-.8,) παίρνουμε το ακόλουθο γράφημα = cos(t), y = sin(t).8..4. y -. -.4 -. -.8 - -.5.5 (β) function [inside]=inanycircle(,y,iplot,, y, R) % INANYCIRCLE % Checks if (,y) is inside the circle with center (,y) % and radius R. % If iplot== it plots the circle and the point % inside = : (,y) is outside % : (,y) is inside % : (,y) is on the boundary r=sqrt((-)^+(y-y)^); if r > R inside=; elseif r==r inside=; else inside=; end % Plot if iplot== if iplot== plot(+r*cos(:.*pi:*pi),y+r*sin(:.*pi:*pi),'k'), ais equal, hold on plot(,y,'rs','markersize',8,'linewidth',), hold off set(gcf,'color','w') end % End of INANYCIRCLE Με την εντολή >> inanycircle(.,.,,,,.5) παίρνουμε το ακόλουθο γράφημα 9
.4..8..4...4..8..4.
Πρόβλημα 5 (α) Τα πολυώνυμα Legendre ορίζονται με την αναδρομική σχέση p ( ) =, p ( ) =, np( ) = (n ) P ( ) ( n ) P ( ), n=,, n n n Έτσι τα πρώτα πολυώνυμα Legendre είναι τα εξής: 5 5 4 5 p =, p =, p =, p =, p4 = + 8 4 8 Με ποιες εντολές μπορούμε να ορίσουμε τα p έως p 4 ως ανώνυμες συναρτήσεις του και να κατασκευάσουμε το ακόλουθο γράφημα;.5.5.5 -.5.5.5 p () p () -.5 -.5 - - -.5 -.5 - -.5.5.5 -.5 -.5 - -.5.5.5.5.5 -.5.5 4.75 4 -.75 +.75.5.5 p () p 4 () -.5 -.5 - - -.5 -.5 - -.5.5.5 -.5 -.5 - -.5.5.5 Σημείωση: τα όρια των αξόνων ορίζονται από τον χρήστη. 5 μ. (β) Ως γνωστό τα πολυώνυμα στη MATLAB παριστάνονται με διανύσματα. Γράψτε τις διανυσματικές μορφές των p έως p 4. μ. (γ) Γράψτε ένα m-file με επικεφαλίδα function lp=vecleg(n) που θα βρίσκει τη διανυσματική μορφή του πολυωνύμου Legendre τάξης n. 5 μ. (α) >> p=@() p = @() >> p=@().5*.^-.5 p = @().5*.^-.5 >> p=@().5*.^-.5* p = @().5*.^-.5*
>> p4=@() 4.75*.^4-.75*.^+.75 p4 = @() 4.75*.^4-.75*.^+.75 >> subplot(,,); ezplot(p); ylabel('p_()'); >> ais([-.5.5 -.5.5]) >> subplot(,,); ezplot(p); ylabel('p_()'); >> ais([-.5.5 -.5.5]) >> subplot(,,); ezplot(p); ylabel('p_()'); >> ais([-.5.5 -.5.5]) >> subplot(,,4); ezplot(p4); ylabel('p_4()'); >> ais([-.5.5 -.5.5]) >> set(gcf,'color','w') (β) >> p=[]; >> p=[ ]; >> p=[.5 -.5]; >> p=[.5 -.5 ]; >> p4=[4.75 -.75.75]; (γ) Γράψαμε το πιο κάτω αναδρομικό m-file: function lp=vecleg(n) % VECLEG % Finds the vector representation of the nth % Legendre polynomial % P_= % P_= [ ] and % n P_n = (n-) P_(n-) - (n-) P_(n-), n=,,... % if n< lp=; elseif n== lp=[ ]; else lp=( (*n-)* conv([ ],vecleg(n-))-(n-)*[ vecleg(n-)] )/n; end % End of VECLEG το οποίο δίνει τα πιο κάτω αποτελέσματα: >> vecleg() >> vecleg() >> vecleg().5 -.5 >> vecleg().5 -.5 >> vecleg(4) 4.75 -.75.75 >> vecleg(5) 7.875-8.75.875 >> vecleg() 4.475-9.875.55 -.5
Πρόβλημα (α) Ποια αποτελέσματα δίνει το πιο κάτω αναδρομικό m-file function f=fibnum(n) %FIBONACCI % It finds the nth Fibonacci number if n<= f=; else f=fibnum(n-)+fibnum(n-); end % End of FIBNUM για n=,,,, 4, 5 και ; μ. (β) Τι υπολογίζει το fibnum.m; μ. (γ) Γράψτε ένα m-file με το όνομα fibonacci.m που θα κάνει ακριβώς ότι και το fibnum.m αλλά με τη χρήση βρόχου for. 5 μ. (α) >> for i=:, fibnum(i), end 5 8 (β) Υπολογίζει την ακολουθία Fibonacci (γ) f =, f =, f = f + f, k =,, k k k function fk=fibonacci(n) %FIBONACCI % It finds the nth Fibonacci number f=zeros(n,); f()=; f()=; if n<= fk=; elseif n== fk=; else for k=:n f(k)=f(k-)+f(k-); end fk=f(k); end % End of FIBONACCI
Πρόβλημα 7 Ο Θυμαρίδας από την Πάρο (c. 4-5 π.χ) είναι γνωστός για τη μέθοδό του για την επίλυση γραμμικών συστημάτων που είναι γνωστή ως απάνθημα (άνθος) του Θυμαρίδα (bloom of Thymaridas). Για το n n σύστημα + n = m + n = m () n + n = mn + + + + = s n με n>, ο Θυμαρίδας βρήκε ότι m+ m + + mn s n = () n Το σύστημα () γράφεται στη μορφή Τ=b όπου m m m T = και b = () m n s (α) Γράψτε ένα m-file με το όνομα thymarid.m, με μεταβλητή εισόδου το n και μεταβλητή εξόδου τον n n πίνακα Τ. 5 μ. (β) Γράψτε ένα m-file με όνομα afterblossom.m που θα επιλύει το σύστημα T=b έχοντας ως μεταβλητή εισόδου το διάνυσμα b και μεταβλητή εξόδου τη λύση του συστήματος. Το πρόγραμμα δεν πρέπει να χρησιμοποιεί την επιλογή =T\b ούτε την =inv(t)*b Θα ελέγχει επίσης κατά πόσο n> και αν όχι θα σταματά γράφοντας κατάλληλο μήνυμα λάθους. μ. (α) To function m-file είναι το εξής: function A=thymarid(n) % THYMARID % Constructs Thymaridas' nn matri A=[eye(n-), ones(n-,); ones(,n)]; % End of THYMARID Ακολουθούν παραδείγματα αποτελεσμάτων του thymarid.m: n >> thymarid(5) 4
>> >> thymarid(7) (β) Γράψαμε το ακόλουθο m-file: function =afterblossom(b) % AFTERBLOSSOM % Solves Thymaridas' system T=b % where T is the matri of Thymaridas using % back substitution. % n=ma(size(b)); if n<= error('the size of b should >!') end =zeros(n,); (n)= (sum(b(:n-))-b(n) )/(n-); for i=n-:-: (i)=b(i)-(n); end % End of AFTERBLOSSOM Ακολουθεί ένα αντιπροσωπευτικό παράδειγμα: >> format rat >> afterblossom( (:8)' ) -7/ -4/ -/ / 5/ 8/ / / Θα επαληθεύσουμε το αποτέλεσμά μας: >> =thymarid(8)\(:8)' = -7/ -4/ -/ / 5/ 8/ / / 5