Monthly Archives: September 2014

Titolo ed etichette degli assi in Matlab

MATLAB

In questa lezione impareremo ad aggiungere un titolo e delle etichette degli assi in un diagramma Matlab. Le funzioni xlabel, ylabel, e zlabel, per l’appunto, aggiungono etichette agli assi x , y , z. Mentre la funzione title aggiunge un titolo nella parte alta della figura e la funzione text inserisce testo dovunque nella figura.

Un sottoinsieme di notazione di Tex produce lettere greche, simboli matematici, e fonti alternate. L’esempio seguente usa i simboli \leq per <=, \pi per , e \it per fonte corsiva. Analizziamolo nel dettaglio:

t = -pi:pi/100:pi;
y = sin(t);
plot(t,y)
axis([-pi pi -1 1])
xlabel(‘-\pi \leq \itt \leq \pi’)
ylabel(‘sin(t)’)
title(‘Grafico della funzione sin’)
text(1,-1/3,’\it{Funzione dispari}’)

Tali comandi producono il seguente diagramma:

matlab

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Impostare gli assi di un diagramma in Matlab

MATLAB

La funzione axis ci permette di impostare gli assi di un diagramma in Matlab, ha un numero di opzioni per personalizzare la misurazione in scala, l’orientamento, ed il rapporto d’aspetto dei tracciati.

La funzione MATLAB opera nel seguente modo: trova i massimi e minimi dei dati e sceglie una plot-box adatta a tale intervallo di valori, quindi identifica gli assi con delle label. La funzione axis ha la priorità di default, per personalizzare i limiti degli assi.

La funzione axis ha una sintassi del tipo:

axis([xmin xmax ymin ymax])

La funzione axis inoltre accetta anche un numero di keywords per il controllo degli assi. Per esempio:

axis square

impone che i due assi abbiano la stessa lunghezza

axis equal

impone che gli incrementi per ogni marchio su x e y siano uguali. Così se decidiamo di rappresentare dei numeri complessi con il comando, che traccia un poligono di 16 lati:

plot(exp(i*t))

tale comando seguito da axis square o axis equal, trasforma il poligono di forma ovale in un corretto cerchio.

matlab

Infine:

axis auto

restituisce l’asse in scala default, in maniera automatica.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Tracciati multipli nella stessa finestra in Matlab

MATLAB

La funzione subplot permette di esporre tracciati multipli nella stessa finestra in Matlab o li stampa sullo stesso pezzo di carta, digitando:

subplot(m,n,p)

trasforma la finestra della figura in una matrice m-X-n di piccoli subplots e seleziona il pth sub plot come plot corrente.I tracciati (plot) sono numerati prima lungo la prima fila della finestra della figura, poi la seconda fila e così via.

Per esempio, scomporre il tracciato di dati in quattro subregions diversi della finestra della figura, nell’esempio trattato si tracciano i grafici delle seguenti funzioni: sin, cos, tan, atan;

t = 0:pi/10:2*pi;

y = sin(t);

subplot(2,2,1)

plot(t,y)

y1=cos(t);

subplot(2,2,2)

plot(t,y1)

y2=tan(t);

subplot(2,2,3)

plot(t,y2)

y3=atan(t);

subplot(2,2,4)

plot(t,y3)

print -dbmp16m figura.bmp

L’ultima istruzione salva la figura nel file figura.bmp (24-bit .BMP file format) il quale potrà essere inserito in documenti html.

matlab

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Come aggiungere un tracciato ad un grafico in Matlab

MATLAB

La funzione plot apre automaticamente una nuova finestra della figura se non c’`e ne sono già sullo schermo. Se una finestra della figura esiste, la funzione plot usa tale finestra di default. Per aprire una finestra nuova e renderla la finestra corrente è necessario digitare:

figure

Per trasformare una figura esistente in finestra corrente, digitare:

 figure(n)

 dove n è il numero nella barra del titolo della figura.

Per aggiungere un tracciato ad un grafico esistente bisogna utilizzare il comando HOLD che permette appunto di aggiungere tracciati ad un grafico esistente. Quando si digita:

 hold on

MATLAB non rimuove il grafico esistente; aggiunge i dati nuovi al grafico corrente, e riscala se necessario.

matlab

Per esempio, il comando seguente prima crea un tracciato della funzione sin in colore blu e con il marcatore *, poi sovrappone un tracciato per la funzione cos in colore rosso e con il marcatore o:

t = 0:pi/100:2*pi;

y = sin(t);

plot(t,y,’*')

z=cos(t);

hold on

plot(t,z,’r:o’)

Il comando hold on fa si che il primo tracciato sia combinato col secondo tracciato in figura.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Grafici multipli in Matlab

MATLAB

Per tracciare grafici multipli in Matlab è possibile indicare diverse coppie di x-y con una singola chiamata. MATLAB allora in modo del tutto automatico traccia i diversi grafici attraverso un predefinito (ma settabile dall’utente) elenco di colori che permette di distinguere ciascuna collezione di dati.

Per esempio, i seguenti comandi tracciano quattro funzioni di t, ciascuna curva in un colore diverso:

y2 = sin(t – .40);

y3 = sin(t – .8);

y4 = sin(t – 1.2);

plot(t,y,t,y2,t,y3,t,y4)

E’ possibile specificare colore, stile della linea, e marcatori, con segnali positivi o cerchi, attraverso il seguente comando:

plot(x,y, ‘marcatore-stile-colore’)

dove il marcatore-stile-colore è costiutito da una sequenza di 1 , 2 , o 3 caratteri (separati da virgolette)che rappresentano un colore, uno stile di linea , ed un tipo di marcatore; tipi di colore sono:

 ’c’, ’m’, ’y’, ’r’, ’g’, ’b’, ’w’, e ’k’

Questi corrispondono a cyan, magenta, giallo, rosso, verde, azzurro, bianco, e nero.

matlab

Stringhe che ci permettono di stabilire lo stile con cui viene tracciata la linea sono:

  •  ’-’ per la linea continua
  • ’- -’ per la linea tratteggiata
  • ’:’ per una linea a puntini
  • ’-.’ per una linea a puntini e tratteggio
  • ’none’ senza linea.

 Tipi di marcatore comuni sono:

 ’+’, ’o’, ’*’, ’x’

 Per esempio, il comando:

 plot(x,y, ‘ y:+ ‘)

traccia in giallo una linea a puntini e pone un marcatore + a ciascun dato. Se si specifica un tipo di marcatore ma non uno stile di linea, MATLAB disegna solamente il marcatore.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Tracciare un diagramma in Matlab

MATLAB

Per poter tracciare un diagramma in Matlab possiamo utilizzare la funzione PLOT che ha forme diverse, dipendendo dagli argomenti di entrata. In particolare se y è un vettore, plot(y) produce un grafico lineare degli elementi di y contro l’indice degli elementi di y. Se nella funzione si specificano due vettori come argomenti, ad esempio plot(x,y) si produce un grafico di y contro x.

Per esempio, per diagrammare il valore della funzione seno da 0 a 2 pi greco, utilizzeremo la seguente notazione:

t = 0:pi/100:2*pi;

y = sin(t);

plot(t,y)

Ottenendo in questo il seguente tracciato:

matlab

Il diagramma così tracciato può essere completato attraverso una serie di comandi utili che ci permettono di formattare il grafico. Di seguito un breve elenco di quelli più utilizzati:

xlabel (‘etichetta’) genera i titoli o etichette dell’asse x
ylabel (‘etichetta’) genera i titoli o etichette dell’asse y
title (‘etichetta’) genera il titolo del grafico
grid on aggiunge una griglia al diagramma
grid off elimina la griglia dal diagramma
axis ([xmin xmax ymin ymax]) imposta i valori dei limiti degli assi
axis square seleziona automaticamente i limiti degli assi in modo da ottenere un diagramma quadrato
axis equal imposta una spaziatura identica per gli assi
axis auto imposta automaticamente limiti automatici per una corretta visualizzazione

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

I grafici in Matlab

MATLAB

MATLAB possiede estesioni facilitate per esporre a video vettori e matrici attraverso grafici di qualità professionale, così da poter annotare e stampare questi grafici. Questa sezione descrive alcune delle funzioni grafiche più importanti e contiene esempi di alcuni applicazioni tipiche per imparare a tracciare in modo corretto i grafici in Matlab.

I grafici sono diffusamente utilizzati per rappresentare funzioni del tipo y = f (x), dove la variabile indipendente (x) è rappresentata lungo l’asse orizzontale e la variabile dipendente (y) viene descritta lungo l’asse verticale.

Un grafico di questo tipo, detto bidimensionale, può essere ottenuto da dati sperimentali o da un’espressione matematica.

matlab

 Per tracciare in modo corretto un grafico è necessario applicare una serie di regole:

  1.  è necessario innanzitutto che ogni asse abbia un titolo o etichetta con il nome di ciò che rappresenta e l’unità di misura adottata.
  2.  inoltre è consigliabile che ogni asse abbia dei segni di graduazione regolarmente distanziati.
  3.  poi se il grafico visualizza più curve bisogna adottare una legenda per caratterizzarle
  4.  invece se il grafico visualizza diversi insiemi di dati sperimentali è conveniente adottare dei simboli diversi come marcatore del dato.

Utilizzando le indicazioni appena descritte impareremo facilmente a tracciare i grafici in Matlab.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

La funzione disp in matlab

MATLAB

La funzione disp (X) in Matlab, mostra un array, senza stampare il suo nome. Se X contiene una stringa di testo, la stringa viene visualizzata. Un altro modo in matlab per visualizzare una matrice sullo schermo è quello di digitare il suo nome, ma questa stampa un leader “X =”, che non è sempre auspicabile. Si noti che disp non visualizza un array vuoto.

Esempio

Un utilizzo della funzione disp con l’ausilio di un M-file è quello di visualizzare una matrice con le etichette di colonna:

disp( ‘ uno due tre)
disp (rand (5,3))

che si traduce in

uno due tre
0,2113 0,8474 0,2749
0,0820 0,4524 0,8807
0,7599 0,8075 0,6538
0,0087 0,4832 0,4899
0,8096 0,6135 0,7741

matlab

È inoltre possibile utilizzare il comando disp per visualizzare un collegamento ipertestuale nella finestra di comando. Includere la stringa completa dell’ipertesto su una sola riga come input per disp:

disp ( ‘ Il sito di Giuseppe Ciaburro‘)

che genera questo collegamento ipertestuale nella finestra di comando:

Il sito di Giuseppe Ciaburro

Cliccare sul link per visualizzare la home page del sito di Giuseppe Ciaburro in un browser web.

Per la concatenazione è possibile utilizzare disp per visualizzare gli elementi multipli. Ad esempio:

x = [1 2 3];
disp ([ ‘I valori di X sono:’, num2str (x)])

visualizza

I valori di X sono: 1 2 3

Se si desidera visualizzare il testo senza carattere di nuova riga finale, è necessario utilizzare la funzione fprintf. Per esempio,

fprintf ( ‘% s% d% d% d’, ‘I valori di X sono:’, x (:));

visualizza il testo simile al precedente, ma non include un ritorno a capo.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Salvare una sessione in Matlab

MATLAB

MATLAB rappresenta un linguaggio di programmazione interpretato, nel senso che le espressioni che vengono digitate nell’ambiente di lavoro di Matlab sono interpretate e quindi valutate. Quando si inizia una nuova sessione in ambiente MATLAB le dichiarazioni sono inserite nel prompt nella forma:

variabile = espressione

o semplicemente

espressione

Tali espressioni possono essere composte da operatori, funzioni e nomi di variabili. Fato questo il comando passa all’interprete Matlab che valuta l’espressione producendo una matrice, la quale sarà poi visualizzata sullo schermo ed assegnata ad una variabile per poterla poi utilizzare nei successivi calcoli.

Se nella dichiarazione della variabile vengono omessi il nome ed il segno =, viene creata automaticamente una variabile ans le viene assegnato il risultato del calcolo.

matlab

Quando si scrivono più espressioni allora per separare un comando da un altro basta utilizzare un ritorno a capo. Ma nel caso volessimo, per ridurre la lunghezza del codice, inserire più di una dichiarazione sulla stessa riga basterà separarli con un punto e virgola.

Per evitare di visualizzare il risultato di ogni operazione sul prompt di Matlab basterà inserire un punto e virgola alla fine dell’espressione, in modo che la stampa sia soppressa, ma l’assegnazione venga effettuata.

Ricordiamo ancora una volta che MATLAB è case-sensitive nei nomi di comandi, funzioni e variabili. Ad esempio, la funzione MIAFUNZIONE non è la stessa della funzione miafunzione.

Salvare  una sessione in Matlab
Quando ci si disconnette o si esce dall’ambiente MATLAB tutte le variabili utilizzate nella corrente sessione risulteranno perse. Per evitare di perederre tutto il lavoro effettuato fino a quel momento possiamo invocare il comando save prima di uscire dalla sessione. In questo modo tutte le operazioni effettuate nelle sessione corrente e le variabili utilizzate saranno scritte in un file con nome matlab.mat.

>>save

Quando si avviaerà una nuova sessione MATLAB, attraverso l’utilizzo del comando load potremo ripristinare l’area di lavoro al suo stato precedente.

>> load
Loading from: matlab.mat

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

La funzione fopen in Matlab

MATLAB

La funzione fopen in Matlab, apre un flusso di comunicazione con il file il cui nome viene specificato all’interno delle parentesi tonde, tale nome può contenere il percorso nell’albero delle directory, nel caso venga omesso si assume che il file si trovi nella directory di lavoro la cosiddetta work.

La sintassi del comando è la seguente:

[fid, msg] = fopen(nome file, modalità di apertura)

dove fid e la variabile che identi ca il fi le, legge tutti i dati contenuti nel fi le identi cato da fid, convertendoli in base al formato speci cato. Si possono specificare anche percorsi relativi rispetto alla directory di lavoro. Se il file non esiste ed esso viene aperto in modalità “w” allora il file viene creato.

Nel caso il flusso di comunicazione non venga aperto allora Matlab restituisce il valore -1 ed un messaggio di errore che ci comunica che qualcosa è andato storto; in tal caso si potrà verificare che:

il file che deve essere aperto in lettura non esiste

si  è verificato un errore nell’interazione con il supporto di memorizzazione su cui il file risiede

L’istruzione segunete:

fopen(‘all’)

restituisce un vettore riga che contiene gli ID di tutti i file aperti dal programma.

Vediamo infine il significato di una serie di parametri che possono essere utilizzati con la funzione fopen in Matlab:

  • “r”: apre un file esistente in lettura
  • “w”: apre un file esistente (con distruzione di quanto in esso già presente) o crea un nuovo file in scrittura
  • “a”: apre un file esistente o crea un nuovo file in scrittura con posizionamento alla fine del file. Quanto già presente nel file viene mantenuto
  • “rt”: come “r” ma in modalità testuale
  • “wt”: come “w” ma in modalità testuale
  • “at”: come “a” ma in modalità testuale
  • “r+” e ”rt+”: come “r”/”rt” ma si può anche scrivere nel file
  • “w+” e “wt+”: come “w”/”wt” ma si può anche leggere dal file
  • “a+” e “at+”: come “a”/”at” ma si può anche leggere dal file

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Come caricare un file in Matlab

MATLAB

In questa lezione impareremo come caricare un file in Matlab. Vediamo allora come leggere dati da un archivio di testo. Il nome esterno del file sia ”file.txt” che risulta generato con un programma esterno.

Il nome in Matlab deve essere posto entro apici perchè si tratta di una stringa. Per iniziare si apre il file assegnandogli un nome interno, ad esempio nomefile, in lettura ( ’r’ che sta per ”read” ).

nomefile = fopen ( ’file.txt’ , ’r’);

Si preleva dall’archivio nomefile la matrice A leggendo le due colonne di numeri in formato ”%g”.

A = fscanf ( nomefile , ’%g %g’ , [2 inf] );
A = A’;

Si noti che per primo si mette il nome interno: (nomefile) per secondo si mette il formato (’%g%g’) per terzo si mette il numero di elementi per riga(2) e, non sapendo quante righe sono, si mette inf il tutto entro parentesi quadre per indicare la matrice da prelevare. Per ultimo si chiude il file:

fclose (nomefile);

matlab

Ricapitoliamo i comandi utilizzati per caricare un file in Matlab:

  • aprire =) fopen (…)
  • chiudere =) fclose (…)
  • scrivere =) fprintf (…)
  • leggere =) fscanf (…)

LINK DI APPROFONDIMENTO PER L’ARGOMENTO: