Guida a Matlab - Corso base - Capitolo 2: variabili e operazioni matematiche di base. Variabili predefinite. Tutto è matrice
Capitolo 2: Variabili e operazioni matematiche di base. Variabili predefinite. Tutto è matrice.
In Matlab, le variabili vengono create semplicemente assegnando ad una sequenza di caratteri (il nome della variabile) un valore; ad esempio, digitando nel prompt:
>> a = 5;
creeremo una variabile di nome a con valore 5.
Nella finestra del Workspace vedremo apparire la variabile a, descritta come un array di double (Matlab ha definito per noi il tipo di variabile; comunque, vedremo in seguito come effettuare delle conversioni)... come, un array ? Sì, perchè in Matlab "tutto è una matrice", le operazioni sono da intendersi come operazioni tra matrici e, quindi, una singola variabile diventa una matrice di dimensione 1x1, e va memorizzata mediante un array (di dimensione 1).
Gli scalari, quindi, saranno matrici 1x1; i vettori, poi, saranno particolari matrici 1xN (vettore riga) o Mx1 (vettore colonna), mentre avremo infine le matrici vere e proprie, MxN (M righe per N colonne).
Per creare un vettore riga, bisogna inserire i valori all'interno delle parentesi quadre [ ] separandoli mediante una virgola (,) ; ad esempio:
>> vettoreRiga = [3, 2, 5];
La virgola indica un nuovo valore sulla stessa riga, mentre il punto e virgola indica il passaggio ad una riga successiva, per cui creeremo un vettore colonna con (esempio):
>> vettoreColonna = [3; 2; 5];
e una matrice vera e propria con (esempio):
>> miaMatrice = [3, 2, 1; 4, 5, 6; 9, 10, 12];
I nomi delle variabili sono case sensitive, per cui la variabile
>> A = a * 5;
sarà diversa da a, che continuerà ad esistere, con il proprio valore.
Il punto e virgola finale, nelle nostre istruzioni, evita di mostrare sul prompt l'esito dell'operazione (es: il valore assegnato ad una variabile), ma provate a scrivere ad esempio:
>> a = 5;
>> a
(premendo Invio dopo aver premuto a) per vedere mostrato a video il valore della variabile (potete farlo, ad esempio, anche con "vettoreColonna" per vedere, stampati in verticale - in colonna, appunto - i valori della variabile).
I nomi delle variabili possono al massimo 63 caratteri e devono iniziare con una lettera, che può essere però seguita da lettere, numeri o dal simbolo _ (underscore, il trattino basso).
Alcune variabili sono predefinite, per cui i loro nomi sono "riservati"; ad esempio, abbiamo (provate a digitarli nel prompt, senza ; finale, e a premere Invio):
| ans |
Il nome della variabile che contiene il risultato dell'ultima operazione effettuata (se non assegnata ad una variabile). |
| pi |
Pi greco. |
| inf |
Il valore infinito. |
| NaN |
"Non un numero", cioè indefinito o indeterminato, come ad esempio il risultato di 0/0. |
| i |
Radice quadrata di -1 (o: 0 + 1i). |
| j |
Radice quadrata di -1 (o: 0 + 1i). |
| eps |
Precisione di macchina. |
| realmin |
Il più piccolo valore intero positivo utilizzabile / rappresentabile. |
| realmax |
Il più grande valore intero positivo utilizzabile / rappresentabile. |
Le operazioni matematiche di base sono invece le seguenti:
| + |
Addizione; a+b. |
| - |
Sottrazione; a-b. |
| * |
Prodotto; a*b. |
| .* |
Prodotto termine a termine per i vettori; a.*b. |
| / |
Divisione; a/b. |
| ./ |
Divisione termine a termine per i vettori; a./b. |
| ^ |
Elevamento a potenza; a^b. |
| .^ |
Elevamento a potenza termine a termine per i vettori a.^b. |
Un esempio per chiarire meglio le differenze tra le operazioni con e senza . (per scalari o per vettori): data una matrice QUADRATA di nome X, con:
>> Y = X^2;
avremo, in Y, il prodotto della matrice X con sè stessa, mentre con:
>> Z = X.^2;
avremo, in Z, termini di X elevati "singolarmente" al quadrato ( Zi,j = (Xi,j)2).
Un'ultima considerazione sui tipi di dati: ecco i tipi primitivi di Matlab:
-
logical; un valore booleano (0 o 1), memorizzato con 1 byte per elemento.
-
char; elemento "letterale" (es: 'a'), memorizzato con 2 byte.
-
uint8; valore intero senza segno, memorizzato con 1 byte (range [0, 255]).
-
uint16; valore intero senza segno, memorizzato con 2 byte (range [0, 65535]).
-
uint32; valore intero senza segno, memorizzato con 4 byte (range [0, 4294967295]).
-
int8; valore intero con segno, memorizzato con 1 byte (range [-128, 127]).
-
int16; valore intero con segno, memorizzato con 2 byte (range [-32768, 32767]).
-
int32; valore intero con segno, memorizzato con 4 byte (range [-2147483648, 2147483647]).
-
single; valore float, memorizzato con 4 byte (range [-1038, 1038]).
-
double; valore double memorizzato con 8 byte per elemento (range [-10308, 10308]).
Esistono anche funzioni che consentono (qualora sia possibile effettuare tale operazione) di convertire un dato da un tipo ad un altro: per effettuare il casting, in genere basta passare un valore come parametro ad una funzione che ha, per nome, il nome del tipo di dati, ad esempio con:
>> x = 3;
>> a = uint8(x);
>> c = double(a);
Esistono anche funzioni per convertire tipi di dati più complessi tra loro o per "ridurli" a tipi di dati primitivi (matrici): ne riparleremo in seguito.
Discorso a parte merita la funzione real(numeroComplesso), che permette di estrapolare solo la parte intera di un numero complesso passato come parametro; in maniera analoga, la funzione imag(numeroComplesso) permette di estrapolare e depositare come valore a sè stante (matrice 1x1) la parte immaginaria di un numero complesso, mentre conj(numeroComplesso) calcola e restituisce il complesso coniugato di un numero complesso.
|