Matlab: pubblicare funzioni

La finestra dell'editor

Abbiamo appena finito di scrivere la nostra funzione che, dati n parametri in input, calcola qualcosa, magari fa qualche grafico e dà m valori in output. Vogliamo ora pubblicare questo file in maniera almeno un po’ professionale, in modo che il codice sia leggibile, i risultati per un dato input chiari e i grafici visibili.

Matlab ci mette a disposizione alcuni strumenti semplici e utili. Dall’editor possiamo scegliere il pulsante publish, accanto al tasto per la stampa per pubblicare in formato html il file con la funzione e gli eventuali risultati.

Se la nostra funzione prende in input alcuni argomenti e non esistono clausole interne per standardizzare gli argomenti non dati, o semplicemente vogliamo che la funzione venga richiamata in un determinato modo, possiamo variare il modo in cui viene richiamata tramite il pulsante Edit Publish Configurations, presente nel menu che si apre selezionando il pulsante citato. Nella finestra che si apre possiamo impostare vari tipi di pubblicazione, diversi output, varie configurazioni di lancio, la directory in cui salvare i file e via dicendo.

Tra li altri possono essere scelti i formati html, pdf e latex; si può scegliere in che formato esportare le immagini, in che modo catturarle, se includere tutto il codice e se evidenziare anche gli eventuali errori. Tutto ciò nella sezione inferiore. Nella sezione superiore, invece si può inserire il codice di lancio della funzione o del file. Nel mio caso, per esempio, carico un file contenente alcune variabili e richiamo la funzione dando alcune di queste variabili in input, richiedendo invece l’output nelle tre variabili ab e c.

La finestra di configurazione

Le configurazioni elencate a sinistra (nel mio una sola) possono essere di pubblicazione (come questa) o di lancio, per la quale ovviamente tutte le opzioni riguardanti la pubblicazione non vengono date. Configurazioni di lancio sono usate quando l’utente richiede il lancio di un file senza richiamare direttamente la funzione da una finestra di comando. Anche queste possono rivelarsi molto utili quando si vuole che l’utente possa eseguire la funzione piuttosto che dargli un rapporto già fatto dei risultati.

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.