Introduzione a MATLAB Fabio Rossi fabio.rossi@sssup.it
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: >> x=0:pi/50:10*pi >> plot3(sin(x),cos(x),x) plot3(x,y,z) 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);