Corso di Calcolo Numerico CdL in Ingegneria

Transcript

Corso di Calcolo Numerico CdL in Ingegneria
Corso di Calcolo Numerico
C.d.L in Ingegneria Aerospaziale e Meccanica
a.a 2014/2015
Prof. Pasqua D’Ambra
Appunti di Matlab : grafica
Modifica di un oggetto grafico da programma
Si possono modificare le proprietà degli oggetti creati da plot:
plot(...,'PropertyName',PropertyValue,...)
dove 'PropertyName' è
LineWidth ampiezza linea
MarkerEdgeColor colore marker o bordo marker
MarkerFaceColor colore di riempimento marker
MarkerSize ampiezza marker
x = -pi:pi/10:pi;
y = sin(x);
plot(x,y,'--rs','LineWidth',2, 'MarkerEdgeColor','k', 'MarkerFaceColor','g', 'MarkerSize',10)
Si può modificare in modo più sofisticato l’aspetto di una finestra grafica (colore sfondo, spessore
linee, grandezza e tipo caratteri, assi, titolo, …) e dei grafici in essa presenti da programma.
Il Matlab ha una gestione dei grafici object-oriented, cioè lo schermo è un albero in cui ogni nodo è
un oggetto, proveniente da un nodo padre e che ha nodi figli a cui si accede tramite puntatore
(handle) ed a cui sono associate delle proprietà modificabili.
La finestra grafica (Figure) attiva è individuata dal puntatore gcf (graphic current figure).Le
proprietà di un oggetto Figure sono ad esempio la posizione, il colore di sfondo, le dimensioni. Per
vederle tutte:
get(gcf)
I figli di un oggetto Figure sono i grafici, i menù a tendine, le immagini (Axes) presenti nella
finestra. In ogni Figure vi possono essere più Axes, quello attivo è individuato dal puntatore gca
(grafhic current Axes).I figli di un oggetto Axes sono i grafici disegnati ed i testi scritti.
Le proprietà di un oggetto Axes sono ad esempio title, color, xlabel,…Per vederle tutte:
get(gca)
x=-pi:0.1:pi;
y=cos(x);
plot(x,y)
il comando set modifica le proprietà.
Modifichiamo il colore di fondo della figura corrente da grigio a giallo e portiamo a 15 la
dimensione dei caratteri negli assi:
set(gcf,'color','y')
set(gca,'fontsize',15)
Una funzione come plot può generare un handle all’oggetto grafico che produce.
Con il comando
hsin=plot(x,y);
si crea un handle alla curva e se ne possono modificare le caratteristiche
set(hsin,'linewidth',4)
Con il comando axes si può specificare la posizione dell’oggetto nella figura corrente:
axes(‘position’,[a b c d])
c,d = larghezza e altezza del rettangolo in cui inserire la figura
a,b= angolo sinistro in basso della figura rispetto alla finestra
x = -pi:pi/10:pi;
y = sin(x);
t = 0:.01:2*pi;
axes('position',[.1 .1 .8 .6])
polar(t,sin(2*t).*cos(2*t),'--r')
axes('position',[.1 .7 .8 .2])
plot(x,y,'Linewidth',2)
Curve di livello
Le curve di livello sono le curve sulle quali f(x,y) è costante, esse sono una rappresentazione
bidimensionale della superficie analoga a quella delle mappe topografiche. Geometricamente si
taglia il grafico della funzione prefissata con un piano parallelo a quello(x,y) e si proietta la curva
che si ottiene:
contour(X,Y,Z,n)
contour3(X,Y,Z,n)
x = -2:.2:2;
y =-2:.2:2;
[X,Y]=meshgrid(x,y);
z=X.*exp(-(X.^2+Y.^2));
subplot(2,2,1),surf(X,Y,z);
subplot(2,2,2),contour(X,Y,z,20);
subplot(2,2,3),contour3(X,Y,z,20);
subplot(2,2,4),surfl(X,Y,z),view(40,-10) %modifica l’angolo di vista
colormap(hsv)
Funzioni relative al suono e all’animazione
sound(y,Fs) converte un vettore in suono
y= segnale discreto di frequenza Fs
Fs frequenza, se omessa Fs=8192Hz
y=sin(linspace(0,20000,20000));
sound(y,15000)
sound(y,10000)
sound(y,5000)
sound(y)
Si possono creare animazioni memorizzando le immagini come i singoli fotogrammi di un film con i
comandi movie,getframe.
movie(M,n) visualizza n volte la sequenza di immagini memorizzate nella matrice M
tramite il comando getframe.
%funzione demo
z=peaks;
surf(z);
% setta gli assi nell’intervallo dei dati
axis tight;
% fissa gli assi
thisax=axis;
for j=1:5
surf(sin(2*pi*j/20)*z,z);axis(thisax);
% carica le immagini nella matrice F
F(j)=getframe;
end
% muove 5 volte l’immagine
movie(F,5)
Menù a pulsanti
Per creare un semplice menù a pulsanti si può usare la funzione menu:
scelta=menu('intestazione','pulsante1','pulsante2', …)
scelta=menu('scegliunafunzione','sin','cos', 'exp','fine');
if scelta==1
x=0:0.1:2*pi;y=sin(x);
plot(x,y);
elseif scelta==2
x=0:0.1:2*pi;y=cos(x);
plot(x,y);
elseif scelta==3
x=0:0.1:2;y=exp(x);
plot(x,y);
elseif scelta==4
close all;
return;
end
clear scelta;
sceltamenu