ΠΡΟΣΟΜΟΙΩΣΗ ΦΥΣΙΚΩΝ ΔΙΕΡΓΑΣΙΩΝ - MATLAB Εργασία εξαμήνου Ευαγγελία Βλιώρα Α.Μ. 120004 Τμήμα E1 Εξάμηνο Β' ΘΕΣΣΑΛΟΝΙΚΗ 2013
ΘΕΜΑ 1 Σας δίνεται η συνάρτηση α) Να τη σχεδιάσετε στο διάστημα [0,10]. β) Να υπολογίσετε το ολοκλήρωμά της σε διαστήματα [0,κ], κ = 1,2,3,...,100. Κάθε αποτέλεσμα να αποθηκεύεται σε πίνακα Α. Στο τέλος του κώδικα να σχεδιάσετε τη μεταβολή της τιμής του ολοκληρώματος ως προς κ. Η γραφική παράσταση θα πρέπει να είναι πλήρης (βαθμονόμηση και μεγέθη αξόνων, χρώμα και σύμβολο γραμμής - με κώδικα). clear; clc; Απάντηση for x=0:10 fx(x+1) = (3 * x^2) - (2 * x * log(1 + x)); plot(0:10, fx, 'k-', 'Marker', 'o', 'MarkerFaceColor', [1 0.7 0.4],... 'MarkerSize', 5), grid on; xlabel('x', 'fontsize', 12, 'fontweight', 'b', 'color', 'k'); ylabel('f(x)', 'fontsize', 12, 'fontweight', 'b', 'color', 'k'); leg('f(x) = (3 * x^2) - (2 * x * log(1 + x))', 'Location', 'NorthWest'); axis([0, 10, 0, fx(length(fx))]); input('continue...'); integral = @(x) (3 * x.^2) - (2 * x.* log(1 + x)); for x=0:100 X(x+1) = x; A(x+1) = integral(x);
q = quad(integral,0,100); area(x, A, 'FaceColor', [1 0.7 0.4]), grid on; xlabel('k', 'fontsize', 12, 'fontweight', 'b', 'color', 'k'); ylabel('a', 'fontsize', 12, 'fontweight', 'b', 'color', 'k'); axis([0, 100, 0, A(length(A))]); leg(sprintf('integral: %e', q), 'Location', 'NorthWest'); ΘΕΜΑ 2 Σας δίνεται η συνάρτηση Να δημιουργήσετε το παρακάτω γράφημα με κώδικα
Απάντηση [X Y] = meshgrid(-1:0.01:1, -1:0.01:1); Z = sin(2*pi*x).*cos(2*pi*y)+1; surf(x,y,z); axis([-1 1-1 1 0 2]); set(gca,'gridlinestyle','--'); set(gca,'linewidth',1.3); set(gca,'fontname','helvetica'); set(gca,'fontsize',8); set(gca,'xcolor',[0.5 0.5 0.5]); set(gca,'ycolor',[0.5 0.5 0.5]); set(gca,'zcolor',[0.5 0.5 0.5]); set(gca,'view',[-37 50]); ΘΕΜΑ 3 Να περιγράψετε την εντολή από τον παρακάτω πίνακα που αντιστοιχεί στον αριθμό floor((o+e)/2), όπου: O : Ο αριθμός που αντιστοιχεί στο όνομά σας Ε: Ο αριθμός που αντιστοιχεί στο επίθετό σας Η περιγραφή σας θα πρέπει να περιλαμβάνει το τι κάνει η εντολή, τη σύνταξή της (ή περισσότερες αν υπάρχουν με τη σχετική περιγραφή των ορισμάτων) και 1-2 παραδείγματα.
Απάντηση Η εντολή meshgrid δέχεται ως ορίσματα διανύσματα και δημιουργεί από αυτά πίνακες, ώστε να μπορούν τα στοιχεία αυτά να χρησιμοποιηθούν σε συναρτήσεις δύο ή τριών μεταβλητών καθώς και σε τρισδιάστατες γραφικές παραστάσεις. Κάθε ένας από αυτούς τους πίνακες που δημιουργούνται είναι δισδιάστατος και περιέχει διπλές εγγραφές της εισόδου του, ώστε να ληφθούν υπόψη όλοι οι συνδυασμοί των εισόδων. Τρόποι σύνταξης: όπου τα στοιχεία που ορίζονται από τα διανύσματα x και y αποθηκεύονται σε πίνακες Χ και Υ, όπου οι γραμμές του πίνακα Χ είναι αντίγραφα του διανύσματος x και οι στήλες του πίνακα Υ είναι αντίγραφα του διανύσματος y. όπου τα στοιχεία που ορίζονται από το διάνυσμα x αποθηκεύονται σε πίνακες Χ και Υ, όπου οι γραμμές του πίνακα Χ είναι αντίγραφα του διανύσματος x και οι στήλες του πίνακα Υ είναι αντίγραφα του διανύσματος x. Ισοδυναμεί με την εντολή [X,Y] = meshgrid(x,x). όπου τα στοιχεία που ορίζονται από τα διανύσματα x, y και z αποθηκεύονται σε πίνακες Χ, Υ και Z. Περιορισμοί: Η εντολή meshgrid είναι κατάλληλη μόνο για προβλήματα δύο ή τριών διαστάσεων στο καρτεσιανό επίπεδο. Για τις περιπτώσεις πολυδιάστατων προβλημάτων, χρησιμοποιείται εναλλακτικά η εντολή ndgrid. Παραδείγματα: [X,Y] = meshgrid(x,y) [X,Y] = meshgrid(x) [X,Y,Ζ] = meshgrid(x,y,z) H εντολή [X,Y] = meshgrid(1:5,10:15) θα δημιουργήσει τους εξής
πίνακες: Χ = Y = 10 10 10 10 10 11 11 11 11 11 12 12 12 12 12 13 13 13 13 13 14 14 14 14 14 15 15 15 15 15 H εντολή [A,B] = meshgrid(1:4,5:6) θα δημιουργήσει τους εξής πίνακες: A = B = 1 2 3 4 1 2 3 4 5 5 5 5 6 6 6 6 ΘΕΜΑ 4 Να γράψετε κώδικα χρησιμοποιώντας εντολές ελέγχου ροής με βάση των οποίο α) Να δημιουργείτε πίνακα Α με τους βαθμούς σας σε 10 μαθήματα β) Να υπολογίζετε το μέσο όρο των βαθμών αφού πρώτα ελέγξετε ότι κάθε βαθμός είναι μεγαλύτερος από το 0 και μικρότερος από το 10 γ) Να εξάγετε έναν χαρακτηρισμό με βάση τον παρακάτω πίνακα δ) Να δίνετε έναν αριθμό μεταξύ 0 και 10 με χρήση της εντολής input και να υπολογίσετε από πόσους αριθμούς είναι μεγαλύτερος, από πόσους είναι μικρότερος και με πόσους είναι ίσος. clear; clc; Απάντηση lessons = 10;
sum = 0; for i=1:lessons A(i) = 1000; while (~(A(i) >=0 && A(i) <=10)) A(i) = input(sprintf('δώστε τον %dο βαθμό σας: ', i)); sum = sum + A(i); average = sum / lessons; if (average >= 8.5) msg = 'ΑΡΙΣΤΑ'; elseif (average >= 6.5) msg = 'ΠΟΛΥ ΚΑΛΑ'; elseif (average >= 5) msg = 'ΚΑΛΑ'; else msg = 'ΑΠΟΤΥΧΙΑ'; disp(sprintf('ο μέσος όρος σας είναι %3.1f (%s)', average, msg)); x = 1000; while (~(x >= 0 && x <=10)) x = input('δώστε έναν αριθμό (0-10) για σύγκριση: '); more = 0; less = 0; equal = 0; for i=1:lessons if (x > A(i)) more = more + 1; elseif (x < A(i)) less = less + 1; else equal = equal + 1; one = 'βαθμό'; notone = 'βαθμούς'; disp(sprintf('ο αριθμός %d είναι:', x)); str = notone; if (more == 1) str = one; disp(sprintf('μεγαλύτερος από %d %s σας', more, str)); str = notone; if (less == 1) str = one; disp(sprintf('μικρότερος από %d %s σας', less, str)); str = notone; if (equal == 1) str = one; disp(sprintf('ίσος με %d %s σας', equal, str));