Introduzione a MATLAB®

Transcript

Introduzione a MATLAB®
Introduzione a MATLAB®
Fabio Rossi
[email protected]
Grafica in MATLAB
Il primo grafico
>>x = 0:pi/100:2*pi;
>>y=sin(x);
>>plot(x,y)
>>grid
Comando plot
• plot(v1,v2) disegna una curva utilizzando il
primo vettore passato come serie in ascissa ed il
secondo come serie in ordinata
• plot(y) utilizza i valori del vettore y come
ordinate, utilizzando valori da 1 a length(y) come
ascisse
• plot(x1, y1, x2, y2, … xn, yn) disegna n curve
sullo stesso grafico
– La curva i-esima ha xi in ascissa ed yi in ordinata
Esempio
>>x=-3:0.1:3;
>>y1=exp(x);
>>y2=exp(-x);
>>y3=5*sin(3*x);
>>plot(x,y1, x,y2, x,y3)
Colore, stile, marker
• plot(x, y, ‘ColoreStileMarker’)
• Colori: r, g, b, w, k, y, c, m
• Stili:
– “-”
– “--”
– “:”
– “-.”
– “”
linea piena
linea tratteggiata
linea punteggiata
linea tratto-punto
nessuna linea
• Markers: “+”,“o”,“x”,“*”, “.”, … vari altri
Titolo, etichette, legenda
>>plot(x,y);
>>title(‘Una funzione ’);
>>xlabel(‘x’);
>>ylabel(‘y’);
------------------------------------------------------->>plot(x1, y1, x2, y2, … xn, yn)
>>legend(‘curva 1’, ‘curva 2’, … ,’curva n’);
Aggiungere una curva
• Il comando hold permette di aggiungere
all’ultimo grafico generato una curva
>>plot(x, y1);
>>hold
>>plot(x, y2);
>>hold off
>>plot(x, y3);
• La prima e la seconda curva vengono disegnate
sullo stesso grafico, la terza su un grafico
diverso
Comando axis (1)
• Il comando axis permette di contrallare gli
estremi degli assi ed il loro aspetto
• axis([xmin xmax ymin ymax])
• Esempio:
>>x=0:0.01:10;
>>y1=exp(x);
>>y2=x+3;
>>plot(x,y1,x,y2);
>>axis([1 2 0 10]);
Comando axis (1)
• Per ottenere assi della stessa lunghezza,
con scale differenti:
>>axis(‘square’);
• Per suddividere gli assi utilizzando
incrementi di ampiezza uguale
>>axis(‘equal’);
• Comando “zoom”
– interazione tramite interfaccia grafica
Esempio
• Disegnare un cerchio:
>>t=0:pi/50:2*pi;
>>plot(sin(t), cos(t));
>>axis square
Scale logaritmiche
•
•
•
•
Asse x: semilogx()
Asse y: semilogy()
Entrambi gli assi: loglog()
Questi comandi hanno sintassi analoga al
comando plot
Funzioni simboliche
• E’ possibile inserire una funzione in una
stringa
• Il comando eval(stringa) consente di
valutarla
• Esempio:
>>fun = ‘(exp(x)-exp(-x))./(exp(x)+exp(x))’;
>>x=-5:0.01:5;
>>plot(x,eval(fun));
get/set
• Manipolazione avanzata degli attributi di un
grafico
– graph_handle = gca; % associa un puntatore al
grafico
– get(graph_handle); % visualizza lo stato del grafico
– set(graph_handle, ‘fontsize’, 15) % modifca una
proprietà del grafico
– In generale:
set(graph_handle, ‘nome_proprietà’, nuovo_valore)
get/set
• Il grafico è un oggetto che ha alcune proprietà
elementari ed alcune proprietà che sono a loro
volta oggetti
– Accesso tramite puntatori:
• li = get(ax,'Children');
– In generale:
• ptr_figlio = get(ptr_padre, ‘nome_figlio’);
– A questo punto è possibile vedere/modificare le
caratteristiche dell’oggetto:
• get(li);
• set(li, 'LineWidth', 3);
Curve in 3D
• Si usa il comando:
plot3(x,y,z)
>> x=0:pi/50:10*pi
>> plot3(sin(x),cos(x),x)
• Interazione con la finestra del grafico…
Superfici (1)
• Consideriamo una funzione z=f(x,y)
• Dati due vettori di serie per x e y,
rispettivamente di dimensioni n ed m, la
funzione meshgrid(x,y) genera due matrici…
>> x= -2:.1:2;
>> y= -2:.1:2;
>> [X Y] = meshgrid(x,y);
• X e Y nell’esempio, entrambe di dimensioni
mxn, tali che X(i,j) = x(j) e Y(i,j) = y(i)
Superfici (2)
• Supponiamo di voler disegnare la funzione
z=x*exp(-(x*x+y*y))
>>Z = X.*exp(-(X.^2 + Y.^2))
• Per disegnare la griglia:
>>mesh(X,Y,Z)
• Per disegnare la superficie:
>>surf(X,Y,Z)
Curve di livello e gradiente
• Selezione automatica di n curve di livello:
>>contour(X,Y,Z,n)
% n è un intero
• Specifica dei valori delle curve di livello:
>>contour(X,Y,Z,v)
% v è un vettore
• Calcolo del gradiente e visualizzazione:
>>[px, py] = gradient(Z, 0.2, 0.2);
>>quiver(X, Y, px, py);
• Più grafici possono essere posizionati sullo
stesso foglio con il comando subplot …
Esempio – Calcolo dell’integrale
definito, valutazione dell’errore
•
Funzione che approssima l’integrale definito, variando il numero di
suddivisioni dell’intervallo di integrazione
function int=integraleRect(a,b,maxnint,fun)
%
% int=integraleRect(a,b,maxnint,fun)
% a,b: estremidell'intervallo di integrazione
% maxint: numero massimo di suddivisione dell'intervallo [a,b]
% fun: stringa contenente la funzione da integrare
% int: vettore contenente i valori dell'integrale calcolato numericamente
for i=1:maxnint
h=(b-a)/i;
% ampiezza di un intervallo
x=[a+h/2:h:b]; % punti medi degli intervalli
y = eval(fun); % valuta la funzione in tutti i punti medi degli intervalli,
% creado un vettore…
int(i)=h*sum(y);% …la somma dei cui elementi moltiplicata per h da il
% risultato
end
Esempio – Calcolo dell’integrale
definito, valutazione dell’errore
• Test della funzione “integraleRect”:
”a=-pi/2; b=pi/2;
fun = 'cos(x)';
maxnint = 1000;
intex=2;
int=integraleRect(a,b,maxnint,fun);
err=abs(int-intex);
loglog((1:maxnint), err);