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.

Concetti Chiave
  • 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.

Definizione

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 &gt;
< Minore di &lt;
>= Maggiore o uguale di \geq
<= Minore o uguale di \leq
== Uguale =
~= Diverso \neq
Tabella 1: Operatori relazionali in MATLAB

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 e 9, possiamo introdurre nel prompt la seguente espressione:

>> 5 > 9

ans =

  logical

   0

In questo caso, abbiamo confrontato i numeri 5 e 9 utilizzando l'operatore maggiore >. Il risultato è falso, quindi MATLAB restituisce 0 segnalando anche che si tratta di un valore di tipo 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
Definizione

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
Tabella 2: Operatori logici in MATLAB

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.

Definizione

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.

Definizione

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.

Definizione

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:

  1. Converte i valori logical in valori double corrispondenti ad 1 o 0;
  2. Esegue i calcoli;
  3. 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.