Gnuplot/Modalità Interattiva

Gnuplot può funzionare in due diverse modalità

La prima è quella interattiva che abbiamo incontrato nel primo esempio.
In questa modalità si digitano i comandi in sequenza, uno dopo l'altro e si può osservarne passo passo l'effetto.

La seconda è quella batch, in cui i comandi desiderati vengono scritti in un file di testo che verrà poi eseguito come uno script.

Le modalità interattiva è utile quando si devono fare delle prove o realizzare un singolo grafico su cui non si hanno ancora le idee chiare. Così facendo si possono osservare di volta in volta gli effetti dei cambiamenti fino a ottenere il risultato desiderato.
La seconda invece torna comodo quando si hanno le idee ben chiare e si deve realizzare una serie di grafici con le stesse impostazioni: un unico script eseguito più volte gnenererà tutte le illustrazioni deisderate.

Contenuti

Modalità Interattiva

Come visto precedentemente è sufficiente elanciare il programma per avviare una sezione interattiva e trovarsi di fronte al terminale di gnuplot:

$ gnuplot

       G N U P L O T
       Version 4.2 patchlevel 2
       last modified 31 Aug 2007
       System: Linux 2.6.17-gentoo-r4

       Copyright (C) 1986 - 1993, 1998, 2004, 2007
       Thomas Williams, Colin Kelley and many others

       Type `help` to access the on-line reference manual.
       The gnuplot FAQ is available from http://www.gnuplot.info/faq/

       Send bug reports and suggestions to <http://sourceforge.net/projects/gnuplot>


Terminal type set to 'x11'
gnuplot> 

A questo punto possiamo digitare una serie di comandi che andranno a definire i dati da disegnare e il loro aspetto grafico (spessore, colore, range... ).

Il primo problema che sorge è quindi quello di capire come definire quello che voglio raffigurare.

Funzioni

Gnuplot fornisce una vasta serie di funzioni standard che coprono tutte le funzioni matematiche più comuni.
Esse necessitano un argomento, che solitamente è la variabile indipendente x che rappresenta l'asse delle ascisse.

Funzioni esponenziali

exp(x) esponenziale
log(x) logaritmo in base e
log10(x) logaritmo in base 10

Funzioni trigonometriche

Le funzioni trigonometriche accettano come argomento, o restituiscono come risultato, un valore che rappresenta un angolo.
Gli angoli possono essere espressi in radianti (opzione di default) o in gradi.

Per modifcare quest'impostazione si veda l'uso del comando set

sin(x) seno
cos(x) coseno
tan(x) tangente
asin(x) arcoseno
acos(x) arcocoseno
atan(x) arcotangente
atan2(y,x) arcotangente del rapporto delle parti reali degli argomenti

Funzioni iperboliche

sinh(x) seno iperbolico
cosh(x) coseno iperbolico
tanh(x) tangente iperbolica
asinh(x) arcoseno iperbolico
acosh(x) arcocoseno iperbolico
atanh(x) arcotangente iperbolica

Funzioni varie

pi la costante pigreco
int(x) parte inteta dell'argomento
abs(x) valore assoluto dell'argomento
rand(x) vedi alla voce Numeri Casuali

Definizione di funzioni

Sebbene Gnuplot non sia un programma di elaborazione numerica, esso mette a disposizione dell'utente gli strume
nti necessari per effettuare le operazioni più comuni.

+ somma
- sottrazione
* moltiplicazione
/ divisione
 % resto della divisione intera
** elevamento a potenza
= assegnamento

E' ovviamente possibile utilizzare le parentesi tonde '(', ')' per precisare la precedenza delle operazioni.

Questi operatori possono essere in combinazione con le funzioni viste precedentemente per definirne di nuove.

gnuplot> <nome_funzione>(<variabili>)=<corpo_della_funzione>

Per esempio:

gnuplot> retta(x)=2*x+3
gnuplot> parabola(x)=(x**2)+(3*x)-2
gnuplot> periodica(x)=cos(2*x)+sin(x)
gnuplot> smorzata(x)=sin(10*x)*exp(-x)
gnuplot> piano(x,y)=2*x-5
gnuplot> paraboloide(x,y)=((x/3)**2-(y/5)**2)/2

definiscono nell'ordine una retta, una parabola, una generica funzione periodica, uno smorzamento esponenziale, un piano e un paraboloide ellittico.

Queste funzioni potranno poi essere visualizzate tramite il comando plot o splot, quest'ultimo nel caso della funzioni a due variabili, seguito dal nome della funzione.
Oppure, come negli esempi riportati, si potrà dare il comando seguito semplicemnte dal corpo della definizione. Con riferimento agli esempi revedenti i comandi:

gnuplot> retta(x)=2*x+3
gnuplot> plot retta(x)

e

gnuplot> plot 2*x+3

sortiscono lo stesso risultato

Le funzioni possono essere anche definite parametricamente tramite l'utilizzo di variabili. Possiamo per esempio definire una funzione sinusoidale di periodo arbitrario nel seguente modo:

gnuplot> periodicsin(x)=sin(k*x)

E' da sottolineare il fatto che la variabile k non è stata definita precedentemente e che è alla sua prima apparizione. Potremo successivamente assegnarvi diversi valori ottenendo sinusoidi che differiscono per l'ampiezza del periodo. L'assegnamento della variabile viene fatto per mezzo dell'operatore = così come per le funzioni.

gnuplot> k=2

Comandi shell

Gnuplot consente di eseguire comandi shell, cosa molto utile che evita di dover uscire da una sessione, eseguire il comando e poi rientrare.
Qualunque comando sia preceduto da un ! verrà interpretato come un comando della shell ed eseguito come tale. per esempio la sequenza di comandi:

gnuplot> !mkdir far
!
gnuplot> !ls -al far
totale 0
drwxr-xr-x 1 al users  2  5 nov 18:07 .
drwxr-xr-x 1 al users 25  5 nov 18:07 ..
!
gnuplot> !touch far/locco
!
gnuplot> !ls -al far
totale 0
drwxr-xr-x 1 al users  3  5 nov 18:07 .
drwxr-xr-x 1 al users 25  5 nov 18:07 ..
-rw-r--r-- 1 al users  0  5 nov 18:07 locco
!
gnuplot>

creea la cartella far, ne visualizza il contenuto, vi crea all'interno il file locco e infine visualizza di nuovo il contenuto.

La possibilità di eseguire comandi shell risulta molto utile se si deve interagire con altri programmi nel corso delle elaborazioni, per esempio per acquisire o manipolare file contenente dati, oppure per compiere successive modifiche alle immagini che abbiamo creato con ulteriori applicativi.

Modalità Batch

Come annunciato la seconda madalità è quella destinata all'editing ed esecuzione di script che facilitino l'automazione delle operazioni.

Il linguaggio utilizzato è lo stesso utilizzato nelle sessioni interattive.

File d'esempio


Output dello script

Per chiarire velocemente come funziona un file di script analiziamo il file funzione_periodica.plt commentando passo passo il suo contenuto:

#!/usr/bin/gnuplot

La riga in testa al file è opzionale e serve se dovessimo decidere di rendere il nostro script direttamente eseguibile.
In questo caso dovremo precisare a quale programma stiamo passando i comandi, esattamente come negli script shell si mette in testa ai file #!/bin/sh, solo che nel nostro caso stiamo specificando proprio gnuplot.

Per verificare che il percorso dichiarato corrisponde a quello dove risiede l'eseguibile di gnuplot potete ricorrere al comando whereis.

# Definizione dei parametri
k=0.25
teta=pi/2
esponente=3

# Definizione della funzione
periodica(x)=sin(k*pi*x+teta)+2*cos(k*pi*x+teta)**esponente

Con queste istruzioni stiamo definendo i parametri della funzione (periodo, sfasamento ed esponente) e il suo
comportamento vero e proprio.

E' facile intuire la funzione del carattere #: è il celebre delimitatore per un commento.
Tutto quello che, in una riga viene topo di lui è ignorato e non eseguito e questo è molto utile se vogliamo inserire all'interno del codice indicazioni su cosa stiamo facendo.

La definizione separata dei parametri permette di poterli modificare facilmente: priovate a eseguire lo script
con valri diversi di k, teta e esponente ed osservate come la funzione
cambia.

# Comando per disegnare
plot periodica(x)                                                                                                                                                                                                             
# Pausa per permettere all'utente di visualizzare l'immagine
pause(-1)                                                                                                                                                                                                                    

Infine realiziamo il disegno e ci mettiamo in pausa.
L'ultimo comando serve per dire a gnuplot di non arrestare immediatamente il programma ma di aspettare.
In questo modo l'utente ha modo di vedere il grafico realizzato che altrimenti scomparirebbe subito.
Il comando pause accetta come parametro il numero di secondi da aspettare.
Nel nostro caso il valore -1 sta ad indicare di attendere fino a che non viene premuto il tasto return.

Esistono altri modi per ovviare alla chiusura troppo rapida della finestra: sotto linux è possinile usare l'opzione persist nel seguente modo:

$ gnuplot -persist <file>

In questo modo la finestra rimarrà aperta e si dovrà chiuderla a mano.

Un altro metodo è l'utilizzo del parametro -<code>

$ gnuplot <file> -

In questo modo, dopo aver eseguito i comandi dello script, non torneremo al terminale della shell, ma a quello di gnuplot: verrà infatti avviata una sessione interattiva al termine di quella batch.

Esecuzione

Uno script di gnuplot può essere eseguito in diversi modi.

Il metodo più semplice è quello da terminale:

$ gnuplot <file>

In questo modo si lancia il programma e si passano le istruzioni contenute nel file come i comandi che si digiterebbero durante una sessione interattiva.

Se invece ci si trova già all'interno di una sessione interattiva e vogliamo richiamare uno script definito precedentemente si dovrà utilizzare il comando <code>load

gnuplot> load "<file>"

Ricordateci nuovamente di utilizzare i doppi apici: tutto ciò che non è tra apici viene interpretato come una funzione o una variabile.
Come ogni comando load può a sua volta essere incluso in uno script e questo permette di realizzare script modulari che si chiamano a vicenda ognuno specializzato in una particolare funzione.

Infine un ultimo modo consiste nel rendere direttamente eseguibile il nostro script. Per prima cosa occorre garantire i permessi d'esecuzione al file:

$ chmod +x <file>

Fatto ciò basterà lanciare da terminale lo script come un ordinario file eseguibile

$./<file>

Ovviamente per poter adottare quest'ultima soluzione dovremo assicurarci di aver precisato il percorso dell'eseguibile come prima riga del file, cosi' come abbiamo fatto nel file d'esempio funzione_periodica.plt con la riga

#!/usr/bin/gnuplot