Main Content

Espressioni

Variabili

Come per la maggior parte degli altri linguaggi di programmazione, il linguaggio di MATLAB® offre espressioni matematiche ma, diversamente dalla maggior parte degli altri linguaggi di programmazione, queste espressioni operano su intere matrici.

MATLAB non richiede alcun tipo di dichiarazione, nemmeno per quanto riguarda le dimensioni. Quando MATLAB incontra il nome di una nuova variabile, crea automaticamente la variabile e alloca la quantità di spazio di memorizzazione appropriato. Se la variabile esiste già, MATLAB ne cambia il contenuto e, se necessario, alloca nuova quantità di spazio di memorizzazione. Ad esempio,

num_students = 25

crea una matrice 1x1 denominata num_students e memorizza il valore 25 nel suo unico elemento. Immettendo semplicemente il nome della variabile viene visualizzata la matrice assegnatale.

I nomi delle variabili sono formati da una lettera, seguita da un numero qualsiasi di lettere, cifre o trattini bassi. MATLAB distingue tra maiuscole e minuscole. A e a non sono la stessa variabile.

I nomi delle variabili possono presentare una qualsiasi lunghezza, ma MATLAB utilizza solo i primi N caratteri del nome (dove N è il numero restituito dalla funzione namelengthmax), e ignora i caratteri restanti. È quindi importante che i primi N caratteri del nome di ciascuna variabile siano unici, per consentire a MATLAB di distinguere le variabili.

N = namelengthmax
N =
    63

Numeri

MATLAB utilizza la notazione decimale convenzionale, con un punto decimale opzionale e un segno iniziale 'più' o 'meno', per i numeri. La notazione scientifica utilizza la lettera e per specificare un fattore di scala alla decima potenza. Per i numeri immaginari si utilizzano i o j. Alcuni esempi di numeri corretti sono

3              -99            0.0001
9.6397238      1.60210e-20    6.02252e23
1i             -3.14159j      3e5i

MATLAB memorizza internamente tutti i numeri utilizzando il formato esteso specificato dallo standard IEEE® a punto mobile. I numeri a punto mobile presentano una precisione finita di circa 16 cifre decimali e un range finito che va da circa 10-308 a 10+308.

I numeri scritti nel doppio formato presentano una precisione massima a 52 bit. Qualsiasi doppio formato che richieda più dei 52 bit supportati risulta meno preciso. Ad esempio, il seguente codice mostra che due valori diversi sono uguali perché vengono entrambi troncati:

x = 36028797018963968;
y = 36028797018963972;
x == y
ans =
      1
Le precisioni disponibili per i numeri interi sono a 8 bit, 16 bit, 32 bit e 64 bit. Memorizzando gli stessi numeri come numeri interi a 64 bit consente di mantenerne la precisione:
x = uint64(36028797018963968);
y = uint64(36028797018963972);
x == y
ans =
      0

Il software di MATLAB memorizza le parti reali e immaginarie di un numero complesso. Gestisce la grandezza delle parti in modi diversi, a seconda del contesto. Ad esempio, la funzione sort effettua un ordinamento in base alla magnitudine e risolve i valori ripetuti (ties) con l'angolo di fase.

sort([3+4i, 4+3i])
ans =
   4.0000 + 3.0000i   3.0000 + 4.0000i

Questo perché l'angolo di fase:

angle(3+4i)
ans =
    0.9273
angle(4+3i)
ans =
    0.6435 

L'operatore relazionale "uguale a" == richiede che le parti reali e quelle immaginarie siano uguali. Gli altri operatori relazionali binari > <, >= e <= ignorano la parte immaginaria del numero e considerano solo la parte reale.

Operatori di matrici

Le espressioni utilizzano operatori aritmetici e regole di precedenza familiari.

+

Addizione

-

Sottrazione

*

Moltiplicazione

/

Divisione

\

Divisione a sinistra

^

Elevamento a potenza

'

Trasposto complesso coniugato

( )

Specificazione dell'ordine di valutazione

Operatori di array

Quando vengono estrapolate dal mondo dell'algebra lineare, le matrici diventano array bidimensionali di numeri. Le operazioni aritmetiche sugli array vengono effettuate un elemento per volta. Ciò significa che l'esecuzione di addizioni e sottrazioni è uguale per array e matrici, mentre le operazioni moltiplicative sono diverse. MATLAB usa un punto, o punto decimale, come parte della notazione per le operazioni di moltiplicazione sugli array.

L'elenco degli operatori comprende

+

Addizione

-

Sottrazione

.*

Moltiplicazione elemento per elemento

./

Divisione elemento per elemento

.\

Divisione a sinistra elemento per elemento

.^

Elevamento a potenza elemento per elemento

.'

Trasposto complesso non coniugato

Se il quadrato magico di Dürer viene moltiplicato per se stesso con la moltiplicazione degli array

A.*A

il risultato è un array contenente i quadrati dei numeri interi da 1 a 16, in un ordine insolito:

ans =
   256     9     4   169
    25   100   121    64
    81    36    49   144
    16   225   196     1

Creazione di tabelle

Le operazioni sugli array sono utili per creare tabelle. Si supponga che n sia il vettore colonna

n = (0:9)';

Quindi

pows = [n  n.^2  2.^n]

crea una tabella di quadrati e di potenze di 2:

pows =
     0     0     1
     1     1     2
     2     4     4
     3     9     8
     4    16    16
     5    25    32
     6    36    64
     7    49   128
     8    64   256
     9    81   512

Le funzioni matematiche elementari operano sugli array un elemento per volta. Quindi

format short g
x = (1:0.1:2)';
logs = [x log10(x)]

crea una tavola logaritmica.

 logs =
      1.0            0 
      1.1      0.04139
      1.2      0.07918
      1.3      0.11394
      1.4      0.14613
      1.5      0.17609
      1.6      0.20412
      1.7      0.23045
      1.8      0.25527
      1.9      0.27875
      2.0      0.30103

Funzioni

MATLAB offre un ampio numero di funzioni matematiche elementari standard, tra cui abs, sqrt, exp e sin. Considerare la radice quadrata o il logaritmo di un numero negativo non è un errore; il risultato complesso appropriato viene generato automaticamente. MATLAB offre anche funzioni matematiche molto più avanzate, tra cui le funzioni di Bessel e gamma. La maggior parte di queste funzioni accetta argomenti complesse. Per visualizzare un elenco delle funzioni matematiche elementari digitare

help elfun

Per visualizzare un elenco di funzioni matematiche e funzioni di matrici più avanzate digitare

help specfun
help elmat

Alcune delle funzioni, come sqrt e sin, sono incorporate. Le funzioni incorporate fanno parte della base di MATLAB; sono quindi estremamente efficienti, ma i dettagli computazionali non risultano immediatamente accessibili. Altre funzioni sono implementate nel linguaggio di programmazione di MATLAB, quindi i loro dettagli computazionali sono accessibili.

Vi sono alcune differenze tra funzioni incorporate e altre funzioni. Ad esempio, non è possibile visualizzare il codice delle funzioni incorporate. Per altre funzioni, è possibile visualizzare il codice e anche modificarlo, se desiderato.

Diverse funzioni speciali offrono valori di costanti utili.

pi

3,14159265...

i

Unità immaginaria, 1

j

Equivale a i

eps

Precisione relativa a punto mobile, ε=252

realmin

Numero più piccolo a punto mobile, 21022

realmax

Numero più grande a punto mobile, (2ε)21023

Inf

Infinity

NaN

Not-a-Number

Infinity viene generato dividendo per zero un valore non zero, oppure valutando le espressioni matematiche ben definite che generano un overflow, cioè che superano realmax. Not-a-number viene generato provando a valutare espressioni del tipo 0/0 o Inf-Inf, che non presentano valori matematici ben definiti.

I nomi delle funzioni non sono riservati. È possibile sovrascriverne una qualsiasi con una nuova variabile, come

eps = 1.e-6

e quindi utilizzare questo valore nei calcoli successivi. La funzione originale può essere ripristinata con

clear eps

Esempi di espressioni

Si sono già visti diversi esempi di espressioni di MATLAB. Ecco alcuni altri esempi e i valori risultanti:

rho = (1+sqrt(5))/2
rho =
    1.6180

a = abs(3+4i)
a =
     5

z = sqrt(besselk(4/3,rho-i))
z =
   0.3730+ 0.3214i

huge = exp(log(realmax))
huge =
  1.7977e+308

toobig = pi*huge
toobig =
   Inf