Università di Salerno Corso di FONDAMENTI DI INFORMATICA Corso di Laurea Ingegneria Meccanica & Ingegneria Gestionale Mat. Pari Docente : Ing. Secondulfo Giovanni Anno Accademico 29-21 UNITÀ IV A GRAFICA DI ATLAB Materiale Didattico predisposto con la collaborazione dell Ing. Paolo Finelli
1 Grafica 2D MATLAB ha numerose istruzioni che consentono di rappresentare vettori e matrici come grafici. Questa sezione descrive alcune delle funzioni grafiche più importanti e contiene esempi di alcune applicazioni tipiche. Creare un diagramma La funzione PLOT si comporta in modo diverso, a seconda dei parametri di input che gli vengono forniti. Se y è un vettore, plot(y) produce un grafico lineare degli elementi di y rispetto all indice degli elementi di y. Se si specificano due vettori come argomento, plot(x,y) produce un grafico di y rispetto x. Per esempio, per diagrammare la funzione seno da a 2 : >> t = :pi/1:2*pi; t è la variabile indipendente, ed è un vettore che va da fino a 2, con incrementi di / 1, >> y = sin(t); >> plot(t,y) Ottenendo così il seguente grafico: Figura 1: Funzione seno Coppie multiple di x-y danno luogo a grafici multipli il tutto utilizzando una sola volta il comando plot. MATLAB traccia automaticamente i diversi grafici attraverso un predefinito insieme di colori ( in ogni caso tale insieme è settabile dall utente) questo permette di distinguere nel grafico ciascuna curva. Per esempio, queste istruzioni tracciano quattro funzioni di t, ciascuna curva però con un colore diverso: >>y2 = sin(t -.4); >>y3 = sin(t -.8); >>y4 = sin(t - 1.2); >>plot(t,y,t,y2,t,y3,t,y4) 2
Figura 2: Grafici Multipli E possibile specificare colore, stile della linea, e marcatori, attraverso il seguente comando: plot(x,y, 'marcatore-linea-colore') dove il marcatore-linea-colore è formato da una sequenza di 1, 2, o 3 caratteri (separati da virgolette) che rappresentano rispettivamente : colore, stile di linea e tipo di marcatore. Marcatore Linea Colore v triangolo - linea continua y giallo d diamante : linea punteggiata m Magenta s quadratino -. linea punto k nero * asterisco -- linea tratteggiata w Bianco + più none senza linea c ciano x per g verde o cerchietto r rosso. punto b blu Per esempio, il comando: plot(x,y, ' r:+ ') ; traccia in rosso una linea a puntini e pone un marcatore + in corrispondenza di ciascun dato. 3
1.8.6.4.2 -.2 -.4 -.6 -.8-1 1 2 3 4 5 6 7 Figura 3: Grafici con LineStyle e marcatori Se si specifica un tipo di marcatore ma non uno stile, MATLAB disegna solamente il marcatore. >> plot(x,y, ' r+ ') ; 1.8.6.4.2 -.2 -.4 -.6 -.8-1 1 2 3 4 5 6 7 Figura 4: Grafico con solo marcatori Operazioni sui grafici Finestre grafiche La funzione plot apre automaticamente una nuova finestra grafica se non c è ne è gia una aperta. Se una finestra grafica è aperta, plot la usa come finestra di default. Per aprire una nuova finestra grafica e renderla di default digitare: >>figure 4
Per trasformare una finestra grafica esistente in finestra di default, occorre digitare >>figure(n) dove n è il numero nella barra del titolo della figura. Aggiunta di un tracciato ad un grafico già esistente Il comando HOLD permette di aggiungere tracciati ad un grafico esistente. Quando si digita : >>hold on MATLAB congela il grafico esistente sulla finestra grafica di default, questo rende possibile sovrapporre un nuovo al grafico a quello corrente, e se necessario ricalibra automaticamente la scala per la variabile indipendente. Per esempio, per creare un grafico seno sovrapposto a quello coseno le istruzioni da usare sono le seguenti: >> t = :pi/1:2*pi; >> y = sin(t); >> plot(t,y,'*') >> z=cos(t); >> hold on >> plot(t,z,'r:o') In sostanza si crea prima un grafico della funzione seno in blu con il marcatore *, poi si sovrappone un grafico coseno in rosso con il marcatore o. 1.8.6.4.2 -.2 -.4 -.6 -.8-1 1 2 3 4 5 6 7 Figura 5: Grafico dimostrativo per la funzione hold Il comando hold off sblocca la finestra grafica, cosi se si effettua nuovamente il comando plot questa azzera il contenuto della finestra riportando solo l ultimo grafico. Subplots La funzione subplot permette di mostrare/stampare grafici multipli nella stessa finestra, digitando: >>subplot(m,n,p) la finestra grafica si trasforma in una matrice m- per -n di sottografici e di questi seleziona il p-esimo come sottofinestra grafica di default. I sottografici sono numerati per riga, il parametro p effettua la selezione. Si 5
voglia scomporre un grafico in quattro sottoregioni diverse della stessa finestra grafica, nell esempio che segue si tracciano i grafici delle seguenti funzioni: sin, cos, tan, atan. >> t = :pi/1:2*pi; >> y = sin(t); >> subplot(2,2,1) >> plot(t,y) ;title( finestra1 ) ; >> y1=cos(t); >> subplot(2,2,2) >> plot(t,y1) ; title( finestra2 ) ; >> y2=tan(t); >> subplot(2,2,3) >> plot(t,y2) ; title( finestra3 ) ; >> y3=atan(t); >> subplot(2,2,4) >> plot(t,y3) ; title( finestra4 ) ; >> print -dbmp16m figura.bmp 1 finestra1 1 finestra2.5.5 -.5 -.5-1 2 4 6 8-1 2 4 6 8 2 x 116 finestra3 1.5 finestra4 1.5 1.5 1.5 2 4 6 8 2 4 6 8 Figura 6: Subplot L ultima istruzione salva la figura nel file figura.bmp (24-bit.BMP file format) per successive integrazioni in altri tipi di documenti. 6
Grafica con dati Complessi Quando i dati da tracciare sono complessi, la parte immaginaria viene usualmente ignorata, tranne quando il comando plot è costituito da un solo argomento. Per questo caso speciale, il comando è una scorciatoia per tracciare la parte reale rispetto a quella immaginaria. Perciò, plot(z) dove Z è un vettore o una matrice complessa, è equivalente a: plot(real(z),imag(z)) Per esempio >> t = :pi/8:2*pi; >> plot(exp(i*t), ' -o ') traccia un poligono di 16 lati con cerchietti ai vertici. Figura 7: Dati Immaginari e complessi Assi La funzione axis ha varie opzioni per personalizzare gli assi della finestra grafica (variazione della scala, l orientamento, ed in generale il look). MATLAB quando deve tracciare un grafico trova i massimi e minimi delle ordinate e forma un riquadro di visualizzazione adatto, identificando gli assi con delle etichette. Per personalizzare l ampiezza degli assi si digita: >>axis([xmin xmax ymin ymax]) Vediamo alcuni dei parametri che axis accetta per il controllo degli assi. Per esempio: >>axis square impone che i due assi abbiano la stessa lunghezza >>axis equal impone che l aspetto per gli incrementi per ogni dato su x e y siano uguali. Così: >> plot(exp(i*t)) 7
seguito da axis square o axis equal, trasforma l ovale della figura precedente in un cerchio perfetto; axis auto restituisce gli assi nella scala di default, in maniera automatica. Titolo ed etichette degli assi Le funzioni xlabel, ylabel, e zlabel aggiungono etichette agli assi x, y, z. La funzione title aggiunge un titolo in cima alla figura e la funzione text inserisce testo ovunque nella figura(basta specificare le coordinate opportune). Text produce anche lettere greche, simboli matematici, e font alternativi. L esempio seguente usa \ leq per <=, \ pi per, e \ it per il font corsivo. >> t = -pi:pi/1: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}') >> sin(t) Alfabeto greco e caratteri speciali L alfabeto greco viene generato dai comandi Figura 8: Assi,Titoli ed altro 8
Tabella 1: Lettere greche minuscole mentre per le maiuscole si utilizzano i seguenti comandi: Tabella 2: Lettere greche maiuscole I caratteri speciali sono elencati in tabella 3. Tabella 3: Simboli matematici Grafici di matrici Quando si richiama la funzione plot con argomento una sola matrice: >>plot(y) Matlab traccia una curva per ogni colonna della matrice utilizzando come indice per l asse x il numero di righe della matrice. Ad esempio: >> Z=peaks; fornisce una matrice 49- per -49 ottenuta valutando una funzione di due variabili. Il diagramma della matrice: >> plot(z) produce un grafico di 49 linee, che di seguito è riportato. 9
1 8 6 4 2-2 -4-6 -8 5 1 15 2 25 3 35 4 45 5 Figura 9: Grafici di matrici Se il comando plot è usato con due argomenti e se X e Y hanno più di una riga o colonna allora: Se Y è una matrice e X un vettore, plot(x,y) traccia un diagramma delle righe di Y rispetto al vettore X, utilizzando colori o tipi di linea differenti per ogni curva. Se X è una matrice ed Y un vettore, plot(x,y) traccia una curva per ogni riga o colonna di X rispetto ad Y. Ad esempio, diagrammando la matrice peaks rispetto al vettore 1:length(peaks) si ottiene un diagramma ruotato rispetto a quello precedente: >> Y=1:length(peaks); >> plot(peaks,y) si ottiene: 5 45 4 35 3 25 2 15 1 5-8 -6-4 -2 2 4 6 8 1 Figura 1: Grafici di matrici 1
Se infine X ed Y sono matrici delle stesse dimensioni allora plot(x,y) fornisce un diagramma delle colonne di X rispetto alle colonne di Y. 2 Grafica 3D Mesh e superficie dei tracciati MATLAB definisce una superficie attraverso le coordinate z dei punti sopra una griglia nel piano x-y, usando linee per connettere punti adiacenti. Le funzioni mesh e surf visualizzano superfici in tre dimensioni: mesh produce superfici reticolari colorando solamente le linee che connettono i punti definiti; surf mostra a colori, sia le linee che connettono i punti definiti che le facce della superficie che si vengono a formare. Figura 11: Esempio di mesh Figura 11bis: Esempio di surf 11
Nota matematica: rappresentazione grafica di funzioni in due variabili Detta f(x,y) una funzione di due variabili, l insieme dei valori di x e y per cui la funzione f esiste ed è definita si chiama D dominio di esistenza (il dominio di esistenza usualmente è rappresentato graficamente da una o più curve chiuse, anche se ci possono essere eccezioni, giacenti nel piano individuato dagli assi x-y). Quindi una funzione f all interno del suo dominio di esistenza assume sempre un valore definito, quindi ammette una rappresentazione grafica. Per ogni coppia (x,y) D l insieme z dei punti che costituisce il grafico è z=f(x,y) Visualizzazione di funzioni di due variabili Per visualizzare una funzione di due variabile, z = f (x,y), bisogna generare due matrici X e Y costituite da un insieme di righe e colonne che, rispettivamente, ricoprano il dominio della funzione. Poi si usano queste matrici per valutare e tracciare la funzione. La funzione meshgrid trasforma nel dominio specifico, un vettore x o due vettori x e y in matrici X e Y per usarle nella valutazione della funzione. Le righe di X sono copie del vettore x e le colonne di Y sono copie del vettore y. Per valutare la funzione bidimensionale sinc, che è data da sin(r)/ r, lungo le due direzioni x e y si procede nel modo seguente: >> [X,Y] = meshgrid(-8:.5:8); >> R = sqrt(x.^2 + Y.^2) + eps; >> Z = sin(r)./r; >> mesh(x,y,z) Nota matematica : la funzione sinc Questa funzione è molto utilizzata nell ambito della teoria dei segnali poiché rappresenta lo spettro in frequenza dell impulso reale. Figura 12: Funzione di due variabili In questo esempio, R è la distanza dall origine che è al centro della matrice. Aggiungere eps evita il valore indeterminato / all origine. 12
Immagini Gli array possono essere visualizzati come immagini, in questo caso gli elementi dell array rappresentano la luminosità o il colore delle immagine. Per esempio: >> load durer carica il file durer.mat contenuto nell elenco dei file dimostrativi: questo file carica nel workspace 2 variabili: X matrice dell immagine 648- per -59, Map matrice 128- per -3, mappa di colore dell imagine. Gli elementi di X sono numeri interi tra 1 e 128, che servono come indice nella mappa colore, map. Quindi digitando: >> image(x) >> colormap(map) >> axis image si riproduce la matrice di Durer, un immagine artistica di valore eccezionale. Figura 13: Durer Un altra immagine della matrice di Durer, ma ad una risoluzione superiore, si trova in un altro file. Digitare: >> load detail e poi usando il tasto freccia su sulla tastiera per ripristinare i comandi image(x) colormap(map l e axis image, cioè ripetendo i seguenti comandi. 13
>> image(x) >> colormap(map) >> axis image 5 1 15 2 25 3 35 Figura 14: Dettagli Stampa dei grafici L opzione PRINT sul menu file o il comando print stampano le figure create da MATLAB. Il menu print apre una finestra di dialogo che offre le opzioni di stampa di default. Il comando print prevede più flessibilità nel selezionare il tipo di output e permette di controllare la stampa da M-file. Il risultato può essere spedito direttamente alla stampante di default o può essere immagazzinato in un specifico file. E disponibile una grande varietà di formati per l output, incluso il formato Postcript. Per esempio : >>print -depsc2 figura.eps questa istruzione salva i contenuti della finestra grafica della figura corrente nel file figura.eps con le opzioni: color Encapsulated Level 2 PostScript; è importante sapere le caratteristiche della stampante prima di usare il comando stampa. Per esempio, i file Level 2 Postscript generalmente sono più piccoli e sono più veloci da stampare rispetto a Level 1 Postscript files. Comunque, non tutte le Stampanti postscript supportano il Level 2. 14