Εισαγωγή στο MATLAB Βασικές λειτουργίες

Πίνακες και Διανύσματα

Στο περιβάλλον του MATLAB οι πίνακες είναι ορθογώνια διατεταγμένοι αριθμοί. Για παράδειγμα ο πίνακας:

Eq.8

ορίζεται στο MATLAB ως εξής:

>> A=[sqrt(2), pi, 1/2; exp(1), sin(pi/2), sqrt(-1)]
ans =
    1.4142 3.1416 0.5000
    2.7183 1.0000 0 +1.0000i

Το μέγεθος ενός πίνακα ορίζεται με βάση τις γραμμές και τις στήλες που έχει. Κατ' επέκταση ένα βαθμωτό είναι ένας πίνακας 1x1 ενώ ένα διάνυσμα είναι ένας πίνακας γραμμή ή ένας πίνακας στήλη. Στο παραπάνω παράδειγμα, το μέγεθος του πίνακα είναι 2 x 3.
Τα στοιχεία σε μία γραμμή χωρίζονται με κόμμα ή κενό ενώ η αλλαγή γραμμής γίνεται με το σύμβολο “;”. Για παράδειγμα στην μεταβλητή Α αποθηκεύουμε το παρακάτω 3x3 πίνακα.

>> A=[1 2 3;4 5 6;7 8 9]
A =
    1 2 3
    4 5 6
    7 8 9

Χρησιμοποιώντας το σύμβολο " ' " παίρνουμε τον ανάστροφο πίνακα:

>> B=A'
B =
    1 4 7
    2 5 8
    3 6 9

Για να αναφερθούμε σε μία συγκεκριμένη στήλη, γραμμή ή στοιχείο δίνουμε:

>> A(:,2)
ans=
    2
    5
    8
>> A(2,3)
ans=
    6
>> A(3,:)
ans=
    7 8 9

όπου εδώ το σύμβολο “ : ” σημαίνει “κάθε στοιχείο”. Ο τελεστής “ : ” συναντάται στους πίνακες και στα διανύσματα και στις εξής περιπτώσεις:

  • δημιουργία διανύσματος ξεκινώντας από start καταλήγοντας σε finish με βήμα step :
  • >> start=0;
    >> step=2;
    >> finish=18;
    >> v=start:step:finish;
    v =
      0 2 4 6 8 10 12 14 16 18
  • αναφορά σε μέρος του πίνακα:
  • >> A=(1,2:3)
    ans =
      2 3
    δηλαδή το δεύτερο έως το τρίτο στοιχείο της πρώτης γραμμής.

Στο MATLAB, διάνυσμα είναι απλά μια λίστα με αριθμούς, πραγματικούς ή μιγαδικούς, διατεταγμένοι σε μια γραμμή:

>> v=[1,2,3]
v =
    1 2 3

ή σε στήλη:

>> w=[1; pi; 3-2i]
ans =
    1.0000
    3.1416
    3.0000 - 2.0000i

Είναι δυνατό να μετατρέψουμε ένα διάνυσμα γραμμή σε διάνυσμα στήλη και το αντίστροφο, με τον τελεστή “ .' “ :

>> v.'
v =
    1
    2
    3

Τέλος, με τον τελεστή “ ' “, εκτός από την μετατροπή ενός διανύσματος γραμμής σε διάνυσμα στήλης (και αντίστροφα), στην περίπτωση που τα στοιχεία του διανύσματος είναι μιγαδικοί αριθμοί, το MATLAB τους αντικαθιστά με τους συζυγείς τους:

>> w'
ans =
    1.0000 3.1416 3.0000 +2.0000i

Δύο πολύ χρήσιμες συναρτήσεις είναι οι size και length οι οποίες επιστρέφουν το μέγεθος του πίνακα και το μήκος ενός διανύσματος αντίστοιχα:

>> A=[1 2 3;4 5 6]
A =
    1 2 3
    4 5 6
>> [m,n]=size(A)
m =
    2
n =
    3
>> v=[1 2 3 4 5]
v =
    1 2 3 4 5
>> l=length(v)
l =
    5

Το MATLAB παρέχει συναρτήσεις που δημιουργούν κάποιους βασικούς πίνακες όπου τα ορίσματά τους δηλώνουν το μέγεθος του πίνακα:

  • zeros: Όλα τα στοιχεία μηδέν
  • >> A=zeros(2,4)
    A =
      0 0 0 0 0
      0 0 0 0 0
  • ones: Όλα τα στοιχεία μονάδα
  • >> B=ones(4,3)
    B =
      1 1 1
      1 1 1
      1 1 1
      1 1 1
  • rand: Στοιχεία από ομογενή κατανομή
  • >> C=rand(1,7)
    C =
      0.8147 0.9058 0.1270 0.9134 0.6324 0.0975 0.2785
  • randn: Στοιχεία από κανονική κατανομή
  • >> D=randn(4,4)
    D =
      0.3426 3.0349 -0.2050 1.4172
      3.5784 0.7254 -0.1241 0.6715
      2.7694 -0.0631 1.4897 -1.2075
      -1.3499 0.7147 1.4090 0.7172
  • eye: μοναδιαίος πίνακας
  • >> I=eye(3)
    I =
      1 0 0
      0 1 0
      0 0 1

Στη συνέχεια, θα ορίσουμε μερικές χρήσιμες έννοιες για τον χειρισμό διανυσμάτων στο MATALB:

  • Ορισμός 1
    Έστω a ένας πραγματικός ή μιγαδικός αριθμός και έστω v και w διανύσματα με ίσο μήκος που περιέχουν είτε πραγματικούς είτε μιγαδικούς αριθμούς. Ορίζουμε:
    1. Το γινόμενο av σχηματίζεται πολλαπλασιάζοντας κάθε στοιχείο του v με a.
    2. Το άθροισμα v+w σχηματίζεται προσθέτοντας τα αντίστοιχα στοιχεία του κάθε διανύσματος.
    Για παράδειγμα:
    >> alpha=5; v[1,2,3];
    >> alpha*v
    ans =
      5 10 15
    >> v=[1,2,3];w=[4,5,6];
    >> v+w
    ans =
      5 7 9

    Αντίστοιχα, μπορεί κανείς να υπολογίσει τη διαφορά δύο διανυσμάτων, ως: v - w = v + (-w)

  • Ορισμός 2

    Έστω v1,v2,...,vp διανύσματα του ίδιου μήκους με στοιχεία πραγματικούς ή μιγαδικούς αριθμούς και α12,...,αp βαθμωτά μεγέθη (αριθμοί), είτε πραγματικοί είτε μιγαδικοί. Η παράσταση:

    Eq.9

    ονομάζεται γραμμικός συνδυασμός των διανυσμάτων v1,v2,...,vp

    Παράδειγμα:
    Έστω τα διανύσματα:
    Eq.10
    Για να υπολογίσουμε το γραμμικό συνδυασμό 2v1+3v2-4v3:
    Eq.11

    στο MATLAB, θα ακολουθήσουμε την εξής διαδικασία:

    >> v1=[-9 ; 4 ; -17];v2=[5 ; 2; exp(-pi)];v3=[sin(45); sqrt(2);5];
    >> 2*v1+3*v2-4*v3
    ans =
      -6.4036
      8.3431
      -53.8704
  • Ορισμός 3
    Έστω a1,a2,...,an οι στήλες ενός πίνακα A δηλαδή A = [ a1,a2,...,an ] ) και x ένα διάνυσμα στήλη με μήκος ίσο με τον αριθμό των στηλών του πίνακα A. Το γινόμενο πίνακα-διανύσματος, Ax ορίζεται ως:
    Eq.12
    Αν το μήκος του διανύσματος x διαφέρει από τον αριθμό των στηλών του πίνακα A, τότε το γινόμενο Ax δεν ορίζεται.
    Παράδειγμα:
    Ας θεωρήσουμε τον πίνακα Α και το διάνυσμα v:
    Eq.13
    υπολογίζεται στο MATLAB ως εξής:
    >> Α = [4,1,9;8,-6,1;0,3,2];v=[-9;2;7];
    >> A*v
    ans =
      29
      -77
      20
  • Ορισμός 4
    Έστω οι πίνακες Α και Β. Αν ο αριθμός των στηλών του πίνακα Α είναι ίσος με τον αριθμό των γραμμών του πίνακα Β και b1,b2,...,bn είναι οι στήλες του πίνακα Β, τότε το γινόμενο Α*Β ορίζεται ώς:
    AB = A[b1, b2,...bn] = [Ab1, Ab2,...Abn]
    Παράδειγμα:
    Ας θεωρήσουμε τους πίνακες:
    Eq.14
    Το γινόμενο Α1*Α2 υπολογίζεται στο MATLAB ως εξής:
    >> A1=[6,-4,0;1,3,-2;0,1,0];A2=[2,4,6,8;1,3,5,7;0,5,0,1];
    >> A1*A2
    ans =
      8 12 16 20
      5 3 21 27
      1 3 5 7
    Στην περίπτωση που ο αριθμός των στηλών του Α δεν ισούται με τον αριθμό των γραμμών του Β, τότε η πράξη Α*Β δεν ορίζεται. Για παράδειγμα, για τους πίνακες:
    Eq.15
    πράξη Α*Β στο MATLAB θα επιστρέψει μήνυμα λάθους:
    >> A=[2,4;6,8]; B=[1,3;5,7;9,0];
    >> A*B
    ??? Error using ==> mtimes
    Inner matrix dimensions must agree.
    ενώ η πράξη Β*Α είναι επιτρεπτή και θα δώσει το αναμενόμενο αποτέλεσμα:
    >> A=[2,4;6,8]; B=[1,3;5,7;9,0];
    >> Β*Α
    ans =
      20 28
      52 76
      18 26

Υπάρχουν περιπτώσεις, που θέλουμε να επέμβουμε πάνω στα στοιχεία ενός πίνακα ή ενός διανύσματος. Για παράδειγμα, μπορεί να θέλουμε να πολλαπλασιάσουμε στοιχείο προς στοιχείο, τα στοιχεία δύο διανυσμάτων. Προκειμένου να κάνουμε αυτήν την πράξη, χρησιμοποιούμε το τελεστή “ .* “:

>> v1 = [1,2,3,4], v2 = [5,6,7,8], v=v1.*v2
v1 =
    1 2 3 4
v2 =
    5 6 7 8
v3 =
    5 12 21 32
Το παραπάνω αποτέλεσμα φυσικά διαφέρει από την πράξη v1*v2 η οποία γίνεται ανάμεσα στα διανύσματα και όχι ανάμεσα στα στοιχεία των διανυσμάτων 1-1:
>> v1 = [1,2,3,4], v2 = [5,6,7,8], v=v1*v2
v1 =
    1 2 3 4
v2 =
    5 6 7 8
??? Error using ==> mtimes
Inner matrix dimensions must agree.

Αντίστοιχα, σε έχουμε ένα πίνακα Α οι πράξεις A^2 και A.^2 είναι διαφορετικές με την πρώτη να αφορά την ύψωση του πίνακα A στο τετράγωνο (Α*Α), ενώ η δεύτερη να αφορά μας δίνει το τετράγωνο των στοιχείων του πίνακα:

>> A=[4,1,9;8,-6,1;0,3,2];
>> A^2
ans =
    24 25 55
    -16 47 68
    24 -12 7
>> A.^2
ans =
    16 1 81
    64 36 1
    0 9 4

Τέλος, οι εσωτερικές συναρτήσεις του MATLAB όταν εφαρμοστούν πάνω σε ένα πίνακα, μας δίνουν σαν αποτέλεσμα ένα νέο πίνακα τα στοιχεία του οποίου έχουν προκύψει από την εφαρμογή της συνάρτησης πάνω σε καθένα από τα στοιχεία του αρχικού πίνακα:

>> A=[4,1,9;8,-6,1;0,3,2];
>> tan(A)
ans =
    1.1578 1.5574 -0.4523
    -6.7997 0.2910 1.5574
    0 -0.1425 -2.1850