Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

Indicizzazione

Pedici

L'elemento nella riga i e nella colonna j di A è denotato con A(i,j). Ad esempio, A(4,2) è il numero nella quarta riga, seconda colonna. Per il quadrato magico, A(4,2) è 15. Quindi, per calcolare la somma degli elementi nella quarta colonna di A, digitare

A(1,4) + A(2,4) + A(3,4) + A(4,4)

Questo pedice genera

ans =
     34

ma non si tratta del modo più elegante per calcolare la somma di una singola colonna.

È inoltre possibile fare riferimento agli elementi di una matrice con un unico pedice, A(k). Un singolo pedice rappresenta il metodo normalmente utilizzato per fare riferimento a vettori di riga e colonna. Può tuttavia essere applicato anche a una matrice totalmente bidimensionale; in questo caso l'array viene considerato come un lungo vettore di colonna formato dalle colonne della matrice originale. Per il quadrato magico, quindi, A(8) rappresenta un altro metodo per fare riferimento al valore 15 memorizzato in A(4,2).

Se si prova a utilizzare il valore di un elemento esterno alla matrice si genera un errore:

t = A(4,5)
L'indice supera le dimensioni della matrice.

Se invece si memorizza un valore in un elemento esterno alla matrice, le dimensioni vengono aumentate per adattarsi alla nuova immissione:

X = A;
X(4,5) = 17

X =
    16     3     2    13     0
     5    10    11     8     0
     9     6     7    12     0
     4    15    14     1    17

L'operatore 'due punti'

Il segno di due punti, :, rappresenta uno degli operatori più importanti di MATLAB®. Si presenta in molte forme diverse. L'espressione

1:10

è un vettore di riga contenente i numeri interi da 1 a 10:

1     2     3     4     5     6     7     8     9    10

Per ottenere una spaziatura non unitaria, specificare un incremento. Ad esempio,

100:-7:50

è

100    93    86    79    72    65    58    51

mentre

0:pi/4:pi

è

0    0.7854    1.5708    2.3562    3.1416

Le espressioni di subscripting relative ai due punti sono riferite a porzioni di una matrice:

A(1:k,j)

è il primok elemento della jesima colonna di A. Quindi

sum(A(1:4,4))

calcola la somma della quarta colonna. Esiste tuttavia un metodo migliore per eseguire questo calcolo. I due punti, da soli, si riferiscono a tutti gli elementi in una riga o colonna di una matrice, mentre la parola chiave end si riferisce all'ultima riga o colonna. Quindi

sum(A(:,end))

calcola la somma degli elementi nell'ultima colonna di A:

ans =
     34

Perché la somma magica per un quadrato 4x4 è uguale a 34? Se i numeri interi da 1 a 16 vengono suddivisi in quattro gruppi con somma uguale, tale somma deve essere

sum(1:16)/4

che, ovviamente, è

ans =
     34

Concatenazione

La concatenazione è il processo di congiunzione di piccole matrici per crearne di più grandi. In realtà si è creata la prima matrice quando se ne sono concatenati i singoli elementi. L'operatore per la concatenazione è la coppia di parentesi quadre []. Ad esempio, iniziare con il quadrato magico 4x4, A, e formare

B = [A  A+32; A+48  A+16]

Il risultato è una matrice 8x8 ottenuta congiungendo le quattro sottomatrici:

B =

    16     3     2    13    48    35    34    45
     5    10    11     8    37    42    43    40
     9     6     7    12    41    38    39    44
     4    15    14     1    36    47    46    33
    64    51    50    61    32    19    18    29
    53    58    59    56    21    26    27    24
    57    54    55    60    25    22    23    28
    52    63    62    49    20    31    30    17

La matrice sta per trasformarsi in un altro quadrato magico. I suoi elementi sono un riordinamento dei numeri interi 1:64. Le somme delle sue colonne presentano il valore corretto per formare un quadrato magico 8x8:

sum(B)

ans =
   260   260   260   260   260   260   260   260

Le somme delle righe, sum(B')', invece, non sono tutte uguali. È necessario intervenire ulteriormente per trasformarla in un quadrato magico 8x8 valido.

Eliminazione di righe e colonne

È possibile eliminare righe e colonne da una matrice utilizzando semplicemente una coppia di parentesi quadre. Iniziare con

X = A;

Poi, per eliminare la seconda colonna di X, utilizzare

X(:,2) = []

Questo cambia X in

X =
    16     2    13
     5    11     8 
     9     7    12
     4    14     1

Se si elimina un singolo elemento da una matrice, il risultato non è più una matrice. Espressioni come

X(1,2) = []

quindi, generano un errore. L'uso di un solo subscript, tuttavia, elimina un singolo elemento, o una sequenza di elementi, e rimodella gli elementi restanti in un vettore riga. Quindi

X(2:2:10) = []

genera

X =
    16     9     2     7    13    12     1

Espansione scalare

Matrici e scalari possono essere combinati in numerosi modi diversi. Ad esempio, uno scalare viene sottratto da una matrice sottraendolo da ciascun elemento. Il valore medio degli elementi nel nostro quadrato magico è 8,5, quindi

B = A - 8.5

forma una matrice le cui somme delle colonne è pari a zero:

B =
      7.5     -5.5     -6.5      4.5
     -3.5      1.5      2.5     -0.5
      0.5     -2.5     -1.5      3.5
     -4.5      6.5      5.5     -7.5

sum(B)

ans =
     0     0     0     0

Con l'espansione scalare, MATLAB assegna uno scalare specifico a tutti gli indici di un range. Ad esempio,

B(1:2,2:3) = 0

azzera una porzione di B:

B =
      7.5        0        0      4.5
     -3.5        0        0     -0.5
      0.5     -2.5     -1.5      3.5
     -4.5      6.5      5.5     -7.5

Subscripting logico

È possibile utilizzare i vettori logici creati da operazioni logiche e relazionali per fare riferimento agli array secondari. Si supponga che X sia una matrice ordinaria e che L sia una matrice delle stesse dimensioni risultante da un'operazione logica. X(L) quindi specifica gli elementi di X dove gli elementi di L sono non-zero.

Questo tipo di subscripting può essere effettuato in un unico passaggio specificando l'operazione logica come espressione di subscripting. Si supponga di disporre della seguente serie di dati:

x = [2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8];

NaN è un marcatore per un'osservazione mancante, come la mancata risposta a una voce di un questionario. Per eliminare i dati mancanti tramite indicizzazione logica, utilizzare isfinite(x), che è vero per tutti i valori numerici finiti e falso per NaN e Inf:

x = x(isfinite(x))
x =
  2.1 1.7 1.6 1.5 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8

Ora vi è un'osservazione, 5.1, che sembra essere molto diversa dalle altre. Si tratta di un outlier. La dichiarazione seguente elimina gli outlier, in questo caso quegli elementi con deviazione dalla media di oltre tre volte rispetto allo standard:

x = x(abs(x-mean(x)) <= 3*std(x))
x =
  2.1 1.7 1.6 1.5 1.9 1.8 1.5 1.8 1.4 2.2 1.6 1.8

Per un altro esempio, evidenziare la posizione dei numeri primi nel quadrato magico di Dürer utilizzando l'indicizzazione logica e l'espansione scalare per impostare i numeri non primi su 0 (vedere La funzione magic).

A(~isprime(A)) = 0

A =
     0     3     2    13
     5     0    11     0
     0     0     7     0
     0     0     0     0

La funzione find

La funzione find determina gli indici degli elementi dell'array che rispondono a una determinata condizione logica. Nella sua forma più semplice, find restituisce un vettore colonna di indici. Effettuare la trasposizione del vettore per ottenere un vettore riga di indici. Ad esempio, riprendere il quadrato magico di Dürer (vedere La funzione magic).

k = find(isprime(A))'

rileva la posizione dei numeri primi nel quadrante magico utilizzando l'indicizzazione unidimensionale:

k =
     2     5     9    10    11    13

Visualizza questi numeri primi sotto forma di vettore riga nell'ordine determinato da k, con

A(k)

ans =
     5     3     2    11     7    13

Quando si utilizza k come indice nel lato sinistro in una dichiarazione di assegnazione, la struttura della matrice viene conservata:

A(k) = NaN

A =
    16   NaN   NaN   NaN
   NaN    10   NaN     8
     9     6   NaN    12
     4    15    14     1