Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017€¦ · Inserire inoltre il totale nella parte...
Transcript of Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017€¦ · Inserire inoltre il totale nella parte...
Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017Palermo 24 - 28 Luglio 2017
L.3.1. Grafici 2D/3D in MATLAB
www.u4learn.it Arianna Pipitone
L.3.1. Grafici 2D/3D in MATLAB
Funzioni grafiche di MATLAB
I grafici aiutano ad interpretare grandi quantità di dati in modo migliore e più veloce rispetto alle tabelle o alle liste
MATLAB dispone di strumenti grafici molto sofisticati, capaci di rappresentare i dati sia in spazi bidimensionali che a 3 dimensioni
I valori da rappresentare possono essere misurati, estrapolati da variabili presenti nel workspace o calcolati da funzioni (built-in o definite dall’utente)
I grafici tracciati con MATLAB possono essere modificati sia a priori che a posteriori e possono essere salvati in vari formati (sia bitmap che vettoriali)
L.3.1. Grafici 2D/3D in MATLAB
Funzioni grafiche di MATLAB
MATLAB disegna i grafici in una finestra di tipo figure
La prima volta che si disegna un grafico MATLAB apre automaticamente la finestra "figure" dove disegnare il grafico e, fino a quando non verrà chiusa dall’utente, MATLAB continuerà ad usare questa finestra per disegnare grafici sostituendo il precedente grafico con il nuovo
• figure
Apre una nuova finestra dove disegnare il grafico (per evitare di sovrascrivere il precedente grafico)
• figure(‘name’, ‘nomefigura’)
Il comando assegna un nome alla finestra "figure" che sta aprendo. Questo nome sarà visualizzato nella barra della finestra "figure" che apre
• hold on / hold off
Forza MATLAB ad indirizzare i comandi grafici sull’ultima finestra figure aperta senza sovrascriverne il contenuto (on) oppure sovrascrivendolo (off)
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
plot(X , Y)
Il comando permette di creare una curva bidimensionale costituita dai punti (xi , yi) con xiX e yiY. I vettori X e Y devono avere la stessa lunghezza
>> x = -2*pi:0.01:2*pi;
>> y = sin(x);
>> plot(x , y)
formato di grafico predefinito
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
plot(X , Y , ‘SpecificatorlineaSpecificatoremarcatoreSpecificatorecolore’)
Specificatore - -- : -. nessuno
Stile linea Continua Tratteggiata A punti Punto-linea Nessuna linea
Specificatore Marcatore
+ Più
o Cerchio
* Asterisco
. Punto
x Croce
s Quadrato
d Rombo
... Vedi help
nessuno Nessun marcatore
Specificatore Colore
c Ciano
m Magenta
y Giallo
k Nero
r Rosso
g Verde
b Blu
w Bianco
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
È possibile definire tutte le proprietà di personalizzazione del grafico (coloredella linea, spessore, tratteggio, segnapunti, limiti del grafico, ecc…) sia a priorida linea di comando, sia a posteriori per mezzo della Command Window odell’interfaccia grafica
• title(‘titolo del grafico’)
Inserisce il grafico
• xlabel(‘nome asse x’)
Inserisce l’etichetta dell’asse x
• ylabel(‘nome asse y’)
Inserisce l’etichetta dell’asse y
• grid on / grid off
Visualizza (on) o meno (off) la griglia
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
>> plot(-2*pi:0.01:2*pi , sin(-2*pi:0.01:2*pi) , '-r')
>> title('funzione seno')
>> xlabel('angoli')
>> ylabel('valori del seno')
>> grid on
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
• plot(X,Y, ‘NomeProprietà’, ‘valore proprietà’)
È possibile definire altre proprietà della linea, come lo spessore, colore deimarcatori, ecc.. specificando il nome della proprietà (tra apici) e il suo valore
>> x=-2*pi:0.05:2*pi;
>> y=cos(x);
>> plot(x,y,'-b','LineWidth',3.0)
>> title('y=cos(x)')
>> xlabel('radianti')
>> ylabel('coseno')
>> grid on
titolo
griglia
xlabel
ylabel
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
È possibile disegnare più tracce (personalizzabili) in uno stesso grafico grazieal comando hold on
Provare a digitare
>> x = -2*pi:0.01:2*pi;
>> y = sin(x);
>> y1 = cos(x);
>> plot(x , y , '-r')
>> hold on
>> plot(x , y1 , ‘:og')
>> hold off
>> plot(peaks(100))
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
Se non si ha bisogno di personalizzare ogni singola curva si possonodisegnare più tracce su uno stesso grafico con un singolo comando,costruendo la matrice dei valori di y concatenando le varie yi per colonna, conpersonalizzazioni comuni ai vari grafici o meno
>> x = -2*pi:0.01:2*pi;
>> y = sin(x);
>> y1 = cos(x);
>> z = [y ; y1];
>> plot(x , z , '--r')
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
È possibile definire altre proprietà del grafico con i seguenti comandi
• axis(v)
Se non si vuole che sia MATLAB a scegliere automaticamente la scaladegli assi si può inserire un vettore v(xmin , xmax , ymin , ymax) perdefinire i limiti degli assi cartesiani
• legend(‘string 1’ , ‘string 2’ , ...)
Inserisce la legenda del grafico mostrando un camipone della linea ele stringhe inserite dall’utente
• text(x , y , ‘testo da inserire’)
Inserisce del testo definito dall’utente nella posizione individuata dallecoordinate (x , y)
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
>> x = -2*pi:0.01:2*pi;
>> y = sin(x);
>> y1 = cos(x);
>> plot(x , y , '-r')
>> hold on
>> plot(x , y1 , ‘:og')
>> title('funzioni sen(x) e
cos(x)')
>> xlabel('angoli')
>> ylabel('valori delle
funzioni’)
>> legend (’sen(x)’ ,
’cos(x)’)
>> hold off
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
>> x=-2*pi:0.05:2*pi;
>> y=cos(x);
>> z=sin(x);
>> plot(x,y,'-b','LineWidth',3.0)
>> hold on
>> plot(x,z,'--r','LineWidth',3.0)
>> legend('y=cos(x)','y=sen(x)')
comandi equivalenti
>> x=-2*pi:0.05:2*pi;
>> y=cos(x);
>> z=sin(x);
>> plot(x,z,'--r','LineWidth',3.0)
>> hold on
>> plot(x,y,'-b','LineWidth',3.0)
>> legend('y=cos(x)','y=sen(x)')
legenda
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
• line(x , y , 'PropertyName‘ , PropertyValue)
Se x = [x1 x2] e y = [y1 x2] il comando crea una linea dal punto (x1,y1)al punto (x2,y2) con le eventuali proprietà di linea indicate dall’utente>> x = [-10 15];
>> y = [-4 9];
>> line(x , y , 'LineStyle','--','Color','r','LineWidth',3.0)
>> grid on
>> title('Segmento da A(-10,-4) a B(15,9)')
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
• comet(X , Y)
Crea una versione animata di plot (provare a chiudere la finestra delgrafico e a digitare i seguenti comandi)
>> x = -2*pi:0.01:2*pi;
y = 2 * sin(3 * x) + 1/2 * x.^2;
comet(x , y)
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D a linea
Esercizio G1
Calcoliamo la gittata di un cannone al variare dell’angolo di lancio e della velocitàiniziale e tracciamo il grafico dei risultati.
Utilizziamo come angoli di lancio (alzo) angoli ϕ compresi tra 0 e π/2 con passo di0.05, come velocità iniziali le velocità 50 m/sec , 100 m/s e 200 m/s e g = 9,81 m/sec2
Sappiamo che la gittata si ottiene con la formula:
20v
git = sin(2 )g
φ
grafico da ottenere
L.3.1. Grafici 2D/3D in MATLAB
Sottografici
• subplot(m , n , k)
Il comando divide la finestra del grafico in una immaginaria tabella mn, quindi (seguito da un comando di plot) disegna il grafico nella sottofinestra di posto k
La numerazione delle sottofinestre avviene procedendo da sinistra verso destra e dall’alto verso il basso
>> x=-2*pi:0.05:2*pi;
>> y=cos(x);
>> z=sin(x);
>> subplot(2,1,1)
>> plot(x,y,'-b','LineWidth',3.0)
>> title('y=cos(x)')
>> xlabel('radianti')
>> ylabel('coseno')
>> grid on
>> subplot(2,1,2)
>> plot(x,z,'--r','LineWidth',2.0)
>> title('y=sen(x)')
>> xlabel('radianti')
>> ylabel('seno')
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D polari
• polar(theta , r)
Il comando genera un grafico in coordinate polari (theta , r) con theta espresso in radianti
È possibile specificare le caratteristiche della linea proprio come per ilc omadoplot
Il comando ha le stesse proprietà e la stessa sintassi del comando plot, inoltre è possibile usarlo per disegnare un grafico all’interno di una finestra del comando subplot (quindi come sottografico di un grafico)
Al grafico polare è possibile aggiungere il titolo, la legenda, del testo, ecc. proprio come avviene con il grafico a linea
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D polari
>> x = -pi : 0.01 : pi;
>> y = sin(x);
>> polar(x , y , ‘:g')
>> title('grafico di sen(x) in coordinate polari')
>> xlabel(‘radianti')
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D polari
>> x = -pi : 0.01 : pi;
>> y2 = sin(3*x).^2 - 3/2*cos(x)+5*x.^2;
>> polar(x , y2-2 , '-dr')
L.3.1. Grafici 2D/3D in MATLAB
Grafici 2D polarix = -pi : 0.01 : pi;
y = sin(x);
y1 = cos(x);
subplot(2 , 2 , 1)
plot(x , y , '-b' , 'LineWidth' , 2.0)
title('y=sen(x) in coordinate cartesiane')
xlabel('radianti')
grid on
subplot(2 , 2 , 3)
polar(x , y , '-r')
title('y=sen(x) in coordinate polari')
xlabel('radianti')
subplot(2 , 2 , 2)
plot(x , y1 , '-b' , 'LineWidth' , 2.0)
title('y=cos(x) in coordinate cartesiane')
xlabel('radianti')
grid on
subplot(2 , 2 , 4)
polar(x , y1 , '-r')
title('y=cos(x) in coordinate polari')
xlabel('radianti')
L.3.1. Grafici 2D/3D in MATLAB
Grafici a barre e a torta
• bar(x)
Se x è un vettore genera un grafico a barre verticali con gli elementi di x
Se x è una matrice genera un grafico a barre verticali raggruppando i dati per righe
• barh(x)
Se x è un vettore genera un grafico a barre orizzontali con gli elementi di x
Se x è una matrice genera un grafico a barre orizzontali raggruppando i dati per righe
• bar3(x)
Genera un grafico a barre tridimensionali verticali
• bar3h(x)
Genera un grafico a barre tridimensionali orizzontali
L.3.1. Grafici 2D/3D in MATLAB
Grafici a barre e a torta
• pie(x)
Genera un grafico a torta in cui ogni elemento della matrice è rappresentato da una fetta della torta
• pie3(x)
Genera un grafico a torta tridimensionale
• hist(x)
Genera un istogramma
L.3.1. Grafici 2D/3D in MATLAB
Grafici a barre e a torta
Esercizio G2
La tabella mostra i dati di vendita di un’azienda negli ultimi 3 anni.
Rappresentare i dati della tabella con un grafico a barre raggruppando per anno e per tipologia e inserendo i due grafici affiancati in un unico grafico. Inserire inoltre il totale nella parte bassa del grafico globale i grafici a torta del totale delle vendite raggruppati per anno e per tipologia. Inserire le legende
2009 2010 2011
Auto 320 298 204
Moto 123 185 215
Barche 156 168 193
L.3.1. Grafici 2D/3D in MATLAB
Grafici a barre e a torta
Grafico dell’esercizio G2
L.3.1. Grafici 2D/3D in MATLAB
Grafici 3D a linea
• plot3(X , Y , Z)
Il comando ha la stessa sintassi di polt ma permette di creare una curva tridimensionale costituita dai punti (xi , yi zi) con xiX, yiY e ziZ. I vettori X , Y e Z devono avere la stessa lunghezza
>> Z = linspace(0 , 10*pi , 1000);
>> Y = cos(Z);
>> X = sin(Z);
>> plot3(X , Y , Z , '-r' , 'LineWidth' , 3.0)
>> grid on
>> title('SPIRALE')
>> xlabel('asse x')
>> ylabel('asse y')
>> zlabel('asse z')
L.3.1. Grafici 2D/3D in MATLAB
Grafici 3D a linea
>> Z = linspace(0 , 10*pi , 1000);
Y = cos(Z);
X = sin(Z);
plot3(X , Y , Z , '-r' , 'LineWidth' , 3.0)
grid on
title('SPIRALE')
xlabel('asse x')
ylabel('asse y')
zlabel('asse z')
formato di grafico predefinito
L.3.1. Grafici 2D/3D in MATLAB
Grafici 3D a linea
• comet3(X , Y , Z)
Crea una versione animata di plot3 (provare a chiudere la finestra del grafico e a digitare i seguenti comandi)
>> Z = linspace(0 , 10*pi , 5000);
>> Y = cos(Z);
>> X = sin(Z);
>> comet3(X , Y , Z , '-r' , 'LineWidth' , 3.0)
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
• mesh(A)
Crea una superficie con la tecnica di disegno detta a filo "metallico", ossia unendo i punti della superficie con dei segmenti
Se la variabile di input è una matrice bidimensionale, essa rappresenta le quote z dei punti della superficie, mentre le coordinate x e y dei punti vengono ricavati dalla posizione dell’elemento sulla matrice (A(1 , 1) ha x = 1 e y = 1, A(1 , 2) ha x = 1 e y = 2 e così via)
>> Z = [1:10 ; -1:8 ; -3:2:15 ; 10:-1:1 ;
>> ones(1 , 10) * 3];
>> mesh(Z)
>> xlabel('asse x')
>> ylabel('asse y')
>> zlabel('asse z')
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
>> Z = [1:10 ; -1:8 ; -3:2:15 ; 10:-1:1 ; ones(1 , 10) * 3];
>> mesh(Z)
>> xlabel('asse x')
>> ylabel('asse y')
>> zlabel('asse z')
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
mesh(X , Y , Z)
Quando il comando mesh ha in input 3 elementi questi devono essere tali che X e Y siano due vettori lineari (tali che lenght(X) = size(Z , 2) e lenght(Y) = size(Z , 2)) e Z sia una matrice bidimensionale.
Il comando si comporta come mesh(A), ma in questo caso le coordinate x e y dei punti non vengono ricavate dalla posizione degli elementi in Z bensì vengono lette dai vettori X e Y
>> X = linspace(-5 , 10 , 15);
>> Y = linspace(4 , 30 , 4);
>> Z = [ones(1,15) ; ones(1,15) * 2 ; -5:9 ; 0:2:28];
>> mesh(X , Y , Z)
>> title('SUPERFICIE MESH')
>> xlabel('asse x')
>> ylabel('asse y')
>> zlabel('asse z')
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
>> [X,Y] = meshgrid(-8:.5:8);
>> R = sqrt(X.^2 + Y.^2) + eps;
>> Z = sin(R)./R;
>> mesh(X,Y,Z)
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
surf(A)
Crea una superficie tridimensionale con facce costituite da superfici colorate in base alla quota z dei punti
Il comando ha la stessa sintassi e segue le stesse regole di mesh
>> Z = [1:10 ; -1:8 ; -3:2:15 ; 10:-1:1 ;
>> ones(1 , 10) * 3];
>> surf(Z)
>> xlabel('asse x')
>> ylabel('asse y')
>> zlabel('asse z')
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
>> Z = [1:10 ; -1:8 ; -3:2:15 ; 10:-1:1 ; ones(1 , 10) * 3];
>> surf(Z)
>> xlabel('asse x')
>> ylabel('asse y')
>> zlabel('asse z')
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
>> X = linspace(-5 , 10 , 15);
>> Y = linspace(4 , 30 , 4);
>> Z = [ones(1,15) ; ones(1,15) * 2 ; -5:9 ; 0:2:28];
>> surf(X , Y , Z)
>> title('SUPERFICIE SURF')
>> xlabel('asse x')
>> ylabel('asse y')
>> zlabel('asse z')
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
>> [X , Y] = meshgrid(-8:.5:8);
>> R = sqrt(X.^2 + Y.^2) + eps;
>> Z = sin(R)./R;
>> surf(X,Y,Z)
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
contour(A , n)
Crea un istogramma, ossia le curve di livello di una superficie rispetto all’asse z
n è il numero di curve di livello che voglio visualizzare tra il min(z) e il max(z). Se il parametro n non viene specificato dall’utente MATLAB lo sceglie in modo opportuno per permettere una corretta visualizzazione
>> Z = [1:10 ; -1:8 ; -3:2:15 ; 10:-1:1 ;
>> ones(1 , 10) * 3];
>> contour(Z)
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
>> Z = [1:10 ; -1:8 ; -3:2:15 ; 10:-1:1 ;
>> ones(1 , 10) * 3];
>> contour(Z)
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
>> X = linspace(-5 , 10 , 15);
>> Y = linspace(4 , 30 , 4);
>> Z = [ones(1,15) ; ones(1,15) * 2 ; -5:9 ; 0:2:28];
>> surf(X , Y , Z)
>> title('SUPERFICIE CONTOUR')
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
>> [X , Y] = meshgrid(-8:.5:8);
>> R = sqrt(X.^2 + Y.^2) + eps;
>> Z = sin(R)./R;
>> contour(X,Y,Z)
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
meshc(A)
Crea un grafico composto da mesh e da contour
>> [X , Y] = meshgrid(-8:.5:8);
>> R = sqrt(X.^2 + Y.^2) + eps;
>> Z = sin(R)./R;
>> meshc(X,Y,Z)
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
surfc(A)
Crea un grafico composto da surf e da contour
>> [X , Y] = meshgrid(-8:.5:8);
>> R = sqrt(X.^2 + Y.^2) + eps;
>> Z = sin(R)./R;
>> surfc(X,Y,Z)
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici
È possibile inserire i grafici 3D in subplot e mischiarli con grafici 2D >> [X ,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
subplot(3,2,1)
mesh(X,Y,Z)
subplot(3,2,2)
surf(X,Y,Z)
subplot(3,2,3:4)
contour(X,Y,Z)
subplot(3,2,5)
meshc(X,Y,Z)
subplot(3,2,6)
surfc(X,Y,Z)
L.3.1. Grafici 2D/3D in MATLAB
Grafici di superfici