21
Introduzione a MATLAB ® Fabio Rossi [email protected]

Fabio Rossi fabio.rossi@sssup - Università di Firenze. · • Funzione che approssima l’integrale definito, variando il numero di suddivisioni dell’intervallo di integrazione

Embed Size (px)

Citation preview

Introduzione a MATLAB®

Fabio [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 numericamentefor i=1:maxnint

h=(b-a)/i; % ampiezza di un intervallox=[a+h/2:h:b]; % punti medi degli intervalliy = 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

% risultatoend

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);