Εργαστήρια Αριθμητικής Ανάλυσης Ι 7 ο Εργαστήριο Διανύσματα-Πίνακες 2 ο Μέρος 2017
Εντολή size Σε προηγούμενο εργαστήριο είχαμε κάνει αναφορά στην συνάρτηση length, και την χρησιμότητα της όταν δουλεύουμε με διανύσματα. Μια αντίστοιχη εντολή, η οποία μας δίνει το μέγεθος ενός δισδιάστατου πίνακα είναι η size. Η κλήση της γίνεται ως εξής. Αν Α ένας πίνακας mxn στοιχείων τότε αν γράψουμε την ακόλουθή γραμμή στο Matlab [m,n]= size(a) Τότε το m θα πάρει σαν τιμή το πλήθος των γραμμών του Α και το n το πλήθος των στηλών του. Εναλλακτικός τρόπος κλήσης είναι ο «2 γραμμών» κώδικας m = size(a,1) n = size(a,2) Η πρώτη όπως επιστρέφει το πλήθος των γραμμών και η δεύτερη των στηλών. Χρήση του τελεστή : Έχουμε πει πολλές φορές ως τώρα ότι η Matlab αποτελεί ένα πολύ χρήσιμο εργαλείο για έναν μαθηματικό. Ειδικά αν θέλει να δουλέψει με πίνακες. Πολλές φορές όταν πρέπει να επεξεργαστούμε πίνακες θα πρέπει να επικεντρωθούμε μόνο σε ένα μέρος τους και όχι στο σύνολο των στοιχείων. Στο πακέτο της Matlab το να δημιουργήσεις και να διαχειριστείς υποπίνακες γίνεται πανεύκολα με την χρήστη του τελεστή : Έστω ότι έχουμε τον πίνακα Α που είναι 10χ10, αλλά εμείς θέλουμε να δουλέψουμε μόνο στο κομμάτι που αντιστοιχεί στις 3 πρώτες γραμμές και τις 4 πρώτες του στήλες. Αν ονομάσουμε αυτό τον υποπίνακα B, μπορούμε με τον ακόλουθο τρόπο να τον εισάγουμε σαν τιμή σε μια μεταβλητή. Αρκεί προφανώς ο Α να είναι ήδη ορισμένος πιο πριν στο πρόγραμμά μας B = A(1:3,1:4) Αφού εκτελεστεί αυτή η γραμμή κώδικα θα δημιουργηθεί ένας 3χ4 πίνακας που θα έχει τα ζητούμενα στοιχεία από τον πίνακα Α.
Παράδειγμα 1: Να φτιάξετε έναν τυχαίο πίνακα 7χ7 που θα παίρνει τιμές από το σύνολο {1,2,3,4,5,6,7,8,9,10} και στην συνέχεια να φτιάξετε τον 3χ3 πίνακα Β που προκύπτει από τον αντίστοιχο υποπίνακα του Α που δημιουργείτε από τις 3,4 και 5 γραμμές και στήλες του. A = ceil(10*rand(7)) B = A([3 4 5],3:5) Όπως μπορούμε να φτιάξουμε έναν υποπίνακα από κάποιον άλλον, αντίστροφα μπορούμε να φτιάξουμε και έναν πίνακα που θα αποτελείτε από άλλους αρχικούς πίνακες. Αρκεί όμως οι διαστάσεις τους να ταιριάζουν. Παράδειγμα 2: Έστω ότι έχω τους 4 πίνακες A,B,C και D που δημιουργούνται από τος παρακάτω γραμμές κώδικα: A = ceil(10*rand(2)) B = ceil(10*rand(3)) C = ceil(10*rand(2,3)) D = ceil(10*rand(3,2)) Σε αυτή την περίπτωση μπορούμε να κατασκευάσουμε τον πίνακα Αλλά όχι τον πίνακα EE = AA BB FF = AA CC CC DD BB DD Εναλλαγή τιμών σε πίνακα Στην Αριθμητική Ανάλυση θα χρειαστεί να αλλάξουμε θέση σε κάποια μεμονωμένα στοιχεία ενός πίνακα είτε ακόμα και σε ολόκληρες γραμμές ή στήλες. Στα παραδείγματα θα δούμε πως γίνεται αυτό εύκολα και γρήγορα για διάφορες περιπτώσεις που μπορεί να μας απασχολήσουν.
Παράδειγμα 1: Έστω ότι έχουμε το διάνυσμα vv = [1 2 3 4 5] και θέλουμε τα στοιχεία στις θέσεις 2 και 4 να ανταλλάξουν τιμές v = [1 2 3 4 5] v([2,4])= v([4,2]) 1 2 3 Παράδειγμα 2: Έστω ότι έχουμε τον πίνακα ΑΑ = 4 5 6 και θέλουμε να 7 8 9 αλλάξουν θέσεις οι γραμμές 1 και 3 A = [1 2 3;4 5 6;7 8 9] A([1,3],:)= A([3,1],:) Οι συναρτήσεις max & min Στα παραδείγματα που θα ακολουθήσουν, θα δούμε μόνο την min αλλά ακριβώς τα ίδια ισχύουν και για την max Παράδειγμα 1: Έστω ότι έχουμε ένα τυχαίο διάνυσμα γραμμή v μήκους 10. Η τιμή που έχει το μικρότερο στοιχείο βρίσκεται πολύ εύκολα όπως μπορούμε να δούμε στο παρακάτω πρόγραμμα v = rand(1,10); m = min(v); fprintf(' H μικρότερη τιμή είναι %f \n ',m) Παράδειγμα 2: Έστω ο 4χ3 πίνακας Α που έχει τυχαίες τιμές. Αν ψάχνουμε τα ελάχιστα στοιχεία κάθε στήλης γράφω m = min(a) Αν ψάχνω το ελάχιστο στοιχείο του πίνακα minimum = min(min(a)) Αν θέλω να ξέρω το ελάχιστο στοιχείο κάθε στήλης και σε ποια γραμμή το βρήκα [m,r] = min(a) Αν θέλω να ξέρω ποιο είναι το ελάχιστο στοιχείο και σε ποια θέση βρίσκεται στον πίνακα τότε θα χρειαστώ παραπάνω από μια γραμμές και κλήσεις της συνάρτησης min
[m,r]=min(a); [m,c]=min(m); fprintf('h ελάχιστη τιμή του πίνακα είναι %f και βρίσκεται',m) fprintf(' στην γραμμή %d και στην στήλη %d \n',r(c),c) Ασκήσεις για εξάσκηση 1. Να γραφεί ο κώδικας Matlab που θα δημιουργεί πίνακα που θα περιέχει μόνο τα στοιχεία του πίνακα Α που βρίσκονται στις άρτιες γραμμές και στήλες του 2. Να γραφεί συνάρτηση που θα δέχεται πίνακα Α και θα επιστρέφει διάνυσμα με το άθροισμα των στοιχείων κάθε στήλης του 3. Να γραφεί συνάρτηση που θα μας επιστρέφει το μέγιστο ενός πίνακα και όλες τις θέσεις στις οποίες βρίσκεται αυτό