Espressioni Logiche in MATLAB
Le Espressioni logiche sono espressioni che, a differenza delle normali espressioni matematiche, possono restituire esclusivamente un valore vero o falso.
In MATLAB è possibile costruire espressioni logiche usando gli Operatori Relazionali, che mettono in relazione due espressioni matematiche, e gli Operatori Logici che combinano tra di loro più espressioni logiche.
Il risultato di un'espressione logica viene rappresentato in MATLAB con un nuovo tipo che prende il nome di logical
e può assumere solo i due valori 0, falso, e 1, vero.
In questa lezione vedremo come creare espressioni logiche, come usare il tipo logical
e come combinare espressioni logiche ed espressioni matematiche.
- Le espressioni logiche restituiscono un risultato che può essere vero o falso, ossia un valore booleano;
- I risultati di un'espressione logica sono memorizzati da MATLAB usando il tipo
logical
; - Gli operatori relazionali e gli operatori logici producono valori
logical
; - I valori
logical
possono essere usati in espressioni matematiche.
Tipo logical
Oltre alle espressioni matematiche, MATLAB è anche in grado di valutare Espressioni Logiche, ossia espressioni il cui risultato è Vero o Falso.
Ad esempio, possiamo introdurre la seguente espressione nel prompt:
>> 3 < 5
ans =
logical
0
In questo esempio bisogna notare due cose:
- Abbiamo usato un nuovo operatore
<
che verifica se il primo operando è minore del secondo. Questo tipo di operatore prende il nome di Operatore Relazionale e lo vedremo in questa lezione. - Il risultato è 0 ma MATLAB indica che si tratta di tipo
logical
.
In MATLAB esiste, infatti, un ulteriore tipo, il logical
, che può assumere due valori soltanto:
- 1, che rappresenta il vero;
- 0, che rappresenta il falso.
Il fatto che vengano usati i valori 0 e 1 per rappresentare falso o vero ha dei vantaggi, come vedremo dopo, rispetto ad usare dei nomi simbolici. In ogni caso, MATLAB mette a disposizione due costanti per rappresentare 0 e 1 che possono essere usate per rendere il codice più leggibile:
true
che equivale a 1;false
che equivale a 0.
Una caratteristica delle variabili logical
è che esse occupano soltanto un singolo byte. Infatti, eseguendo i comandi seguenti otteniamo:
>> x = 3 < 5
x =
logical
1
>> whos
Name Size Bytes Class Attributes
x 1x1 1 logical
Abbiamo salvato il risultato dell'espressione logica nella variabile x
e con l'istruzione whos
si può vedere come essa occupi un solo byte.
Tipo logical
in MATLAB
Il Tipo logical
viene utilizzato in MATLAB per rappresentare i valori booleani di vero, sotto forma di 1, e falso sotto forma di 0. Una variabile di tipo logical
occupa solo un byte.
Operatori Relazionali
MATLAB mette a disposizione degli operatori che permettono di confrontare due espressioni tra di loro. Dal momento che tali operatori mettono in relazione due espressioni, essi prendono il nome di Operatori Relazionali.
Il risultato di questo confronto non è un valore numerico, bensì di tipo logical
.
In MATLAB esistono ben sei differenti operatori relazionali:
Operatore | Significato | Simbolo matematico |
---|---|---|
> |
Maggiore di | |
< |
Minore di | |
>= |
Maggiore o uguale di | |
<= |
Minore o uguale di | |
== |
Uguale | |
~= |
Diverso |
Il significato di questi operatori è abbastanza evidente. L'unica cosa da tener presente è che essi sono espressi in maniera differente dal modo in cui si esprimono in altri linguaggi di programmazione e anche dalla notazione matematica.
Ad esempio, l'operatore di uguaglianza è composto da due simboli di uguale ==
. In matematica si usa solo un simbolo di uguale. Tuttavia, in MATLAB, il singolo simbolo di uguale, =
, rappresenta l'operatore di assegnamento.
Per operandi numerici, l'utilizzo di questi operatori è abbastanza immediato. Per esempio, volendo confrontare due numeri, ad esempio
>> 5 > 9
ans =
logical
0
In questo caso, abbiamo confrontato i numeri >
. Il risultato è falso, quindi MATLAB restituisce logical
. Analogamente, possiamo usare tra valori numerici gli altri operatori:
>> 3 < 4
ans =
logical
1
>> 5 >= 5
ans =
logical
1
>> 6 <= 2
ans =
logical
0
>> 6 == 6
ans =
logical
1
>> 7 ~= 2
ans =
logical
1
Operatori Relazionali in MATLAB
Gli Operatori Relazionali in MATLAB servono per mettere in relazioni due espressioni matematiche o logiche. Il risultato di un operatore relazionale è di tipo logical
.
Operatori Logici
In MATLAB esistono anche gli Operatori Logici che permettono di combinare espressioni il cui risultato è un logical
, ossia espressioni il cui risultato è vero o falso.
Gli operatori logici sono:
Operatore | Nome | Significato |
---|---|---|
~ |
Not | Negazione |
&& |
And | Congiunzione |
|| |
Or | Disgiunzione |
L'operatore Not, detto operatore di negazione, inverte il valore di un'espressione logica. Si tratta di un operatore unario, ossia un operatore che si applica ad un solo operando (l'operando alla sua destra). Con questo operatore un'espressione il cui risultato è true
diventa false
e viceversa.
Per esempio, applicando l'operatore Not alla seguente espressione otteniamo:
>> 6 == 6
ans =
logical
1
>> ~(6 == 6)
ans =
logical
0
Gli operatori And e Or sono, invece, operatori binari. In altre parole combinano due espressioni tra di loro.
L'operatore And, &&
, corrisponde alla congiunzione logica, ossia restituisce un valore true
se e soltanto se i due operandi risultano pari a true
.
L'operatore Or, ||
, corrisponde alla disgiunzione logica inclusiva, in altri termini restituisce un valore true
se almeno uno dei due operandi risulta pari a true
. Si parla di disgiunzione inclusiva perché il risultato è true
anche nel caso in cui tutti e due gli operandi sono pari a true
.
Vediamo qualche esempio per l'operatore And:
>> (3 < 4) && (5 > 2)
ans =
logical
1
>> (3 < 4) && (6 < 2)
ans =
logical
0
Nel primo caso il risultato è vero in quanto i due operandi sono entrambe veri. Nel secondo caso, invece, il risultato è falso perché il secondo operando, 6 < 2
, risulta essere falso.
Vediamo, adesso, qualche esempio per l'operatore Or:
>> (3 < 4) || (5 > 2)
ans =
logical
1
>> (3 < 4) || (6 < 2)
ans =
logical
1
>> (4 < 3) || (6 < 2)
ans =
logical
0
Nel primo caso ambo gli operandi valgono true
quindi il risultato è true
. Nel secondo caso il risultato è vero in quanto il primo operando risulta essere vero. L'ultimo caso, infine, risulta pari a false
in quanto entrambe gli operandi sono falsi.
Operatori Logici in MATLAB
Gli Operatori Logici in MATLAB servono per combinare due espressioni logiche o valori logical
. Il risultato di un operatore logico è un valore di tipo logical
.
Operatori logici e corto circuito
In MATLAB, come in alcuni linguaggi di programmazione, gli operatori logici sono cortocircuitati. Con questo si intende che quando si usa un operatore logico se il risultato può essere determinato dal primo operando allora il secondo operando non viene valutato.
Chiariamo con un esempio. Supponiamo di avere due variabili x
e y
e di voler eseguire il seguente comando:
>> (3 > 5) && (x > y)
In tal caso MATLAB, piuttosto che verificare se x
sia maggiore di y
restituisce direttamente il valore 0
(ossia false
). Il motivo è che l'operatore And, &&
, può risultare true
soltanto se entrambe gli operandi valgono true
. Ma dato che il primo operando vale 0
, ossia è falso, risulta inutile valutare il secondo operando e quindi viene restituito direttamente il valore 0
. In un certo senso la valutazione del secondo operando è stata cortocircuitata.
Lo stesso discorso lo possiamo applicare all'operatore Or. Per questo operatore basta che uno dei due operandi valga true
per risultare true
. Dunque, nell'esempio che segue il secondo operando non verrà valutato:
>> (4 < 6) || (x > y)
In tal caso il primo operando vale true
per cui MATLAB eviterà di valutare il risultato del secondo operando.
Gli Operatori Logici sono cortocircuitati
Gli Operatori Logici in MATLAB sono cortocircuitati, ossia se il risultato può essere determinato solo dal primo operando il secondo non verrà valutato.
Funzione xor
L'operatore Or, ||
, rappresenta la disgiunzione inclusiva in quanto risulta pari a true
anche nel caso in cui tutti e due gli operandi siano pari a true
.
Esiste in logica anche la disgiunzione esclusiva che risulta vera solo se uno degli operandi è vero ma non nel caso in cui lo siano entrambi. In MATLAB non esiste un operatore per questa operazione logica. Tuttavia esiste la funzione xor
, da Exclusive Or, che permette di calcolare la disgiunzione esclusiva tra due (o più) espressioni logiche.
Vediamo qualche esempio:
>> xor(3 < 4, 5 > 2)
ans =
logical
0
>> xor(3 < 4, 6 < 2)
ans =
logical
1
>> xor(4 < 3, 6 < 2)
ans =
logical
0
Combinare espressioni logiche ed espressioni matematiche
Il fatto che una variabile di tipo logical
possa assumere i valori 0, false
, e 1, false
, ha delle importanti conseguenze.
Infatti, è possibile utilizzare un valore logical
anche in espressioni matematiche. Facendo così, le variabili logical
saranno tradotte nei numeri 0 e 1 e il risultato dell'espressione sarà un double
.
Guardiamo l'esempio che segue:
>> x = 3 < 5
x =
logical
1
>> x + 4
ans =
5
>> y = x * 2
y =
2
>> whos
Name Size Bytes Class Attributes
ans 1x1 8 double
x 1x1 1 logical
y 1x1 8 double
Osservando bene, notiamo che la variabile x
vale 1, in quanto true
. Successivamente, nelle due espressioni matematiche successive al posto della variabile viene usato il numero 1. I risultati delle due espressioni matematiche sono comunque di tipo double
.
Tipo logical
ed Espressioni Matematiche
Quando si usa un valore o una variabile di tipo logical
in un'espressione matematica, MATLAB si comporta in questo modo:
- Converte i valori
logical
in valoridouble
corrispondenti ad 1 o 0; - Esegue i calcoli;
- Restituisce un risultato di tipo
double
.
In Sintesi
In questa lezione abbiamo studiato il nuovo tipo logical
. Con questo tipo, chiamato in letteratura tipo booleano, è possibile rappresentare il fatto che un'espressione logica sia vera o falsa.
Un'espressione logica può essere realizzata usando gli Operatori Relazionali e gli Operatori Logici. I primi mettono in relazione espressioni matematiche, i secondi combinano espressioni logiche tra di loro.
Un valore di tipo logical
, dal momento che può valere 0 o 1, può essere usato in un'espressione matematica. Questa potenzialità sarà di grande utilità in futuro quando studieremo l'acesso agli elementi di vettori e matrici in MATLAB.