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
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.
3,14159265... | |
Unità immaginaria, | |
Equivale a | |
Precisione relativa a punto mobile, | |
Numero più piccolo a punto mobile, | |
Numero più grande a punto mobile, | |
Infinity | |
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