CORSO DI LABORATORIO DI INFORMATICA Corso di Laurea Triennale in Ingegneria Elettrica a.a. 2015/2016 Docente: Ing. Domenico Amalfitano Dipartimento di Ingegneria Elettrica e delle Tecnologie dell Informazione (DIETI) Università degli Studi di Napoli Federico II. Via Claudio 21, 4 Piano Laboratorio 4.04
Grafica 2D e 3D
Grafici Bidimensionali La grafica è una delle caratteristiche più sviluppate di MATLAB. MATLAB permette di tracciare più grafici su più finestre dette figure Di default MATLAB traccia i grafici sulla Figure 1 Per aprire una nuova finestra digitare il comando figure(n) dove n = 1, 2, definisce il numero della finestra. Dopo aver digitato tale comando MATLAB traccerà grafici sulla figura n- esima fin quando non sarà digitato nuovamente il comando figure. La chiusura della finestra n-esima avviene con il comando close(n). Il comando close all chiude tutte le finestre.
Comando plot Il comando principale per tracciare grafici bidimensionali è plot. Si vuole tracciare un grafico della sequenza di punti Y=[0.48.84 1.91.6.14]. Digitare: Y=[0.48.84 1.91.6.14]; plot(y)
Comando plot Figure 1 Scalatura assi automatica Punti congiunti da linee a tratto pieno
Comando plot L istruzione plot ammette un parametro opzionale di tipo stringa (racchiuso tra apici) per definire: Il tipo di linea Il colore dei grafici MATLAB mette a disposizione diverse opzioni del comando plot Tipo di linea Tipo di punto Colore Continua - Punto. Giallo y Tratti -- Più + Magenta m Punteggiata : Asterisco * Ciano c Tratti e punti -. Cerchio o Rosso r Croce x Quadrato s Rombo d Triangoli v,^, <,> Verde g Blu b Bianco w Nero k Stelle p, h
Comando plot Tracciamo i punti del vettore Y nella figura numero 3 con dei cerchi verdi. figure(3); plot(y, 'og');
Comando plot Aggiungiamo il titolo, l intestazione degli assi e la griglia. title('sequenza di punti'); xlabel('ascisse'); ylabel('ordinate'); grid on; Ogni volta che questi comandi vengono eseguiti le intestazioni precedenti sono sostituite
Esportare grafico È possibile esportare il grafico in diversi formati (.jpg,.png,.pdf, etc.)
Tracciare il grafico di una funzione Per tracciare il grafico di una funzione y = f x si usa sempre il comando plot In generale il comando plot(a,b) traccia il grafico delle coppie (a i, b i ) Si vuole tracciare il grafico della funzione y = sin (t) nell intervallo 0, 4π figure t=0:0.5:4*pi; y=sin(t); plot(t,y,'-r'); grid on title('funzione sin(t)'); ylabel('ordinate'); xlabel('ascisse');
Forma completa del comando plot La forma più completa del comando plot precede altri parametri: plot(t, y, LineStyle, -, LineWidth, 5, Color, y ); plot(t, y, Marker, d, MarkerSize, 2, MarkerFaceColor, r, MarkerEdgeColor, y );
Grafici multipli Ci sono tre modi per disegnare più grafici sovrapposti.
Grafici multipli - 1 metodo Se occorre tracciare il grafico di più funzioni con la stessa scala di ascisse si può usare plot con argomenti matriciali. plot(x,y) Se Y è una matrice e X un vettore, allora i valori di X sono le ascisse e le colonne (o righe) di Y le ordinate per ogni grafico Se X è una matrice e Y un vettore allora le colonne (o le righe) di X sono tracciate rispetto al vettore Y.
Grafici multipli - 1 metodo Esempio: tracciare il grafico delle funzioni y = sin t e y = cos t per t 0, 2π t=(0:0.1:2*pi)'; Y=[sin(t),cos(t)]; plot(t,y); La scalatura degli assi è ancora automatica ed è determinata in base ai valori massimi e minimi della matrice Y e del vettore t per le ordinate e le ascisse rispettivamente
Grafici multipli - 2 metodo Se gli intervalli sulle ascisse sono diverse usiamo plot con più argomenti: plot(x1, Y1, X2, Y2,, Xn, Yn) Traccia i grafici delle coppie di vettori (Xi, Yi) per i=1,, n Esempio: tracciare il grafico di sin (t) per t 0,3 e cos (t) per t [1,4] t1=(0:.1:3)'; y1=sin(t1); t2=(1:.1:4)'; y2=cos(t2); plot(t1,y1,t2,y2);
Grafici multipli 3 metodo Bloccare il grafico precedente con la coppia di istruzioni axis(axis), hold In generale: plot(x1,y1); axis(axis); hold; plot(x2,y2); plot(x3,y3); plot(xn,yn);
Grafici multipli 3 metodo Soluzione preferibile quando un grafico va privilegiato rispetto agli altri per cui vogliamo che sia il solo a determinare i fattori di scala. Vogliamo confrontare nell intervallo t 0,5 il comportamento della funzione y = sin t con quello delle funzioni y = t e y = e t Non conviene usare gli altri metodi perché dimensionerebbero le ordinate al valore e 5 t=0:.1:5; plot(t,sin(t)); axis(axis); hold; plot(t,[t;exp(t)]);
Esempio Relazione tra sforzi (forza per unità di superficie) nel materiale e deformazioni (allungamento per unità di lunghezza) Riportare sullo stesso grafo, i dati misurati e i polinomi di interpolazione di grado 1, 2 e 3
Codice sfz=[0.18 0.3 0.5 0.6 0.72 0.75 0.8 0.9 1]; def = 1e-3*[0.5 1 1.3 1.5 2 4.5 6 7 8.5]; pi_1 = polyfit (sfz, def, 1); pi_2 = polyfit (sfz, def, 2); pi_3 = polyfit (sfz, def, 3); t = sfz(1):0.01:sfz(length(sfz)); %generalizzazione di t=0.18:0.01:1; pi_1_t=polyval(pi_1,t); pi_2_t=polyval(pi_2,t); pi_3_t=polyval(pi_3,t); plot(sfz, def, 'ok', t, pi_1_t, 'b', t, pi_2_t, 'r', t, pi_3_t, 'c'); title('grafici di interpolazione'); xlabel('sforzo'); ylabel('deformazione'); legend('dati misurati', 'polinomio interpolatore 1 grado', 'polinomio interpolatore 2 grado', 'polinomio interpolatore 3 grado')
Grafico
Altri comandi utili Per poter ridefinire la scalatura degli assi si usa il comando: axis([xmin xmax ymin ymax]) definisce gli estremi di ascissa e ordinata Questo comando permette di alterare la scalatura degli assi dopo aver tracciato il grafico. axis(axis) congela gli assi axis( auto ) ripristina la scalatura automatica degli assi Per creare una stringa di testo e posizionarla in un punto di coordinate (x,y) di un grafo utilizzare il comando: text(x, y, stringa )
Tracciamento di più grafici nella stessa finestra Talvolta è utile poter rappresentare più sotto-finestre grafiche nella stessa finestra. Si può ricorrere al comando: subplot(m, n, p) Separa la finestra in m righe ed n colonne e selezione la sottofinestra p-esima Le finestre sono numerate da sinistra a destra e dall alto verso il basso. Quindi subplot(2,2, 3) divide la finestra corrente in 4 sottofinestre e seleziona quella in basso a sinistra (riga 2 e colonna 1).
Tracciamento di più grafici nella stessa finestra Esempio: subplot(2,2,1), title('primo subplot'); subplot(2,2,2), title('secondo subplot'); subplot(2,2,3), title('terzo subplot'); subplot(2,2,4), title('quarto subplot');
Grafici in scala logaritmica Per rappresentare i dei dati con una rappresentazione diversa da quella con assi lineari cartesiani. A tal proposito si usano i comandi: semilogx traccia l asse x in scala log 10 e l asse y lineare. Stessi parametri di plot semilogy - traccia l asse y in scala log 10 e l asse x lineare. Stessi parametri di plot loglog entrambi gli assi in scala logaritmica. Stessi parametri di plot
Esempio Tabellare e rappresentare graficamente in diverse scale logaritmiche il modulo della funzione razionale fratta riportata di seguito, nonché il suo diagramma di Bode: f s = 3s 2 + 5s + 7 s 3 + 5s 2 + 7s + 12 Per s = jω con ω 10 2, 10 2
Codice >> omega = logspace(-2,2); >> s=j*omega; >> x1=3*s.^2+5*s+7; >> x2=s.^3+5*s.^2+7*s+12; >> x=x1./x2; >> x=abs(x); >> subplot(2,2,1), semilogx(omega,x), title('semilogx'),grid; >> subplot(2,2,2), semilogy(omega,x), title('semilogy'),grid; >> subplot(2,2,3), loglog(omega,x), title('loglog'),grid; >> subplot(2,2,4), semilogx(omega,20*log10(x)), title('diagramma di Bode'),grid, xlabel('\omega [rad/s]'), ylabel('modulo [db]');
Grafo Risultante
Grafici in coordinate polari Per tracciare grafici in coordinate polari si usa il comando: polar(teta, ro) L angolo va immesso in radianti ma gli assi sono tracciati in gradi. Esempio: polar(linspace(0, 2*pi), linspace(0,1))
Esempio coordinate polari >> t = 0:.01:pi/2; >> polar(t, sin(t))
Diagrammi ad impulso e a gradini Per tracciare diagrammi a scalini e ad impulsi si usano rispettivamente i comandi stairs e stem. Impiego classico è nel tracciamento di grafici per sistemi a tempo discreto. Si tracci il grafico della funzione sin t e t 3 per t 0, 10. Inoltre: Si vuole campionare tale segnale con un passo 0.5 Con lo stesso passo si vuole rappresentare un grafico in cui ogni campione è mantenuto costante nell intervallo di campionamento. Comportamento di un «sample & hold».
Codice >> t=0:.1:10; >> td=0:.5:10; >> y=sin(t).*exp(-t/3); >> yd=sin(td).*exp(-td/3); >> subplot(4,1,1), plot(t,y,':'), hold on >> stem(td,yd) >> title('campionamento funzione') >> subplot(4,1,2), stem(td,yd); >> title('campioni') >> subplot(4,1,3), plot(t,y,':'), hold on >> stairs(td,yd); >> title('approssimazione a gradini'); >> subplot(4,1,4), stairs(td,yd); >> title('comportamento Sample & Hold');
Grafico risultante
Grafica 3D Per tracciare il grafico di una funzione reale di due variabili reali z = f(x, y) si usano i comandi: mesh surf I due comandi sono identici. mesh - traccia il grafico disegnando i segmenti che congiungono i valori di z, surf colora anche le zone, dette facce, delimitate da tali segmenti Il comando contour, permette di ottenere una rappresentazione bidimensionale tramite le curve di livello. Prima di richiamare questi comandi definire l intervallo di definizione della funzione z tramite il comando meshgrid
Esempio Tracciare i grafici della funzione z = sin x cos (y) per x 0, 4 e y 2, 1 >> x = 0:.1:4; >> y=-2:.1:4; >> [X,Y]= meshgrid(x,y); >> Z=sin(X).*cos(Y); >> subplot(3,1,1); >> surf(x,y,z); >> subplot(3,1,2); >> mesh(x,y,z); >> subplot(3,1,3); >> contour(x,y,z);
Altre rappresentazioni >> subplot(2,2,1); >> surfc(x,y,z); >> subplot(2,2,2); >> meshc(x,y,z) >> subplot(2,2,3); >> contour(x,y,z,30); >> subplot(2,2,4); >> contour3(x,y,z,20);
Curve parametriche La descrizione parametrica permette più agevolmente di rappresentare curve e punti in uno spazio tridimensionale. Ad esempio è indispensabile avere un comando che ci permetta di rappresentare graficamente singoli punti in uno spazio tridimensionale. Il comando da utilizzare è plot3(x, y, z) Funzionamento identico a plot
Esempio Elica spirale logaritmica. >> t=0:.1:10*pi; >> r=exp(t/10); >> x=r.*cos(t); >> y=r.*sin(t); >> z=t; >> plot3(x, y, z); >> grid;