FREEMAT Πίνακες και array
Ορισμός και αρχικοποίηση Όπως έχουμε ήδη δει στο Freemat ακόμα και ένας αριθμός αποτελεί ένα μονοδιάστατο πίνακα [ ] (square brackets) χρησιμοποιείται για να αρχικοποιήσουμε ένα πίνακα ή ένα array. --> x=[4 5 2 1 6 0] x = 4 5 2 1 6 0 ένα άλλο παράδειγμα με 2 γραμμές είναι το παρακάτω. Χρησιμοποιούμε το σύμβολο (;) για το διαχωρισμό των γραμμών. --> x=[5 1 8 3 4 7 6;3 6 1 9 7 5 0] 5 1 8 3 4 7 6 3 6 1 9 7 5 0
Χρήση ( ) (parentheses) Χρησιμοποιούνται για να ορίσουμε ένα δείκτη του πίνακα --> x=[4 5 2 1 6 0] x = 4 5 2 1 6 0 --> x(2) ans = 5 Δεν μπορούμε να χρησιμοποιήσουμε ένα δείκτη απευθείας στον πίνακα: --> [7 1 8 5 2 3 9](3) Error: Unexpected input [7 1 8 5 2 3 9](3) ^
Ορισμός και αρχικοποίηση { } (curly braces) Τα άγκιστρα χρησιμοποιούνται για να αρχικοποιήσουμε ένα array,. Μπορούν να χρησιμοποιηθούν και στον δείκτη: --> y={'this is a test' [4 5 2 1 6 0] rand(4,4)} y = [this is a test] [1 6 double array] [4 4 double array] --> y{2} ans = 4 5 2 1 6 0 ; (semicolon) Μέσα σε κάθε array μπορούμε να ορίσουμε περισσότερες γραμμές --> y={'this is a test';[4 5 2 1 6 0];rand(4,4)} [this is a test] [1 6 double array] [4 4 double array]
Χρήση , (comma) ή κενό. Υπάρχουν 2 τρόποι για να ορίσουμε στήλες σε ένα array. Χωρίζοντας τα στοιχεία είτε με το κενό ή με κόμμα : (colon) Χρησιμοποιείται για να ορίσουμε ένα πεδίο τιμών --> x=1:50; --> y=cumsum(x); cumulative sum --> y(end) ans = 1275 Ή x=1:100; --> y=cumsum(x)(end) y = 5050 ή --> cumsum(1:100)(end)
Δημιουργώντας ένα ακολουθιακό array t=1:10; t=1:3:10; (1 εώς 10 με βήμα 3) Προσοχή στην εντολή linspace --> t=linspace(1,10,7) t = 1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000 Τι ακριβώς κάνει;
Τυχαία array rand – δημιουργεί ένα τυχαίο αριθμό στο διάστημα 0 - 1. randbeta(alpha,beta) – δημιουργεί τυχαία μεταβλητή με με beta κατανομή. randi(low,high) – δημιουργεί ένα array τυχαίων ακεραίων μεταξύ των τιμών low και high randn – δημιουργεί ένα array τυχαίων αριθμών με την κατανομή Gauss --> x=rand(10000); --> size(x) ans = 10000 10000 ποια η διαφορά; --> x=rand(1,10000); 1 10000
Εντολή Hist --> x=rand(1,10000); --> y=hist(x) y = 1042 1020 1019 1001 977 1022 914 1005 1041 957 --> y=hist(x,10,1) 0.1042 0.1020 0.1019 0.1001 0.0977 0.1022 0.0914 0.1005 0.1041 0.0957 --> plot(y) --> ylim([0,0.2])
Οπτικοποίηση τιμών ενός πίνακα Για να δούμε τις τιμές κάθε στοιχείου ενός πινακα χρησιμοποιούμε την μορφή: x(d1,d2,...,dn) όπου x = το όνομα της μεταβλητής d1 = η πρώτη διάσταση d2 = η δεύτερη διάσταση dn = η ν-οστή διάσταση x=rand(3,3) x = 0.4421 0.9413 0.5842 0.3209 0.1061 0.7719 0.2505 0.3724 0.7086 x(1,2) ans = 0.9413 x(2,1) 0.3209
Οπτικοποίηση τιμών ενός πίνακα Για να δούμε όλες τις τιμές ενός πίνακα χρησιμοποιούμε την εντολή x(:,:) x=rand(3,3) x = 0.4421 0.9413 0.5842 0.3209 0.1061 0.7719 0.2505 0.3724 0.7086 x(:,1) ans = 0.4421 0.3209 0.2505 x(1,:)
Συνάρτηση plot Plot(x) : Κατακόρυφος άξονας οι τιμές του x και οριζόντιος άξονας αυθαίρετος Plot(x,y) : Κατακόρυφος άξονας οι τιμές του y και οριζόντιος άξονας οι τιμές του x
Άσκηση Δημιουργήστε τον πίνακα Pin = [2 3 1;4 5 8;7 8 9;12 14 8] Σχολιάστε τα αποτελέσματα των παρακάτω εντολών Pinsize=size(Pin) exp(20), cos(pi/3), tan(pi), atan(pi), sqrt(256) Apot = [ 2 2 3 3] +[1 1 2 2] + [10 10 11 11]+ [cos(0.3*pi) sin(pi/4) tan(pi/2) sqrt(9)]
Άθροισμα πινάκων x=rand(2,2) x = 0.3759 0.9134 0.0183 0.3580 y=rand(2,2) y = 0.7604 0.0990 0.8077 0.4972 x+y ans = 1.1363 1.0124 0.8260 0.8552
Άσκηση: πολλαπλασιασμός και διαίρεση πινάκων --> x=rand(3,5); --> y=rand(5,6); --> z=x*y; --> who Variable Name Type Flags Size x double [3 5] y double [5 6] z double [3 6] --> y ans = 0.9132 0.0756 0.6215 0.0204 0.3774 0.4662 0.2899 0.4398 0.1450 --> y/5 0.1826 0.0151 0.1243 0.0041 0.0755 0.0932 0.0580 0.0880 0.0290
Άσκηση: πολλαπλασιασμός πίνακα χ με τον αντίστροφο ενός πίνακα υ --> x=rand(3,3) x = 0.0603 0.4750 0.1794 0.5541 0.6298 0.6902 0.9326 0.4791 0.8172 --> y=rand(3,3) y = 0.3334 0.7200 0.3153 0.5322 0.0361 0.1913 0.2064 0.1283 0.9270 --> x/y ans = 0.6701 -0.3186 0.0313 0.7843 0.3961 0.3961 0.5233 1.2519 0.4452