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