Plot tridimensionali con Matlab (o Octave)

Un (brutto) grafico tridimensionale

Mi riferisco alla funzione mesh. E non voglio in alcun modo essere esaustivo; per una documentazione esaustiva, quella di Matlab lo è di sicuro.

Ammettiamo di voler fare il grafico della funzione z = x^2 \cdot \sqrt{y} .  La prima cosa da fare è generare la griglia. Come nel plot bidimensionale, in cui la griglia è unidimensionale ed è quindi un semplice vettore contenete le componenti delle ascisse in cui il grafico viene mostrato, nel caso tridimensionale avremo non un solo vettore, ma due matrici: ogni componente di ciascuna matrice rappresenta un punto del piano di base (piano xy) in cui il grafico viene calcolato e la prima matrice rappresenta il valore della x in quel punto, mentre la seconda rappresenta il valore della y. Si veda pertanto il seguente esempio per comprendere il significato di questa coppia di matrici.

\\  X = \left( \begin{array}{cc}  1 & 2  \\  1 & 2  \end{array} \right) \\  \hspace{2cm} \\  Y = \left( \begin{array}{cc}  4 & 4  \\  5 & 5  \end{array} \right)  

Con queste matrici si ottiene una griglia che contiene i seguenti punti:

  • (1, 4): primo elemento della prima riga di ogni matrice
  • (2, 4): secondo elemento della prima riga
  • (1, 5): primo elemento della seconda riga
  • (2, 5): secondo elemento della seconda riga

Fatto ciò, si deve solo definire una matrice Z, della stessa dimensione delle matrici X e Y, che contenga i valori della funzione nei punti definiti tramite X e Y. Nel nostro esempio, il la matrice Z dovrà contenere:

  • 2 nel primo elemento della prima riga (x = 1,~ y = 4,~ z = x^2 \cdot \sqrt{y} = 2 )
  • 8 nel secondo elemento della prima riga
  • \sqrt{5} nel primo elemento della seconda riga
  • 4 \sqrt{5} nel secondo elemento della seconda riga

Ora basterà richiamare la funzione mesh di Matlab per avere un meraviglioso grafico della nostra funzione. Per la precisione, la funzione va richiamata così: mesh(X, Y, Z), dove X, Y, Z sono le tre matrici che abbiamo definito.

Ora, per fare un grafico, ovviamente, sono necessari più di quattro punti per la griglia. La funzione meshgrid può venirci in aiuto: dati i vettori di x e di y (nel nostro caso i vettori erano (1, 2) per x e (4, 5) per y), la funzione meshgrid(x, y) restituisce le due matrici X e Y che costruiscono la griglia. Si veda il seguente esempio:

x = -4:0.1:4;
y = 0:0.1:5;
[X, Y] = meshgrid(x, y);
Z = X.^2 .* sqrt(Y);
mesh(X, Y, Z);

Ovviamente il grafico deve ancora essere corredato di un titolo (funzione title), di etichette per gli assi (funzioni xlabel, ylabel e zlabel) ed eventualmente di altri accorgimenti. L’importante è notare la semplicità di usare funzioni e operatori component-wise per generare la matrice Z: in una sola e semplice riga di codice si ottengono tutti i (molti) valori necessari.

Advertisements