MATLAB Tutorial – Introduzione

Matlab Immagine tratta da: http://www.mathworks.it/programs/techkits/images/ml_interactive_kit.jpg

Una delle possibilità che abbiamo nello studio dei fenomeni fisici, o di ciò che osserviamo, è pensarlo come fosse fatto di matrici. La fisica ci suggerisce che questa idea si rivela vincente, ed è esattamente quello che impareremo a fare usando MATLAB, l’ambiente di sviluppo di Mathworks. Fatto questo, dalla fisica alla chimica, dalla medicina alla biologia, dall’ingegneria all’economia, tutto potrà essere modellato, studiato, approfondito. Vi presentiamo di seguito i motivi per cui MATLAB è un software assolutamente irrinunciabile qualsiasi tipo di professionista voi siate.

MATLAB è un acronimo che sta per MATrix LABoratory. Si tratta di un linguaggio di programmazione ad alto rendimento che viene utilizzato per la computazione tecnica grazie alla sua capacità di integrare il calcolo, la visualizzazione e la programmazione in un ambiente di sviluppo in cui tutto viene descritto tramite l’utilizzo di matrici. A seconda della dimensione delle matrici in questione è possibile creare vettori (che altro non sono che matrici con una dimensione unitaria) oppure scalari (che, ovviamente, sono matrici degeneri, cioè con entrambe le dimensioni pari ad uno).
Il software viene sviluppato dalla MathWorks ed è ormai giunto alla sua ottava versione, denominata R2012b.
Esso permette, tra le altre cose, la creazione di interfacce utenti che permettono anche di lavorare con programmi scritti in altri linguaggi di programmazione, tra cui Java e C++.

Il motivo per cui questo software ha avuto un successo così ampiamente riconosciuto e che in realtà tutto il mondo, così come tutti i fenomeni fisici che vi avvengono, possono essere identificati da matrici. Pensiamo ai tensori piuttosto che alla descrizione di un mezzo di propagazione per un’onda elettromagnetica che non sia isotropo. Così, il calcolo vettoriale e matriciale, attraverso algoritmi molto più semplici di quelli che sarebbero necessari, per esempio, in C, può essere svolto con grande facilità.

Molto apprezzato dagli ingegneri e non solo, è il pacchetto addizionale Simulink; questo progetto aggiunge funzionalità grafiche multi dominio per effettuare simulazioni e progettazioni Model-Based, utili quando il sistema da simulare è dinamico oppure embedded.

Fondamenti di MATLAB

Il programma divide l’area di lavoro in diverse sezioni:

  1. il Workspace, ovvero la porzione in cui si elencano tutte le variabili correntamente in uso;
  2. la Command Window, cioè la sezione in cui vengono inseriti i comandi;
  3. la Current Directory, che è la sezione in cui vengono elencati tutti i file presenti nella directory di lavoro;
  4. la Command History, in cui sono elencati i comandi utilizzati di recente.

Abbiamo detto che la parola MATLAB è, in realtà, un acronimo. Leggendolo, ci viene subito in mente l’idea che sia possibile effettivamente manipolare matrici di dimensioni MxN. Anche vettori che dimostrino di avere più di due dimensioni possono essere facilmente gestiti da questo programma.

Se volessimo creare un vettore riga di soli numeri dispari, per esempio, potremmo semplicemente scrivere:
array = 1:2:9
e poiché non stiamo utilizzando il “;”, il programma risponderà così:
array =
1 3 5 7 9

nella riga di codice gli abbiamo detto di creare un vettore riga che parta dall’elemento numero 1 e finisca con l’elemento numero 9 includendo tutti i numeri compresi in questo intervallo a passo 2, ovvero alternativamente (insomma, uno sì ed uno no).
Modificando l’incremento, o i valori di partenza, è possibile creare vettori che contengano qualunque tipo di numero.
La stessa operazione può essere effettuata realizzando una matrice, considerando che all’interno della dichiarazione del vettore l’utilizzo del carattere “;” identifica la fine della riga e l’inizio della successiva. Pertanto scriverò:
A = [4 2 6 9; 5 15 11 1; 9 0 7 17; 4 11 20 1]
per ottenere
A =
4  2  6  9
5 15 11  1
9  0  7 17
4 11 20  1

Può capitare, in alcuni tipi di problemi, che la matrice di interesse sia quella identità, magari di ordine n. In questo caso basterà scrivere: eye(n). Supponiamo che n=3:
A= eye(3)
produrrà una matrice
A =
1 0 0
0 1 0
0 0 1

MATLAB è un vero e proprio laboratorio che permette l’utilizzo di una sezione grafica molto ben sviluppata. Grazie alle “figure” che si possono gestire, il post-processing dei dati sarà molto semplice. Proviamo a fare la visualizzazione di una sinusoide e poi di quattro sinusoidi differenti sia in frequenza sia in ampiezza sia della loro somma, rispettivamente con le prossime tre figure.
t = 0:pi/100:6*pi;
y = sin(t);
figure(1)
plot(t,y)
grid

y2 = .2*sin(.2*t – .40);
y3 = .5*sin(.5*t – .8);
y4 = .8*sin(.8*t – 1.2);
figure(3)
plot(t,y,t,y2,t,y3,t,y4);
grid

figure(3)
y5=y1+y2+y3+y4;
plot(t,y5)

Costrutti e sintassi

Prima di tutto, una breve precisazione riguarda la sintassi. Tutti coloro che hanno familiarità con i linguaggi di programmazione sanno che, proprio perché si tratta di linguaggi, ciascuno ha le sue regole ed è importante conoscerle perché noi stessi possiamo diventare interpreti di ciò che desideriamo ed esprimerlo correttamente dal punto di vista formale.

Una qualunque istruzione in MATLAB può essere scritta direttamente oppure può essere seguita da un “;”. Nel secondo caso, a differenza del primo, l’istruzione in esame verrà eseguita ma il risultato non verrà immediatamente proposto nella “Command Window”. Sia che stiate facendo qualche semplice operazione sia che stiate programmando uno script fate, quindi, comunque attenzione a capire se vi serva o meno.
Altra cosa molto utile è la possibilità di commentare il codice. Vedremo più avanti come si fa ma vale la pena di anticipare che basterà utilizzare il carattere “%”. Per questa, come per altre funzioni, MATLAB utilizza un codice colore che aiuta a rendere il tutto più leggibile ed immediato.

Le applicazioni ed i programmi che vengono realizzati nel linguaggio MATLAB utilizzano diverse simbologie che fanno tutte riferimento, principalmente, agli operatori definiti all’interno dell’ambiente di sviluppo.
Se vogliamo, per esempio, assegnare un valore ad una variabile utilizzeremo, semplicemente, il simbolo =. Questo linguaggio di programmazione permette una conversione veloce dei tipi di dati ed un’assegnazione altrettanto immediata.

A differenza di quanto accade in C la variabile può essere dichiarata nello stesso momento in cui ad essa viene assegnato un valore, senza che questo causi aggravio di tempi o risorse di esecuzione del codice. L’assegnazione può anche avvenire a valle di un calcolo.
Così, sarà possibile scrivere:
x=10;
ma anche
x=f(x);
in cui si intende la funzione comunque complessa.

Ed ora vediamo qualche dettaglio sui costrutti e sulla loro sintassi. Il MATLAB utilizza la stragrande maggioranza di ciò che in C avete imparato a conoscere quindi gran parte di quello che facevate potete rifarlo praticamente uguale.

Anche in questo ambiente di sviluppo esistono cicli, le operazioni condizionate ed alcune delle routine più utilizzate in C. Ritroverete, quindi, il ciclo for, le condizioni if-then-else, con la possibilità di annidarle e creare, quindi, diverse casistiche, ma anche la struttura switch-case, molto apprezzato nella creazione di menu, per esempio.

Oltre a questi, è possibile utilizzare anche il comando break, grazie al quale un ciclo oppure un’iterazione può essere interrotta se si verifica una condizione particolare.

Uno dei costrutti più utili è certamente il while. Esso continua ad eseguire le istruzioni in esso contenute fintanto che la sua condizione di controllo resta vera. Facciamo un esempio “classico” così di certo ci capiamo subito: supponiamo di avere una somma di numeri inversi di numeri naturali (i matematici tra noi sanno che questa è una serie armonica) per sapere quanti termini sono necessari prima di raggiungere, ad esempio, il valore 8, scriveremo qualcosa del tipo:

i=8;                                                    % limite a cui vogliamo arrivare
n=0;                                                   % numero corrente
somma=0;
while somma<i                             % condizione di istruzione per il ciclo
n=n+1;                                          % nuovo numero da conteggiare
somma=somma+1./n;          % aggiornamento della somma
end                                                     % chiusura della struttura iterativa
s=horzcat(‘n= ‘,num2str(n)); % creo la stringa di testo per l’output
disp(s);                                             % comando per far mostrare la stringa

Tanto per far meglio capire il tutto ho anche commentato quello che ho fatto. L’unico comando un po’ “particolare” che ho usato è horzcat(), una funzione che esegue la concatenazione orizzontale di stringhe. Nulla di fantascientifico ma trovo sia un comando molto utile, a differenza di strcat() perchè quest’ultimo non gestisce bene gli spazi a fine riga. Troverete, nell’utilizzo, che esistono attenzioni che è più o meno utile porre a ciascun dettaglio (anche se, spesso e volentieri, questa è più una scelta stilistica che un’esigenza reale).

Discorso opposto va fatto, invece, sui commenti: commentate sempre tutto quello che fate, quantomeno per permettere a voi stessi di sapere che cosa avete fatto anche a mesi di distanza da quando la geniale intuizione che ha risolto il problema che avevate è stata trovata ed utilizzata perchè perfino dentro al codice che si è scritto di proprio pugno talvolta è facile perdersi!

Calcolo numerico

MATLAB dispone di una ricchissima libreria di operatori numerici che permettono di fare davvero ogni cosa. Tanto per cominciare, sono possibili tutte le operazioni che ben conosciamo tra numeri reali, interi, naturali, razionali e complessi.
Come specificato nell’introduzione, però, MATLAB è un tool pensato per vedere il mondo in matrici. Ecco, quindi, che l’utilizzo degli operatori non può essere semplicemente quello che facciamo per i numeri reali. Una operazione come quella di prodotto righe per colonna o l’elevamento a potenza di una matrice non hanno senso se non si considerano i singoli elementi della matrice e si elabora ciascuno di essi per ottenere il risultato corretto.

Ed è così che nascono operatori come .* oppure ./ che, invece di eseguire calcoli in linea con l’analisi classica effettuano operazioni su vettori e matrici. Sono detti operatori puntuali. Per effettuare un prodotto tra matrici in senso classico, quindi,  si utilizzerà l’istruzione: C = A * B mentre per effettuare il prodotto elemento per elemento: C = A .* B.

Tra le funzioni più utili ci sono:

  • sqrt(x) -> radice quadrata di un numero
  • round(x) -> arrotondamento
  • fix(x) -> troncamento
  • sign(x) -> segno di x(vale 1,0 o -1)
  • sin(x) -> funzione seno
  • cos(x) -> funzione coseno
  • tan(x) -> funzione tangente
  • sinh(x) -> funzione seno iperbolico
  • cosh(x) -> funzione coseno iperbolico
  • tanh(x) -> funzione tangegnte iperbolica

ed ancora:

  • asin(x)
  • acos(x)
  • atan(X)
  • exp(x)
  • log(x) -> logaritmo naturale
  • log10(x) -> logaritmo in base 10
  • real(z) -> parte reale di z
  • imag(z) -> parte immaginaria di z
  • conj(z) -> complesso coniugato di z

Insomma, se avete da fare conti, più o meno di ogni complessità, MATLAB è certamente la soluzione.

Qualche esempio pratico

Per realizzare questa sezione ho pensato potesse essere interessante provare a dare risposta ad alcune delle domande più frequenti nelle quali mi sono imbattuto. Ecco quindi la sezione Q&A.

  1. Come posso generare punti equispaziati?
    La risposta a questa domanda è piuttosto semplice. I punti riempiono un vettore di dimensioni 1 riga ed n colonne. Quindi scriveremo x = [lim-inf:intervallo:lim-sup]
  2. Voglio visualizzare i dati su un grafico semilogaritmico. Come faccio?
    Per fare questo esistono diversi metodi, equivalenti ma che richiedono un diverso numero di righe di codice. Si può utilizzare il vettore che abbiamo generato prima e scrivere semplicemente x=log(x), per generare un vettore con valori logaritmici.
    Se questo vettore dovrà essere l’asse delle ascisse del grafico, allora la funzione f sarà una f(x) e al comando plot passeremo i parametri (x,f(x)).
    In MATLAB esiste comunque il comando logplot() per generare un grafico logaritmico. Vi consiglio di consultare l’help per scoprire la sintassi dei grafici semi-logaritmici.
  3. Ma i codici si devono eseguire per forza nella Command Window o esistono gli script
    Assolutamente no. Esistono gli script in MATLAB che vengono salvati come veri e propri file, in formato *.m. Essi possono essere salvati in una directory a piacere. Abbiate solo l’accortezza di non includere spazi nel nome. Il perchè ve lo lascio scoprire da soli.
    Non soltanto file .m esistono, come nativi, in MATLAB ma anche formati come .fig (utilizzato per salvare i grafici), .mat (file binari per la memorizzazione delle variabili) ed altri ancora.
  4. Ho una matrice ma non ne conosco le dimensioni. Che faccio?
    Soluzione 1: nell’area di lavoro c’è una sezione, denominata Workspace, in cui tutte le variabili attive e definite sono elencate, con annessi valori e dimensioni.
    Soluzione 2: nella Command Window, scrivete il nome della variabili (matrice o no, poco cambia). Se è di “piccole dimensioni” lo potrete verificare ad occhio.
    Soluzione 3: utilizzate comandi come size(nomedellavariabile). Se è una matrice vi interesserà certamente sapere sul numero di colonne e di righe quindi, potete chiedere i parametri della matrice A in questione con size(A,1) e size(A,2) visto che il primo parametro “annesso” alla matrice è il numero di righe mentre il secondo è numero di colonne.
  5. Come genero una matrice di numeri casuali? E che distribuzione hanno i numeri casuali che genero?
    Comincio dall’ultima: i numeri casuali possono essere generati con distribuzione uniforme o gaussiana. L’intervallo di valori è [0,1], estremi compresi.
    Per fare questo sarà necessario utilizzare, rispettivamente, le funzioni rand() e randn().
  6. Come calcolo il determinante di una matrice triangolare?
    Se una matrice è triangolare destra, o sinistra, il suo determinante coincide con il prodotto degli elementi della diagonale. Si utilizzano le istruzioni: prod() e diag(). L’istruzione più generale è det().
  7. E se volessi disegnare più diagrammi in un’unica finestra?
    Ottima domanda. Capita piuttosto spesso, in realtà, di aver necessità di più grafici per plot. Pensiamo ai diagrammi di Bode ma anche all’analisi spettrale, per cui magari potrebbe essere utile avere subito a disposizione i grafici del segnale nel tempo e della sua trasformata.
    Per fare questo, useremo subplot() come segue:
    subplot(2,2,1);                    % stampo 4 diagrammi. Inizio a scrivere in alto a sx
    plot(x1,y1);
    subplot(2,2,2);
                        % punto al secondo (in alto a dx)
    plot(x2,y2);
    subplot(2,2,3);
                        % punto al terzo (in basso a sx)
    plot(x3,y3);
    subplot(2,2,4);
                        % punto al quarto (in basso a dx)
    plot(x4,y4);
  8. Come posso aggiungere una griglia ai grafici?
    Dopo aver “stampato” il grafico aggiungete la riga grid on al nostro script.
  9. Come si usano i caratteri speciali nelle scritte?
    Sarei tentato di suggerire di dare uno sguardo all’help per questa domanda ma in generale vi introduco che è necessario utilizzare dei comandi aggiuntivi come parametri alla funzione plot. Ad esempio:
    plot(x,y,‘r-‘), title(‘Funzione \alpha’);
    è una riga di codice che produrrà un grafico tracciato con una linea rossa e che nel titolo includerà la lettera greca alpha.
  10. Per i grafici con più tracce esistono legende?
    Si. MATLAB in automatico utilizza colori differenti per tracciare i grafici con più curve. Se utilizzate anche il comando legend(‘curva uno’, ‘curva due’…) comparirà una legenda che assegnerà quei nomi alle singole funzioni.

Tiriamo le somme

Anche questa volta, come quasi tutto quello che riguarda il lavoro di un ingegnere, l’unico vero limite è la fantasia. Ma se avete un’idea, anche vaga, di quello che volete fare e sapete quali e quanti sono gli strumenti di cui disponete, basta che possiate immaginare la soluzione per intuire quale sia la strada giusta per arrivarci.

E qualsiasi essa sia, MATLAB sarà sempre una valida alternativa.
E voi, per cosa lo utilizzate?

 

Quello che hai appena letto è un Articolo Premium reso disponibile affinché potessi valutare la qualità dei nostri contenuti!

 

Gli Articoli Tecnici Premium sono infatti riservati agli abbonati e vengono raccolti mensilmente nella nostra rivista digitale EOS-Book in PDF, ePub e mobi.
volantino eos-book1
Vorresti accedere a tutti gli altri Articoli Premium e fare il download degli EOS-Book? Allora valuta la possibilità di sottoscrivere un abbonamento a partire da € 2,95!
Scopri di più

42 Comments

  1. gfranco78 gfranco78 2 maggio 2013
  2. Luigi Francesco Cerfeda 2 maggio 2013
  3. Piero Boccadoro Piero Boccadoro 2 maggio 2013
  4. Piero Boccadoro Piero Boccadoro 2 maggio 2013
  5. Giovanni Di Maria gio22 2 maggio 2013
  6. Luigi Francesco Cerfeda 2 maggio 2013
  7. Piero Boccadoro Piero Boccadoro 3 maggio 2013
  8. gimaldi 3 maggio 2013
  9. Piero Boccadoro Piero Boccadoro 3 maggio 2013
  10. gimaldi 3 maggio 2013
  11. Emanuele Emanuele 3 maggio 2013
  12. gfranco78 gfranco78 6 maggio 2013
  13. gfranco78 gfranco78 6 maggio 2013
  14. gimaldi 6 maggio 2013
  15. Piero Boccadoro Piero Boccadoro 6 maggio 2013
  16. Piero Boccadoro Piero Boccadoro 6 maggio 2013
  17. Boris L. 6 maggio 2013
  18. Giorgio B. Giorgio B. 7 maggio 2013
  19. Giorgio B. Giorgio B. 7 maggio 2013
  20. Giorgio B. Giorgio B. 7 maggio 2013
  21. gimaldi 7 maggio 2013
  22. fgiava 8 maggio 2013
  23. Petit_Fleur 8 maggio 2013
  24. Petit_Fleur 8 maggio 2013
  25. Petit_Fleur 8 maggio 2013
  26. Andrea Flori 8 maggio 2013
  27. Piero Boccadoro Piero Boccadoro 8 maggio 2013
  28. Piero Boccadoro Piero Boccadoro 8 maggio 2013
  29. Piero Boccadoro Piero Boccadoro 8 maggio 2013
  30. Piero Boccadoro Piero Boccadoro 8 maggio 2013
  31. Petit_Fleur 8 maggio 2013
  32. fgiava 9 maggio 2013
  33. Piero Boccadoro Piero Boccadoro 10 maggio 2013
  34. Giorgio B. Giorgio B. 12 maggio 2013
  35. Giorgio B. Giorgio B. 12 maggio 2013
  36. k0ral 13 maggio 2013
  37. Luigi Francesco Cerfeda 13 maggio 2013
  38. Boris L. 14 maggio 2013
  39. Boris L. 14 maggio 2013
  40. Piero Boccadoro Piero Boccadoro 21 maggio 2013
  41. Piero Boccadoro Piero Boccadoro 21 maggio 2013
  42. ciccio-1976 22 maggio 2013

Leave a Reply