MATLAB Tutorial: concetti avanzati.

Matrice

Qualche tempo fa ci siamo occupati di MATLAB: ci siamo chiesti cosa fosse, come funziona e ci siamo dati da fare per vedere di prendere confidenza con il metodo con il quale lavora. Fare lo sforzo di guardare il mondo come se fosse composto solo di matrici non è semplice ma lavorare e studiare diventa molto più comodo così. Oggi vediamo di andare avanti e provare a scoprire qualche concetto un po’ più avanzato e qualcun’altra delle funzionalità che MATLAB ha da offrire.

Scopo di questa puntata sarà fornirvi alcune informazioni relative a come funziona MATLAB e quali sono le più importanti funzioni che vi aiuteranno nello scrivere i codici, oltre quelle elementari di cui abbiamo già parlato.
Prima di tutto, può essere molto utile pensare al fatto che MATLAB, come molti altri linguaggi di programmazione, utilizza variabili che possono essere statiche o dinamiche. Anche l’allocazione di memoria può essere gestita in maniera differente a seconda dello scopo per il quale la variabile viene utilizzata. Tuttavia è sempre buona regola, ogni qualvolta si procede alla programmazione di una nuova applicazione eliminare qualunque cosa ci fosse in precedenza. Bisogna liberare spazio ed eliminare tutte le variabili, onde evitare che, all’esecuzione del nuovo codice, queste possano, per un errore qualunque, conservare il loro “vecchio” valore.
Esiste, a tale scopo, l’istruzione clear.
Questo comando, digitato nel workspace o equivalente mentre utilizzato all’interno di uno script, cancella le variabili eventualmente definite in precedenza. È possibile utilizzare delle specifiche istruzioni complementari in modo tale che il comando, per esempio, clear variables oppure clear global. In questi casi verranno eliminate o soltanto le variabili oppure soltanto le variabili globali. Il metodo migliore per eliminare ogni tipo di variabile presente all’interno del programma è scrivere: clear all. Questo comando eliminerà tutte le variabili, comprese quelle globali, le funzioni, i MEX links e qualunque altro package Java che sia stato importato.
Ovviamente, qualora sia il caso di eliminare solo una specifica variabile, magari proprio all’interno dell’esecuzione di un programma, si potrà sempre scrivere qualcosa del tipo clear nome_variabile.

Altra possibilità è quella di interrompere l’esecuzione di una specifica finestra piuttosto che la visualizzazione di un oggetto, come una figura.
A questo scopo è previsto che si utilizzi il comando close.
Ovviamente questa istruzione dovrà essere completata dal tipo di parametro cui si riferisce e pertanto avremo:

  • close -> che chiude la finestra attualmente attiva;
  • close(h) -> che termina la finestra con handle (riferimento caratteristico) “h”;
  • close(‘nome’) -> che chiude la finestra richiamata nell’argomento;
  • close all -> che le termina tutte;
  • close all hidden -> che è uguale alla precedente ma termina anche l’esecuzione delle finestre nascoste.

Supponiamo, adesso, di aver eseguito un certo numero di operazioni all’interno del workspace e di volere liberare lo stesso da questa cronologia, diventata inutile. Possiamo, quindi, utilizzare l’istruzione clc che sta per “Clear command window“. Ovviamente questa non cancellerà la cronologia vera e propria, che si trova all’interno del box dedicato “Command History“; volendo effettuare questa operazione bisognerà agire direttamente all’interno di questo “campo”.

Durante l’esecuzione di un programma o di uno script che contenga tante righe di codice e di conseguenza tante variabili, è possibile che si debba controllare, magari all’interno di un’istituzione ciclica, il valore assunto da una specifica variabile in quell’istante. Esistono due comandi che possono essere utilizzati a tale scopo, che sono who e whos.
Il secondo in particolare, che prevede diversi parametri, proporrà come uscita una struttura della quale elencherà i seguenti campi:

  • nome -> nome della variabile;
  • dimensione -> dimensione della variabile;
  • bytes -> numero di bytes allocati nel gestore;
  • class -> la classe della variabile (ovviamente);
  • global -> per indicare se la variabile è globale (o meno);
  • complex -> per indicare se la variabile contiene un valore complesso;

e così via dicendo… Ovviamente a questi parametri sarà sempre possibile accedere esattamente come si effettua l’accesso agli attributi di una classe in C.

Uno dei comandi che vedremo più avanti è il comando disp. Grazie a questa istruzione sarà possibile far “stampare” una stringa di testo oppure dei numeri convertiti in formato stringa e così via dicendo. È importante, perché potrebbe servire, sapere che l’utilizzo di queste soluzioni automaticamente imposta “l’andata a capo” al termine della riga.

Passiamo adesso ad un altro argomento e parliamo dei vettori. L’accesso ai singoli elementi è permesso esattamente così come lo facevamo in C e pertanto esistono analoghe istruzioni che permettono la concatenazione piuttosto che la comparazione dell’intero vettore, il calcolo della lunghezza e così via dicendo. In particolare, come vedremo, utilizzeremo l’istruzione horzcat per effettuare la concatenazione orizzontale. In particolare, come vedremo più avanti, è possibile che ci siano dei problemi nel passare alla funzione disp una stringa creata nella stessa chiamata alla funzione, ovvero la concatenazione non può essere un parametro della funzione disp.
Ecco per quale motivo, se vogliamo mostrare una stringa complessa sarà il caso di realizzarla prima, assegnandole un nome, e poi chiamare la funzione disp passandole come parametro il nome della stringa che abbiamo creato.
Sono davvero tante parole per un concetto molto semplice che capirete immediatamente appena lo vedrete applicato.

La potenza di MATLAB sta nel fatto che potete visualizzare quello che calcolate. Creare dei grafici, anche complessi, magari tridimensionali, diventa estremamente semplice specie se si utilizzano le istruzioni plot e mesh. La prima è specificatamente relativa alla creazione di grafici (anche 3D) mentre la seconda serve, come il nome suggerisce, appunto, per generare mesh. Entrambe queste istruzioni hanno diversi parametri che vanno dai colori utilizzati ai nomi delle variabili che possono essere impostati sugli assi coordinati, dai titoli degli stessi a quelli dei grafici. Tutto questo risulta molto utile quando, per esempio, effettuiamo la modellazione di fenomeni fisici come lo spostamento di un punto materiale in uno spazio tridimensionale, per il quale magari potremmo pensare di utilizzare non soltanto dei punti ma delle frecce, in modo tale da evidenziare un movimento. Questo è un artificio grafico che realizziamo “a mano” suggerendo al programma di non utilizzare delle semplici linee per congiungere i punti a valle dell’interpolazione lineare (che è alla base del comando plot) ma, magari, di utilizzare righe e punti intervallati (come ad esempio “-.-“). Entrambe queste istruzioni sono davvero molto divertenti da scoprire anche semplicemente seguendo gli esempi forniti nell’help di MATLAB.

Altra possibilità, che potrebbe essere molto utile quando effettuiate dei conti, magari la risoluzione di un sistema, è la precisione, ovvero il numero di cifre significative, che utilizzate per rappresentare i numeri in gioco. Esiste, a tale scopo, la funzione format, che vi permetterà di modificare il formato di visualizzazione dei dati. Si tratta di una funzione che non produce output e che non avrà effetti diretti sui calcoli. In particolare, i calcoli su variabili float, che siano single o double, vengono effettuati con la precisione in virgola mobile che conosciamo e questo indipendentemente dalla modalità in cui le variabili verranno proposte in uscita. I calcoli su interi vengono sempre e comunque effettuati su interi e questi numeri verranno sempre visualizzati con un numero consono di cifre significative.
Al comando format si possono associare dei parametri partendo dal fatto che il formato di default è short.
Si avrà quindi:

  • format short -> virgola fissa con 5 digits;
  • format long -> virgola fissa con 15 digits per i double e 7 per i single;
  • format short e -> virgola mobile da 5 digits;
  • format short g -> il miglior formato tra virgola fissa e mobile da 15 digits per i double e 7 per i single.

Ce ne sono altri che varrebbe la pena di elencare ma più che la scelta della notazione in virgola fissa o mobile vale la pena di specificare che questa opzione può essere utilizzata anche per effettuare dei cambi nella visualizzazione, per esempio richiedendo che il formato sia esadecimale, grazie all’istruzione format hex.
Pertanto, grazie a questi comandi, otterremo, lavorando su una variabile che MATLAB ben conosce, ovvero pi-greco (indicata con “pi”), dando come comando “format short”, “pi”, il numero 3.1416.
Se, invece, inseriamo “format long”, “pi”, avremo 3.141592653589793.

Cos’altro può fare

Cominciamo con qualche facezia: volete far suonare il vostro pc? Scrivere semplicemente beep.

Volete ascoltare del rumore bianco? Dite a MATLAB di eseguire: x=randn(1e4,1); sound(x).

Se volete, lo possiamo anche vedere con questa immagine

Bene, finora abbiamo giocato. Vediamo che altro, di più serio, si può fare.

Nel 2004 MATLAB è riuscito ad arrivare all’incredibile cifra di 1 milione di utenti nell’ambito industriale ed accademico. Questi, ma anche altri, professionisti hanno utilizzato il software nel campo dell’ingegneria, della scienza, dell’economia ma anche della biologia e delle telecomunicazioni più in generale. Per rendere possibile questa grande varietà di scenari di utilizzo, MATLAB supporta l’integrazione delle sue funzionalità con appositi plugin, denominati Toolboxes. Essi forniscono le basi del calcolo in ambiente specializzato. Per fare alcuni esempi:

  • elaborazione dei segnali;
  • sistemi di controllo;
  • reti neurali;
  • logica incoerente;
  • wavelets;
  • simulazione;
  • progetto di filtri digitali.

La struttura modulare in cui MATLAB è organizzato permette ai programmatori di rivedere anche pezzi di codice “isolati” piuttosto che riprendere in mano l’intera struttura del codice per effettuare il fixing di un bug piuttosto che aggiungere una funzionalità con la nuova release. La presenza dei toolboxes rende queste operazioni ancora più semplici, specie perchè ciascuno di essi è pensato per un’applicazione in particolare.

E, a questo proposito, vediamo quali tipi di applicazioni essi permettono di esplorare. Poichè non c’è modo nè tempo di elencare tutti, vediamo solo un paio di esempi.

Esiste, tra gli altri, l’Instrument Control Toolboxe. Esso è stato pensato per tutti coloro che hanno la necessità di lavorare all’interno di un laboratorio, di acquisire segnali dalla strumentazione (come un oscilloscopio), piuttosto che generatori di funzione o magari analizzatori di spettro. Grazie all’utilizzo di questo Toolboxe il vostro computer potrà diventare una sorta di direttore d’orchestra. La comunicazione tra gli strumenti sarà gestita attraverso bus dedicati. Per esempio, è ben sviluppato il supporto per il protocollo IEEE 488 (comunemente noto con l’acronimo GPIB). Sarà, tuttavia, comunque possibile comunicare anche con interfaccia seriale magari, su RS232 piuttosto che tramite USB.
Ciascuno degli strumenti verrà “catalogato” tramite l’utilizzo di indirizzi e sarà anche possibile gestire configurazioni comunque complesse che magari abbiano strumentazione connessa in locale, dotata di un router proprio ed alla quale sia necessario accedere tramite rete WLAN.

Una lettura certamente affascinante, e che vi darà meglio l’idea di quanto variegato e versatile possa essere questo programma, è certamente l’analisi effettuata da David Rosenbaum dal titolo MATLAB for Behavioral Scientists.

Se vi occupate di materie come affidabilità dei sistemi, controllo certificazione di qualità, oppure lavorate nel campo dell’economia o nel campo della valutazione dei rischi o magari ancora conducete studi epidemiologici e avete bisogno di lavorare con i vari test delle ipotesi, i test z e così via dicendo, certamente potreste trovare un valido supporto nell’utilizzo dello Statistics Toolbox™. Questo prezioso strumento è in grado di fornirvi algoritmi e strumenti che vi permetteranno di analizzare, organizzare e modellare i dati grazie all’utilizzo di una serie di variabili e grafici. Vi sarà possibile, grazie a questo potente plugin, utilizzare la regressione o la classificazione per eseguire la modellazione predittiva, generare numeri casuali per simulazioni Monte Carlo con un diverso tipo di distribuzione (che non avete bisogno di creare ex novo perché già implementate all’interno come la distribuzioni ipergeometrica), usare grafici statistici per l’analisi dei dati ed eseguire, come dicevamo, il test di verifica delle ipotesi.
Ed anche nel caso in cui vi serva effettuare l’analisi dei dati multidimensionali lo Statistics Toolbox contiene algoritmi che vi consentiranno di identificare le variabili chiave che influenzano il modello con la selezione sequenziale di strutture; avrete anche la possibilità di trasformare i dati con analisi in componenti principali o la regressione ai minimi quadrati parziali.

E se tutto questo dovesse essere necessario esportarlo, MATLAB prevede la possibilità di interagire direttamente con file in formato Excel, per una più rapida ed efficiente organizzazione dei dati.

Salutandovi

Bene, anche per oggi possiamo salutarci. Mi preme assolutamente specificare, però, che quanto prospettato non esaurisce neanche la milionesima parte delle potenzialità di questo programma. Siccome però la sua versatilità non è solo la chiave del suo successo ma la ragione per la quale questa spiegazione non può essere esaustiva, la prossima volta cercheremo di metterci le mani sopra davvero per realizzare un programma, ancorchè piuttosto semplice. Alla prossima.

 

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ù

13 Comments

  1. Piero Boccadoro Piero Boccadoro 6 giugno 2013
  2. Francesco darkstar55 6 giugno 2013
  3. Piero Boccadoro Piero Boccadoro 6 giugno 2013
  4. Francesco darkstar55 7 giugno 2013
  5. Piero Boccadoro Piero Boccadoro 7 giugno 2013
  6. Antonello Antonello 8 giugno 2013
  7. tre_spade@hotmail.com 23 giugno 2013
  8. Piero Boccadoro Piero Boccadoro 24 giugno 2013
  9. tre_spade@hotmail.com 24 giugno 2013
  10. Francesco darkstar55 24 giugno 2013
  11. Piero Boccadoro Piero Boccadoro 24 giugno 2013
  12. tre_spade@hotmail.com 24 giugno 2013
  13. Francesco darkstar55 24 giugno 2013

Leave a Reply