Variabili in MATLAB

Nella precedente lezione abbiamo visto come MATLAB possa essere utilizzato come una calcolatrice molto avanzata. Vi ho mostrato come inserire espressioni matematiche più o meno complicate e come ottenerne il risultato numerico.

In questa lezione introdurrò il concetto di variabile in MATLAB e come si utilizza la finestra del workspace.

Nel capitolo precedente abbiamo visto le espressioni matematiche e come risolverle in MATLAB. Nella pratica, tuttavia, quasi raramente i problemi possono essere risolti con un'unica espressione. Anzi, i problemi più complessi sono composti da numerose istruzioni e espressioni più o meno complicate. Per questo motivo nasce la necessità di memorizzare i risultati parziali, ossia i risultati intermedi di una sequenza di istruzioni. A questo scopo, tutti i linguaggi di programmazione mettono a disposizione il concetto di variabile.

Operatore di assegnamento

In MATLAB, così come in qualunque linguaggio o sistema di programmazione, una variabile può essere vista come una locazione di memoria in cui è immagazzinato un valore. Questo valore può essere richiamato utilizzando il nome della variabile stessa. In questo modo è possibile modificarlo ed utilizzarlo in espressioni matematiche. Il nome della variabile può essere visto come un'etichetta della reale locazione di memoria del computer in cui il valore è memorizzato.

Per creare una variabile in MATLAB è necessario utilizzare l'istruzione di assegnamento, strutturata in questo modo:

nome_variabile = espressione

Il nome della variabile si trova sempre alla sinistra del segno di uguale, =, che rappresenta l'operatore di assegnamento. Da notare che, a differenza della notazione matematica che usiamo comunemente, il segno di uguale non rappresenta un'uguaglianza matematica, ma indica a MATLAB di memorizzare il risultato di espressione nella locazione di memoria indicata da nome_variabile.

Ad esempio, se vogliamo memorizzare il risultato dell'espressione \sqrt{16} nella variabile mio_numero è sufficiente scrivere nel prompt dei comandi:

>> mio_numero = sqrt(16)

Premendo il tasto invio, MATLAB risponderà con:

mio_numero =

     4

in questo modo, MATLAB indica all'utente che ha recepito il comando e ha memorizzato il valore 4 in mio_numero.

Una comodità di MATLAB sta nel fatto che, a differenza di altri linguaggi di programmazione, non è necessario creare a priori la variabile mio_numero. Basta semplicemente l'istruzione di assegnamento che, a seconda dei casi, si comporta in questo modo:

  • Se la variabile mio_numero non esiste, provvede a crearla (in gergo tecnico si dice allocarla) e ad assegnargli il valore 4;
  • Viceversa, se la variabile mio_numero esiste già, provvede a sostituire il precedente valore con il nuovo 4.

Il secondo punto è molto importante. Infatti, una volta che abbiamo assegnato un valore ad una variabile è comunque possibile modificarlo in un secondo momento. Ad esempio, se creiamo dapprima la variabile:

>> x = 1

x =

     1

possiamo poi modificarne il valore, ad esempio, richiamando la variabile stessa:

>> x = x + 2

x =

     3

Quest'ultimo esempio, a prima vista strano, indica a MATLAB di prendere il valore corrente di x (che è 1), sommarlo a 3 e memorizzare il risultato di nuovo in x. Da notare come la notazione sia diversa da quella standard matematica, in quanto il simbolo = non sta per uguaglianza (e non avrebbe senso dal punto di vista matematico) ma sta per assegnamento.

Ovviamente, se vogliamo utilizzare la nostra variabile in un'altra espressione è necessario dapprima crearla con un'assegnazione. In caso contrario incapperemmo nel seguente errore:

>> z
Undefined function or variable 'z'.

Una cosa fondamentale, da tenere a mente quando si lavora con le variabili, è che il nome della variabile deve essere sempre situato alla sinistra dell'operatore di assegnamento. Un'istruzione del genere, infatti, genererebbe un errore:

>> 4 = mio_numero
 4 = mio_numero

Error: Incorrect use of '=' operator. To assign a value to a variable, use
'='. To compare values for equality, use '=='.

Nomi delle variabili

I nomi che possiamo dare alle nostre variabili sono esempi di identificatori. Esistono vari esempi di identificatori in MATLAB, come i nomi di funzioni, che vedremo nelle prossime lezioni.

In ogni caso, un identificatore e, quindi, anche il nome di una variabile deve rispettare alcune regole:

  1. Un identificatore valido può contenere soltanto lettere maiuscole o minuscole (A-Z o a-z), numeri o il carattere underscore _.
    • Esempi di identificatori validi sono:
      • mio_numero
      • radice_1
      • v33
    • Esempi di identificatori non validi sono:
      • ^nonvalido?
      • variabile-mia
  2. Un identificatore deve iniziare sempre con una lettera. Per cui, un identificatore di questo tipo non è valido: 1_variabile. Questo identificatore invece è permesso: variabile_1.
  3. Gli identificatori sono Case-Sensitive. In altre parole, lettere maiuscole e minuscole sono trattate come lettere diverse da MATLAB. Per questo motivo il nome mio_numero è diverso da MIO_NUMERO che a sua volta è diverso da Mio_Numero e così via. In generale, tuttavia, dato che una scelta di nomi di questo tipo potrebbe creare confusione, è meglio evitare di riutilizzare lo stesso nome cambiando solo il fatto che le lettere siano maiuscole o minuscole.
  4. Alcuni nomi sono vietati come identificatori, in quanto rappresentano parole riservate (in gergo reserved keywords). Vedremo più avanti quali sono. Alcuni esempi sono: if, for, while.
  5. In generale, è possibile utilizzare come identificatore il nome di funzioni built-in di MATLAB ma è fortemente sconsigliato. Ad esempio, si può usare il nome sqrt come identificatore di una variabile; tuttavia, così facendo, si modifica il comportamento di MATLAB e, quando si prova ad invocare la funzione sqrt, non verrà richiamata la funzione predefinita per la radice quadrata, bensì la nostra variabile. In questo modo si può incappare in bug difficili da scovare.

Variabile ans

Nella lezione precedente abbiamo visto che MATLAB può essere utilizzato come una calcolatrice avanzata: inseriamo espressioni matematiche ed otteniamo un risultato. Oltre a mostrare il risultato, MATLAB utilizza una variabile di default che si chiama ans a cui assegna il risultato dell'espressione appena inserita. Ad esempio, dopo aver inserito il seguente comando:

>> 3 + 4

ans =

     7

MATLAB non solo mostra il risultato, che è 7, ma assegna quest'ultimo alla variabile ans. Successivamente, è possibile richiamarla in altre espressioni, ad esempio:

>> ans * 5

ans =

    35

In questo esempio, abbiamo moltiplicato ans per 5. MATLAB esegue il comando, mostra il risultato e modifica ans assegnandogli il nuovo risultato 35.

Nel caso in cui, invece, utilizziamo l'operatore di assegnamento la variabile ans non viene utilizzata. Ad esempio:

>> x = 5 + 6

x =

    11

>> ans

ans =

    35

In questo caso MATLAB ha assegnato il risultato di 5 + 6 alla variabile x ma ans è rimasta immutata ed ha conservato il risultato precedente.

Quindi, ogni volta che introduciamo un'espressione e non assegnamo il risultato ad una variabile, MATLAB riutilizza la variabile ans. Per questo motivo, è buona prassi non nominare mai nessuna delle nostre variabili ans.

Variabili speciali

MATLAB fornisce delle variabili predefinite che hanno significato e valori speciali. Una delle più importanti è sicuramente pi che fornisce il valore numerico di \pi greco:

>> pi

ans =

    3.1416

Possiamo richiamare pi ogni volta che vogliamo nelle nostre espressioni quando necessario. Essendo pi una variabile è possibile anche ridefinirla anche se questa non è una buona idea perché potrebbe impattare sui nostri calcoli. Ad esempio, se volessimo calcolare l'area di un cerchio di raggio 2 potremmo scrivere:

>> r = 2

r =

     2

>> pi * r ^ 2

ans =

   12.5664

Ma se dovessimo ridefinire pi i risultati potrebbero essere inaspettati:

>> pi = 90

pi =

    90

>> pi * r ^ 2

ans =

   360

Quindi non è una buona idea ridefinire queste variabili speciali. Ne esistono molte e le introdurrò mano a mano a seconda della necessità.

Workspace

Un importante concetto associato a quello di variabile è il Workspace. Nella pratica si tratta dell'insieme delle variabili che abbiamo definito durante una sessione di lavoro MATLAB. Queste variabili sono mostrate nell'apposita finestra del workspace sulla destra con associato il valore ed il tipo che vedremo nella prossima lezione.

Finestra del Workspace
Figura 1: Finestra del Workspace

Nella finestra del workspace è possibile effettuare una serie di operazioni in maniera grafica come, ad esempio, rinominare le variabili, modificarne il valore ed anche cancellarle.

Ogni volta che chiudiamo MATLAB il contenuto del workspace viene perduto in quanto è memorizzato nella RAM del nostro computer, per cui ogni nuova sessione parte da una situazione di workspace vuoto. Ogni variabile creata e modificata durante una sessione viene perduta alla chiusura di quest'ultima. Tuttavia, è possibile salvare il contenuto del workspace per poi ricaricarlo e riprendere il lavoro da dove si era interrotto. Per farlo basta inserire il comando:

>> save('nome_file.mat')

Al posto di nome_file è possibile inserire un qualunque nome. Con questo comando, MATLAB salva il contenuto del workspace in un file .mat. Successivamente è possibile ricaricarne il contenuto attraverso il comando:

>> load('nome_file.mat')

Dopo aver eseguito il comando di load è possibile osservare nella finestra del workspace tutte le variabili precedentemente create.

Il comando di save può essere eseguito cliccando con il tasto destro del mouse sulla finestra del workspace:

Menu della finestra del Workspace
Figura 2: Menu della finestra del Workspace

Dal menu è possibile anche ripulire l'intero workspace oppure riordinare le variabili per nome e così via.

Comandi del workspace

Dal prompt dei comandi è possibile utilizzare una serie di istruzioni per ispezionare il contenuto del workspace. il più semplice è who che mostra la lista di variabili definite nel workspace:

>> a = 1

a =

     1

>> b = 2

b =

     2

>> c = 3

c =

     3

>> who

Your variables are:

a  b  c  

In questo esempio possiamo vedere che nel workspace sono state definite tre variabili: a, b e c.

Associato al comando who esiste il comando whos che si comporta come il precedente ma restituisce un numero maggiore di informazioni:

>> whos
  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  b         1x1                 8  double              
  c         1x1                 8  double  

whos mostra, oltre al nome delle variabili, la loro dimensione e il numero di byte occupati più il tipo e gli attributi. Su queste informazioni, però, tornerò nelle lezioni successive.

Oltre ai comandi who e whos che indicano il contenuto del workspace, esiste anche il comando clearvars che permette di cancellare tutte le variabili o una parte:

>> clearvars

In questo modo tutto il workspace viene ripulito. Se invece si inserisce il comando:

>> clearvars a

soltanto la variabile a viene cancellata. Si può anche specificare una lista di variabili da cancellare:

>> clearvars a b c

In questo modo si cancellano le variabili a, b e c.

clearvars viene utilizzato per cancellare variabili dal workspace. Esistono anche altri oggetti che il workspace memorizza (lo vedremo nelle prossime lezioni). Per poter cancellare tutto e non solo le variabili, basta inserire il comando:

>> clear

Esercizi

Per testare la comprensione dell'utilizzo delle variabili, provate a risolvere i seguenti esercizi (le soluzioni sono riportate a seguire).

Esercizio 1

Supponendo di avere x = 11 e y = 23 calcolate le seguenti espressioni:

\frac{y ^ 3 \cdot x}{x - y}
\frac{3 \cdot x}{4 \cdot y}
\frac{x ^ 6}{y^3 - 1}

Esercizio 2

Supponendo di avere w = 7 e z = 9 calcolate le seguenti espressioni:

\left( 1 - \frac{1}{w ^ 3} \right)^{-1}
\frac{4 \cdot z}{5 \cdot w - 7}
\frac{3 \cdot \pi}{w ^ 2}

Soluzioni

Di seguito le soluzioni agli esercizi:

Esercizio 1.1

>> x = 11

x =

    11

>> y = 23

y =

    23

>> (x * y ^ 3) / (x - y)

ans =

  -1.1153e+04

Esercizio 1.2

>> 3 * x / (4 * y)

ans =

    0.3587

Esercizio 1.3

>> x ^ 6 / (y ^ 3 - 1)

ans =

  145.6157

Esercizio 2.1

>> w = 7

w =

     7

>> z = 9

z =

     9

>> (1 - 1 / (w ^ 3)) ^ -1

ans =

    1.0029

Esercizio 2.2

>> 4 * z / (5 * w - 7)

ans =

    1.2857

Esercizio 2.3

>> 3 * pi / w ^ 2

ans =

    0.1923

Riassumendo

In questa lezione abbiamo visto come creare, modificare e cancellare le variabili. Abbiamo introdotto il concetto di workspace in MATLAB e come funziona. In più abbiamo visto alcune nuove e utili funzioni:

  • save e load per il salvataggio e il caricamento del workspace
  • who e whos per ottenere la lista di variabili attualmente presenti nel workspace
  • clear e clearvars per cancellare il contenuto del workspace.

Infine abbiamo visto che esistono anche delle variabili speciali, un esempio è pi che contiene il valore di \pi greco.

Nella prossima lezione vi mostrerò alcuni trucchi per utilizzare al meglio il prompt interattivo dei comandi in maniera tale da utilizzare MATLAB in maniera più efficiente e veloce.