Espressioni matematiche in MATLAB

Nella precedente lezione abbiamo avuto un primo incontro con MATLAB ed il suo ambiente grafico. In questa lezione entreremo nel vivo introducendo le espressioni matematiche.

Nota

Nel corso di questa e delle prossime lezioni verranno mostrate delle sessioni interattive con il prompt e dei comandi da inserire. Per indicare che tali comandi vanno inseriti nel prompt verrà utilizzata una notazione di questo tipo:

>> espressione

Il simbolo di doppio maggiore >> viene mostrato nella finestra dei comandi ed indica che MATLAB è pronto ad accettare l'input dell'utente. Pertanto il doppio maggiore non deve essere inserito nel prompt. Nell'esempio precedente bisogna inserire nel prompt solo espressione dopo il prompt.

Espressioni

Come mostrato nella precedente lezione, MATLAB mette a disposizione un prompt interattivo in cui è possibile inserire comandi e ottenere in maniera immediata il risultato.

I più semplici comandi che è possibile inserire sono le espressioni matematiche. Ad esempio inserendo il comando seguente e premendo invio:

>> 6/10

si otterrà il seguente risultato:

ans =

    0.6000

Inserendo l'espressione 6/10, MATLAB calcolerà il risultato per poi visualizzarlo a schermo. In sostanza, lo si può utilizzare come una calcolatrice molto avanzata.

Nell'esempio precedente, la dicitura ans sta per answer o risposta.

Di solito il risultato numerico viene visualizzato con quattro cifre decimali dopo la virgola. Si può modificare questo comportamento per mostrare più cifre decimali ed utilizzare la notazione scientifica. Vedremo come si fa nelle prossime lezioni.

Essendo un software per il calcolo numerico, MATLAB mette ovviamente a disposizione tutte le operazioni matematiche di base: addizione, sottrazione, moltiplicazione, divisione ed elevazione a potenza:

>> 6 + 3

ans =

     9

>> 19 - 6

ans =

    13

>> 5 * 9

ans =

    45

>> 16 / 3

ans =

    5.3333

>> 2 ^ 8

ans =

   256

Da notare che gli spazi tra i vari operandi e operatori viene ignorato.

Le espressioni matematiche base possono essere combinate per ottenere espressioni più complesse. Ad esempio:

>> 4 + 9 * 3

ans =

    31

>> 15 / 2 - 3

ans =

    4.5000

Regole di precedenza

In questi casi tuttavia bisogna prestare attenzione all'ordine degli operatori. MATLAB, come la maggior parte dei linguaggi di programmazione, segue le regole di precedenza standard degli operatori matematici. Ciò significa che:

  1. Le espressioni vengono valutate da sinistra a destra
  2. Vengono valutate dapprima le elevazioni a potenza.
  3. Successivamente, vengono valutate moltiplicazioni e divisioni
  4. Infine vengono valutate le addizioni e le sottrazioni.

Prendiamo, come esempio la seguente espressione:

>> 2 + 5 * 6 ^ 3 - 1
  • Seguendo le quattro regole descritte prima, partendo da sinistra e andando verso destra, la prima operazione da valutare in ordine di precedenza è la potenza: 6 ^ 3 che si risolve in 216. Quindi l'espressione si riduce in 2 + 5 * 216 - 1.
  • L'operazione successiva, in ordine di precedenza, è la moltiplicazione 5 * 216 che si risolve in 1080, per cui l'espressione si riduce in 2 + 1080 - 1.
  • A questo punto abbiamo due operazioni, una somma e una sottrazione con pari livello di precedenza, per cui, seguendo le regole precedenti, MATLAB le valuterà in ordine, da sinistra a destra. Di conseguenza verrà eseguita, dapprima, la somma 2 + 1080 che si risolve in 1082 e successivamente la sottrazione 1082 - 1 che si risolve in 1081.

MATLAB, infatti, riporterà come risultato:

ans =

        1081

Parentesi

Le regole di precedenza permettono di avere un comportamento definito e deterministico nella valutazione delle espressioni matematiche. Tuttavia, potrebbe essere necessario cambiare l'ordine di precedenza. Per questo motivo MATLAB mette a disposizione, come tutti i linguaggi di programmazione, le parentesi per modificare l'ordine di valutazione.

Con le parentesi dobbiamo aggiungere una nuova regola alle quattro precedenti, che, pertanto, diventano cinque:

  1. Le espressioni vengono valutate da sinistra a destra
  2. Il contenuto delle parentesi viene valutato prima del resto ripartendo dalla regola 1
  3. Vengono valutate le elevazioni a potenza.
  4. Successivamente, vengono valutate moltiplicazioni e divisioni
  5. Infine vengono valutate le addizioni e le sottrazioni.

In ogni caso, è sempre buona prassi usare le parentesi anche quando non sono strettamente necessarie. Infatti, l'espressione precedente, 2 + 5 * 6 ^ 3 - 1 , è poco leggibile e nella scrittura di comandi e programmi si potrebbe incappare in brutte sorprese introducendo degli errori difficili da scovare. Ad esempio, per migliorare la leggibilità dell'espressione precedente, si potrebbe scrivere così:

>> 2 + (5 * (6 ^ 3)) - 1

In questo modo, a colpo d'occhio, un utente può capire subito qual è l'ordine delle operazioni inteso da chi ha scritto il comando, anche se le parentesi non erano necessarie.

Funzioni

In un'espressione matematica è possibile anche utilizzare delle funzioni. MATLAB mette a disposizione centinaia di funzioni già pronte all'uso. Inoltre, l'utente può anche definire delle funzioni personalizzate, vedremo come nelle prossime lezioni.

Per il momento, descriverò qualche funzione base di MATLAB. Nelle prossime lezioni descriverò nel dettaglio il loro funzionamento e utilizzo.

Un esempio di funzione base fornita dall'ambiente è la radice quadrata che in MATLAB è chiamata sqrt (che sta per square root). Per invocare (i.e. utilizzare) una funzione basta inserire, nel prompt, il nome seguito dai valori su cui applicare la funzione racchiusi tra parentesi. Ad esempio, per calcolare la radice quadrata di 16, basta inserire l'espressione:

>> sqrt(16)

a cui MATLAB risponderà con:

ans =

     4

Nell'esempio precedente, 16 rappresenta il valore su cui applicare la radice quadrata. Nel gergo tecnico prende il nome di argomento della funzione.

Le funzioni possono essere inserite nelle espressioni. In questo caso dobbiamo aggiungere due ulteriori regole di precedenza:

  1. Le espressioni vengono valutate da sinistra a destra
  2. Il contenuto delle parentesi viene valutato prima del resto ripartendo dalla regola 1
  3. Viene valutato il contenuto degli argomenti delle funzioni da sinistra a destra.
  4. Vengono valutate le funzioni.
  5. Vengono valutate le elevazioni a potenza.
  6. Successivamente, vengono valutate moltiplicazioni e divisioni
  7. Infine vengono valutate le addizioni e le sottrazioni.

Per mostrare bene il funzionamento delle regole di precedenza, così estese, analizziamo la seguente espressione:

>> 3 * 5 + (6 + sqrt(16 + 2 * 8) / 2 ^ 2)

Proviamo a seguire le sette regole di sopra:

  • Partendo da sinistra e andando verso destra vediamo che esiste un gruppo di parentesi da valutare per primo: (6 + sqrt(2 * 8) / 2 ^ 2). (Regola 2)
  • In questo gruppo di parentesi è presente una funzione, sqrt, che dovrà essere valutata prima del resto.
  • L'argomento della funzione è, a sua volta, un'espressione: 16 + 2 * 8. (Regola 3)
  • Quest'ultima si risolve, eseguendo prima la moltiplicazione e poi l'addizione, in 32. (Regole 6 e 7)
  • Viene poi eseguita la funzione sqrt applicandola all'argomento 32. Il risultato è 5.6569. (Regola 4)
  • L'espressione tra parentesi è ora: 6 + 5.6569 / 2 ^ 2. La prossima operazione, in termini di precedenza, è l'elevamento a potenza: 2 ^ 2 che si risolve in 4, per cui si ottiene 6 + 5.6569 / 4. (Regola 5)
  • Seguendo le regole, l'espressione tra parentesi si riduce in 7.4142, per cui, l'espressione globale diventa: 3 * 5 + 7.4142. (Regole 6 e 7)
  • Quest'ultima si riduce nel risultato finale: 22.4142. (Regole 6 e 7)
ans =

   22.4142

Esercizi Guidati

In questa sezione riporto alcuni esercizi guidati che mostrano meglio come inserire espressioni matematiche in MATLAB.

Esercizio 1

Prendiamo l'espressione:

\sqrt{64}

Si tratta di un'espressione davvero semplice e la sua traduzione in MATLAB è immediata:

>> sqrt(64)

ans =

     8

Esercizio 2

Prendiamo l'espressione:

\frac{10}{169} \cdot -\frac{6}{5} \cdot 13

In questo caso, il punto di partenza è rappresentato dalle due moltiplicazioni a pari livello di precedenza, per cui lo scheletro principale dell'espressione diventa:

( fattore1 ) * ( fattore2 ) * ( fattore3 )

Dopodiché, è sufficiente sostituire nell'espressione i tre fattori:

  • 10 / 169
  • -6 / 5
  • 13

Il risultato finale è:

>> ( 10 / 169 ) * ( -6 / 5 ) * ( 13 )

ans =

   -0.9231

Esercizio 3

Prendiamo l'espressione:

\frac{4 \cdot ( 16 - 5 )}{3^{3} - 12 }

In questo caso l'espressione è più complessa. Partiamo dalla frazione principale che possiamo usare come scheletro per l'intera espressione:

( numeratore ) / ( denominatore )

A questo punto abbiamo scomposto l'espressione in due parti: numeratore e denominatore. Al numeratore dobbiamo sostituire l'espressione 4 \cdot (16 - 5) che risulta quasi immediata:

( 4 * (16 - 5) ) / ( denominatore )

Al denominatore, 3^{3} - 12, l'unica possibile fonte di confusione potrebbe essere la potenza, se non ricordiamo le regole di precedenza. Per andare sul sicuro possiamo racchiuderla tra parentesi: (3 ^ 3) - 12. Per cui il risultato finale diventa:

>> ( 4 * (16 - 5) ) / ( (3 ^ 3) - 12 )

ans =

    2.9333

Riassumendo

In questa lezione abbiamo visto come inserire espressioni matematiche nel prompt interattivo ed ottenerne il risultato.

Abbiamo visto come comporre le espressioni più semplici in espressioni più complesse che contengono parentesi e funzioni.

Abbiamo anche visto come le regole di precedenza influiscono sulla valutazione delle espressioni:

  1. Le espressioni vengono valutate da sinistra a destra
  2. Il contenuto delle parentesi viene valutato prima del resto ripartendo dalla regola 1
  3. Viene valutato il contenuto degli argomenti delle funzioni da sinistra a destra.
  4. Vengono valutate le funzioni.
  5. Vengono valutate le elevazioni a potenza.
  6. Successivamente, vengono valutate moltiplicazioni e divisioni
  7. Infine vengono valutate le addizioni e le sottrazioni.

Nella prossima lezione introdurremo le variabili, come possono essere definite e assegnate in MATLAB.