primi passi nella Grafica Scientifica con GNUplot

www.cm-physmath.net
CM_Portable MATH Notebook Series™
Guida rapida nella grafica scientifica con
GNUplot
claudio magno
Revisione
gen. 2015
Guida rapida nella grafica scientifica con GNUplot –
3
Grafico in R di z = | Γ (η )|, η = x + iy .
II
Guida rapida nella grafica scientifica con GNUplot –
III
Introduzione
Questo è un documento buttato giù, a tempo perso, da un utente occasionale (leggi pure: dilettante) per navigatori
curiosi (seri nella loro curiosità ma non necessariamente ‘navigati’) e per altri utenti occasionali. Certo, c’è di molto
meglio nel Web … Però, sapendo che GNUplot è in evoluzione continua, vale la pena di fare il punto, ogni tanto, sul
suo stato dell’arte e sulla sua migliorata (?) ‘amichevolezza’ … almeno, dal punto di vista dell’utente non-assiduo.
GNUplot è scaricabile da
http://www.gnuplot.info/ .
Le routines contenute qui richiedono dei Ctrl+C ֏ Ctrl+V sul proprio pc, dai quali, poi, la\il praticante impari con
l’esercizio della maggior attenzione ai dettagli possibile: GNUplot fa cose di livello notevolissimo ma non perdona
omissioni o sviste sintattiche, neppure le minori! È un programma molto potente ma scarno, per alcuni, un po’ ostico
ai primi approcci; come s’è detto, richiede attenzione, pazienza, insieme con un minimo di informazione in Analisi
Matematica (†). Dunque, non suscita ‘colpi di fulmine’ travolgenti, soprattutto in chi percepisce il dettaglio fine –
spesso decisivo! – come un ‘sasso nella scarpa’.
Commenti e spiegazioni compaiono qui e là nelle routines e nel testo; però non bastano: l’utente dovrebbe ricorrere, di
norma, alla Guida in linea per chiarirsi (?) la sintassi corretta e i comandi meno ovvi o dubbî. Poi, lo studio di Gnuplot
in Action e\o di altri ‘tutorials’ reperibili dal Web dovrebbero rafforzare gradualmente la confidenza con il programma
e un suo uso più consapevole ed efficace. Insomma, skill to do comes from doing.
Ho proceduto, su Windows 7, scrivendo le routines come files .txt (in Arial), che ho testato con GNUplot 5. I grafici,
nella loro forma definitiva, sono stati copiati e incollati nella finestra di lavoro di Paint.NET e, qui, all’occorrenza,
revisionati (centratura, etc.). Paint.NET ™, un ottimo free-software per la rielaborazione di immagini, è scaricabile da
http://www.dotpdn.com/downloads/pdn.html .
Poi, dopo il loro salvataggio sul desktop come file-immagine provvisori Senza nome.png, i grafici sono stati copiati da
questo e incollati direttamente nel documento-prototipo .docx di MS Office-Word ®. Va ricordato che, su piattaforma
Windows, il funzionamento di Paint.NET richiede che almeno l’ambiente Microsoft .NET Framework 4.5 sia già stato
creato nel sistema operativo Microsoft in uso. Se necessario, lo si può scaricare free da
http://www.microsoft.com/it-it/download/confirmation.aspx?id=42642 .
Buon lavoro e, possibilmente, buon divertimento!
CM
mailme:
[email protected]
____________________
( †)
Per un riferimento di revisione rigoroso ma molto sensibile agli aspetti applicativi, si consulti, e.g.:
PAGANI, C. D. - SALSA, S., Analisi Matematica, 2, ZANICHELLI (RIST. 1998).
Guida rapida nella grafica scientifica con GNUplot –
1
Grafica scientifica con GNUplot
GNUplot è un programma interattivo per il tracciamento di grafici di funzioni, basato su comandi
da tastiera interpretati istantaneamente. Questo documento intende fornire alcune informazioni di
base per un uso prontamente operativo di GNUplot. Si può approfondirne la conoscenza mediante
il comando h (help) interno al programma o consultando lo User Manual (PDF), scaricabile da
http://www.gnuplot.info/.
1.
Avvio
Il programma si apre sulla la finestra di editing, nell’ambiente interattivo di Gnuplot caratterizzato
dal prompt di inizio-riga inviato dal programma:
gnu plot>
Per i comandi, si dovranno usare solo i caratteri minuscoli della tastiera, quindi, si controlli sempre
che il tasto ‘Caps Lock’ risulti disattivato.
2.
Configurazione delle finestre di editing e grafica e altre opzioni importanti
Sia la finestra di editing che la finestra grafica (quest’ultima si apre all’invio del comando plot che
crea e visualizza il grafico) presentano in alto a sinistra un’icona, cliccando la quale, si apre un
menù che include, tra gli altri, il comando Options, con il quale, è possibile copiare il contenuto
della finestra grafica nella memoria volatile (clipboard) di Windows, scegliere la visualizzazione
degli ambienti di editing e grafico e stampare il contenuto della finestra grafica.
Per verificare il tipo di terminale grafico (o finestra grafica) in uso, digitare show term. Le versioni
più recenti di Gnuplot attivano, di default, la finestra grafica in modalità wxt, un terminale multipiattaforma, per sistemi Windows e Linux. Esso, però, risulta poco soddisfacente con tutti i sistemi
operativi Windows®. Conviene, pertanto, modificare il terminale virtuale, digitando set term win
enhanced come primo comando in ogni routine, che consente l’uso di un set esteso di caratteri.
È buona pratica scrivere il listing dei comandi necessari su un file .txt in codifica ANSI prima del
loro caricamento nella finestra di editing e dell’esecuzione (Invio ↵ ).
Inoltre, è possibile salvare un’intera sessione di GNUplot in un file di testo con il comando
File_Save… e, in seguito, rieseguirla richiamandola con il comando File_Open… .
3.
Richiamo delle righe di istruzione già eseguite
Durante una sessione di GNUplot, se si vogliono rieseguire comandi introdotti in una precedente
linea di istruzioni, basta richiamare la linea desiderata premendo i tasti direzionali ↑ , ↓ , ← e →
e, quindi, il tasto Invio ( ↵ ) quando compare tale linea (che può essere modificata prima della sua
esecuzione).
4.
Grafico di una o più funzioni in forma esplicita y = f ( x )
Si tratta di funzioni non-parametriche, i.e., di funzioni in cui la variabile y è esplicitabile vs. la
variabile x e, per ogni valore di x , si ha un solo valore di y . Una codifica possibile è:
set term win enhanced
unset parametric
set grid # griglia alla finestra grafica (opzionale)
set time # data del grafico (opzionale)
set title "Funzioni Goniometriche"
set xlabel "X (radianti)"
set ylabel "Y (valori di funzione)"
set samples 250
Guida rapida nella grafica scientifica con GNUplot –
2
set xrange [-pi:pi]
set yrange [-1.15:1.15]
# Le funzioni cot, sec, csec, sech, coth, csech e le loro inverse non sono incluse nella \
libreria di GNUplot, quindi, vanno definite analiticamente dall’utente
cot(x)=1/tan(x)
set size 0.7,1.0 # scala utente X,Y vs. la scala di default della finestra grafica
plot sin(x),cos(x),tan(x),cot(x)
Si osservi la presenza di due tipi di comandi:
a.
il comando set che permette di assegnare al grafico un insieme di caratteristiche tali da
determinarne il tipo e l’aspetto;
b.
il comando plot che produce l’output del grafico sul terminale prescelto.
In effetti, l’unico comando di set indispensabile è unset parametric, e soltanto per l’eventualità che,
durante la stessa sessione di GNUplot, si sia già assegnato il comando parametric.
Gli stessi grafici sono ottenibili con i comandi minimi
set term win enhanced
cot(x)=1/tan(x)
plot [-pi:pi] [-1.15:1.15] sin(x),cos(x),tan(x),cot(x)
I valori tra le parentesi quadre e separati da ‘:’ sono, rispettivamente, i valori minimo e massimo
per x e per y assegnati dall’utente (se omessi, GNUplot assegna quelli di default).
Il comando set samples 250 fissa a 250 il numero di punti nei quali viene calcolata la funzione (se
omesso, il numero è 100, di default). Aumentando il numero di punti, aumenta l’accuratezza del
grafico della funzione ma può aumentare percepibilmente il tempo necessario per calcolarne i
valori; comunque, l’output dipende anche dalla definizione grafica del terminale-video in uso.
Si può ripetere l’esercizio determinando i grafici delle prime sei Funzioni di Bessel Ordinarie di
rango intero, J 0 (x ) , J 1 (x ) , …, J 5 (x ) . Per questo scopo, si può sfruttare la loro rappresentazione
generale in serie uniformemente convergente di potenze reali,
n +∞
x 
x ֏ J n (x ) ≡  
2
∑
k =0
( − 1)k
x 2k .
2 2k k !(k + n )!
Guida rapida nella grafica scientifica con GNUplot –
3
La convergenza uniforme in R di tale serie consente l’espediente di prenderne una somma ridotta
sufficiente per una grafica accettabile (il resto della serie è rapidamente infinitesimo) purché il
calcolo del denominatore generale non provochi un overflow di memoria RAM. I limiti di calcolo
di GNUplot impongono che sia 2 2k k !(k + n )! ≤ 170! . Una verifica immediata indica che questo
vincolo corrisponde all’insieme discreto {k } = { 0, 1, 2, ..., 82} di valori interi ammissibili.
Quando k ≤ 65 , e.g., la somma ridotta 65 - sima della serie si scrive con la sintassi generale
(x/2)**n*sum[k=0:65](-1)**k*x**(2*k)/(2**(2*k)*k!*(k+n)!)
Da questa, si costruisce l’insieme delle istruzioni minime per le Funzioni di Bessel richieste, i cui
grafici appariranno nella stessa finestra
set term win enhanced
unset parametric
set time
set title "Funzioni di Bessel Ordinarie di 1° tipo di rango intero, J_0(x), ..., J_5(x)"
# in 'title', ogni carattere preceduto dal trattino basso _ viene posto a pedice
set xlabel "X"
set ylabel "Y"
set samples 500
set grid
J0(x)=sum[k=0:65](-1)**k*x**(2*k)/(2**(2*k)*k!**2)
J1(x)=(x/2)*sum[k=0:65](-1)**k*x**(2*k)/(2**(2*k)*k!*(k+1)!)
J2(x)=(x/2)**2*sum[k=0:65](-1)**k*x**(2*k)/(2**(2*k)*k!*(k+2)!)
J3(x)=(x/2)**3*sum[k=0:65](-1)**k*x**(2*k)/(2**(2*k)*k!*(k+3)!)
J4(x)=(x/2)**4*sum[k=0:65](-1)**k*x**(2*k)/(2**(2*k)*k!*(k+4)!)
J5(x)=(x/2)**5*sum[k=0:65](-1)**k*x**(2*k)/(2**(2*k)*k!*(k+5)!)
set size 0.54,1.0
plot [-20:20] [-0.63:1.05] J0(x),J1(x),J2(x),J3(x),J4(x),J5(x)
Dalle precedenti istruzioni, è immediato estrarre quelle relative, e.g., al solo graf ( J 3 ) :
set term win enhanced
unset parametric
set time
Guida rapida nella grafica scientifica con GNUplot –
4
set title "Funzione di Bessel Ordinaria di 1° tipo J_3(x)"
set xlabel "X"
set ylabel "Y"
set samples 500
set grid
plot [-20:20] [-0.63:1.05] (x/2)**3*sum [k=0:65] (-1)**k*x**(2*k)/(2**(2*k)*k!*(k+3)!)
Per i grafici delle J n , il comando set samples 500 fissa a 500 il numero di punti nei quali esse
vengono calcolate: un eccesso di precisione gestito agevolmente da GNUplot.
5.
Grafico di una curva definita implicitamente da f ( x , y ) = 0
Quando l’equazione f (x , y ) = 0 è tale per cui risulta impossibile esplicitare entrambe le variabili
x e y univocamente (poiché, e.g., per lo stesso valore di x , y può assumere più valori, come nel
caso dell’equazione generale di una conica), per tracciare il grafico della curva implicita, si dovrà
ricorrere a una sua rappresentazione parametrica, razionale o polare.
La forma parametrica associata all’equazione implicita f (x , y ) = 0 è: x = f (t ) , y = g (t ) , dove
{x , y } è una coppia cartesiana { 〈 ascissa 〉, 〈 ordinata 〉 } mentre t è il parametro dal quale x e y , a
loro volta, dipendono. Eccone due esempi:
5.1
la Spirale di Archimede
set term win enhanced
set time
set grid
set title "Spirale di Archimede"
set xlabel "X"
set ylabel "Y"
set samples 500
set parametric
set xrange [-30:33]
set yrange [-33:30]
set size 0.54,1.0
plot [0:10*pi] [-30:33] [-33:30] t*cos(t), t*sin(t) # range dell’angolo t di rotazione nel piano X×Y, ranges \
delle funzioni coordinate cartesiane parametriche x(t), y(t) e grafico delle loro co-variazioni vs. t
unset parametric
Guida rapida nella grafica scientifica con GNUplot –
5
Il comando set samples 500 fissa a 500 il numero di campionamenti equidistanti per l’intervallo del
parametro t e quindi fissa a 500 il numero di coppie di valori {x , y } , calcolati e utilizzati per
tracciare il grafico.
Lo stesso grafico (decisamente qualitativo …) è ottenibile con i comandi minimi
set term win enhanced
set parametric
set samples 500
plot [0:10*pi] [-30:33] [-33:30] t*cos(t), t*sin(t)
unset parametric
5.2
la ‘Farfalla’
In questo esempio, diversamente da quello precedente, le assegnazioni dei ranges di t , di x (t ) e
di y (t ) per il tracciamento del grafico appaiono esplicitamente in tre righe di comando distinte:
set term win enhanced
set title "Curva a farfalla"
set time
set grid
set parametric
set trange [-10*pi:10*pi]
set xrange [-7:7]
set yrange [-5.5:7]
set samples 10000
set size 0.6,1.0
r=1.5
x(t)=r*sin(t)*(-2*cos(4*t)-(sin(t/12))**5+exp(cos(t)))
y(t)=r*cos(t)*(-2*cos(4*t)-(sin(t/12))**5+exp(cos(t)))
plot x(t), y(t)
unset parametric
Guida rapida nella grafica scientifica con GNUplot –
6.
6
Grafico di una funzione in forma esplicita z = f ( x , y )
Si tratta di una funzione non-parametrica, i.e., nella quale la variabile z è esplicitata vs. x e y e,
per ciascuna coppia {x , y } , si ha un solo valore di z . Tale funzione rappresenta una superficie 3D:
set term win enhanced
unset parametric
set time
set title "Grafico della superficie cartesiana periodica z=sin(x+y)-cos(x-y)"
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
set samples 60,60
set isosamples 120,120
set xrange [-5:5]
# comando opzionale
set yrange [-5:5]
#
"
set zrange [-2.1:2.1]
#
"
set pm3d depthorder hidden
z(x,y)=sin(x+y)-cos(x-y)
splot z(x,y) with pm3d # with pm3d=opzione 'colori di default'
Il significato dei vari comandi è facilmente interpretabile. Si osserva la presenza di set samples
60,60 che fissa a 60 il numero di punti equidistanti nei quali vengono campionati entrambi gli
intervalli di definizione delle variabili x e y . Questo significa che la funzione z = f (x , y ) viene
calcolata per 3600 coppie di valori {x , y } . Il comando set isosamples 120,120 fissa a 120 il numero
di linee a x = costante e a y = costante , rispettivamente, che generano la ‘mappa’ della
superficie. Il comando che genera un grafico 3D, i.e., una superficie, è splot; gli intervalli per i
valori di x , y , z sono opzionali, se si desidera modificare quelli di default.
In GNUplot, è disponibile, per la versione non-DOS di Windows, il comando composto set pm3d
depthorder hidden3d, che nasconde quelle parti di superficie non in vista vs. il punto di osservazione
e che visualizza il reticolo delle linee generatrici.
Lo stesso grafico, trasparente e senza colorazione, è ottenibile con i comandi minimi
set term win enhanced
Guida rapida nella grafica scientifica con GNUplot –
7
set samples 60,60
set isosamples 120,120
splot [-5:5] [-5:5] [-2.1:2.1] sin(x+y)-cos(x-y)
L’effetto sulla resa grafica del comando pm3d depthorder hidden3d può essere apprezzato meglio
dall’esempio seguente, di confronto tra superfici toriche concatenate:
set term win enhanced
set time
set multiplot # attivazione della visualizzazione simultanea di più grafici
set title "Superfici toriche concatenate in assenza dei comandi 'depthorder' e 'hidden3d'"
set parametric
set urange [0:2*pi]
set vrange [0:2*pi]
set isosamples 80,48
set origin -0.01,0.00 # coordinate x,y dell'inizio del 1.o grafico (a sinistra)
set size 0.55,0.9
set xtics 0.5 # opzione tacche di misura sull’asse X e loro passo
set ytics 0.5 #
"
"
"
"
Y
"
set ztics 0.5 #
"
"
"
"
Z
"
set border 0
set view 65,40,1.25,0.85
unset colorbox # nasconde la scala cromatica di quota (z) del 1.o grafico
set pm3d scansbackward
splot cos(u)+0.5*cos(u)*cos(v), sin(u)+0.5*sin(u)*cos(v), 0.5*sin(v) with pm3d, \
1+cos(u)+0.5*cos(u)*cos(v), 0.5*sin(v), sin(u)+0.5*sin(u)*cos(v) with pm3d
set title "Superfici toriche concatenate in presenza dei comandi 'depthorder' e 'hidden3d'"
set origin 0.43,0.00 # coordinate x,y dell'inizio del 2.o grafico
set size 0.55,0.9
set colorbox vertical user origin 0.93,0.10 size 0.02,0.50 # user, NON using (=u)!
set format cb "%.1f"
set pm3d depthorder hidden3d
splot cos(u)+0.5*cos(u)*cos(v), sin(u)+0.5*sin(u)*cos(v), 0.5*sin(v) with pm3d, \
1+cos(u)+0.5*cos(u)*cos(v), 0.5*sin(v), sin(u)+0.5*sin(u)*cos(v) with pm3d
unset multiplot # ripristino della visualizzazione grafica singola
unset parametric
Guida rapida nella grafica scientifica con GNUplot –
7.
8
Grafico di una superficie definita implicitamente da f ( x , y , z ) = 0
Il grafico 3D di una superficie definita implicitamente da f (x , y , z ) = 0 ha le coordinate espresse
parametricamente da x = f (u , v ) , y = g (u , v ) , z = h (u , v ) .
Ad esempio, una superficie sferica di raggio r = 5 può essere rappresentata con la routine
set term win enhanced
set time
set title "Superficie sferica di raggio r=5 in coordinate sferiche"
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
set samples 50,50
set isosamples 40,40
set parametric
set urange [0:pi]
set vrange [0:2*pi]
r=5. # i.e., f(u,v)=g(u,v)=h(u,v)=r (= costante, in formato reale)
set xrange [-5.5:5.5]
set yrange [-5.5:5.5]
set zrange [-5.5:5.5]
set view 75,30,1,1
set pm3d depthorder hidden3d
set size 0.38,1.0
splot r*sin(u)*cos(v), r*sin(u)*sin(v), r*cos(u) with pm3d
unset parametric
Il grafico della superficie sferica unitaria, trasparente e senza colore, risulta dai comandi minimi
set term win enhanced
set parametric
set samples 50,50
set isosamples 40,40
set size 0.37,1.0
set view 75,30,1,1
Guida rapida nella grafica scientifica con GNUplot –
9
splot [0:pi] [0:2*pi] [-1.0:1.0] [-1.0:1.0] [-1.0:1.0] sin(u)*cos(v), sin(u)*sin(v), cos(u)
unset parametric
È importante notare come, qui, i parametri siano due, u e v , e come il comando set isosamples
40,40 definisca il reticolo sulla superficie con 40 linee a u = costante e 40 linee a v = costante .
Più in generale, se f (u , v ) ≡ g (u , v ) ≡ h (u , v ) definiscono una funzione a simmetria sferica vs.
le coordinate parametriche u e v , con u ≡ θ ∈ [ 0, π ] e v ≡ ϕ ∈ [ 0, 2 π ) , il vettore-posizione
(vs. l’origine) generalizzato r corrispondente è esprimibile – sempre – attraverso le sue proiezioni
(ortogonali) sugli assi cartesiani X , Y , Z , nella forma
r ≡ r (u , v ) = f (u , v ) sin u cos v xˆ + f (u , v ) sin u sin v ˆy + f (u , v ) cos u ˆz .
Un esempio significativo di funzioni a struttura sferica, è dato dalle Funzioni Armoniche Sferiche
reali Z l ,m (θ , ϕ ) . Il grafico di f (u , v ) ֏ Z 2, 0 (θ , ϕ ) può essere ottenuto con le istruzioni seguenti:
set term win enhanced
set time
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
set title "Armonica Sferica reale quadrupolare orto-normalizzata Z_2_,_0=f(u,v)"
set parametric
set isosample 100,100
set xyplane at 0
set size 0.5,1.
set view 75,30
set pm3d depthorder hidden3d
x(u,v)=sin(u)*cos(v)
y(u,v)=sin(u)*sin(v)
z(u,v)=cos(u)
f(u,v)=sqrt(5.0/(16*pi))*(2*z(u,v)**2-x(u,v)**2-y(u,v)**2)
splot [0:pi] [0:2*pi] f(u,v)*x(u,v), f(u,v)*y(u,v), f(u,v)*z(u,v) with pm3d # range di u, range di v, etc.
unset parametric
Come esempio ulteriore, il grafico della superficie corrispondente all’Armonica Sferica reale orto-
Guida rapida nella grafica scientifica con GNUplot –
10
normalizzata Z 4 , −3 (θ , ϕ ) (esadecupolare) è ottenibile con la routine
set term win enhanced
set time
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
set title "Armonica Sferica reale
le esadecupolare orto
orto-normalizzata Z_4_,_-_3=f(u,v)"
set parametric
set urange [0:pi]
set vrange [0:2*pi]
set isosample 200,200
set xyplane at 0
set size 0.51,1.0
set pm3d depthorder hidden3d
x(u,v)=sin(u)*cos(v)
y(u,v)=sin(u)*sin(v)
z(u,v)=cos(u)
f(u,v)=sqrt(315./(32*pi))*sin(u)**3*cos(u)*sin(3*v)
qrt(315./(32*pi))*sin(u)**3*cos(u)*sin(3*v)
splot f(u,v)*x(u,v), f(u,v)*y(u,v), f(u,v)*z(u,v) with pm3d
Ne risulta il grafico 3D seguente:
____________________
Analogamente, se f (u , v ) è una funzione a simmetria cilindrica, i.e., tale che u ≡ ϕ ∈ [ 0, 2 π ) e
z = z (u , v ) , una funzione nota, si ha la rappresentazione cartesiana parametrica della superficie
r ≡ r (u , v ) = f (u , v ) cos u xˆ + f (u , v ) sin u ˆy + z (u , v ) ˆz .
Esempi sono forniti
dalla superficie ‘Catenoide’,,
set term win enhanced
set title "Superficie Catenoide"
Guida rapida nella grafica scientifica con GNUplot –
set time
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
set xyplane at 0
set samples 52,52
set isosamples 60,60
set size 0.8,1.0
set parametric
set urange [0:2*pi] # range angolare di rotazione nel piano X×Y
set vrange [-6:6]
# range della quota variabile z
f(u,v)=cosh(v)
x(u,v)=f(u,v)*cos(u)
y(u,v)=f(u,v)*sin(u)
z(u,v)=v
set pm3d depthorder hidden3d
set view 70,30,1,1
splot x(u,v), y(u,v), z(u,v) with pm3d
unset parametric
e dalla superficie ‘Elicoide’, qui mostrata, di avvolgimento f sia lineare che iperbolico:
set term win enhanced
set title "Superficie Elicoide ad avvolgimento lineare"
set time
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
set xyplane at 0
set samples 60,60
set isosamples 80,80
set size 0.7,1.0
set pm3d depthorder hidden3d
set view 65,30,1,1
set parametric
set urange [0:4*pi] # range angolare di rotazione nel piano X×Y
set vrange [-10:10] # range della quota variabile z
11
Guida rapida nella grafica scientifica con GNUplot –
f(u,v)=v # funzione di avvolgimento (winding function)
x(u,v)=f(u,v)*cos(u)
y(u,v)=f(u,v)*sin(u)
z(u,v)=u
splot x(u,v), y(u,v), z(u,v) with pm3d
unset parametric
Per l’Elicoide ad avvolgimento iperbolico
iperbolico, mostrato qui sopra, una codifica sufficiente è
12
Guida rapida nella grafica scientifica con GNUplot –
13
set term win enhanced
set title "Superficie Elicoide ad avvolgimento iperbolico"
set time
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
set xyplane at 0
set samples 60,60
set isosamples 200,200
set size 0.7,1.0
set pm3d depthorder hidden3d
set view 60,30,1,1
set parametric
set urange [0:4*pi]
set vrange [-10:10]
f(u,v)=sinh(v)
x(u,v)=f(u,v)*cos(u)
y(u,v)=f(u,v)*sin(u)
z(u,v)=u
splot x(u,v), y(u,v), z(u,v) with pm3d
unset parametric
____________________
La dipendenza delle tre coordinate rettangolari da uno solo dei parametri predefiniti di superficie,
e.g., v ( ⇒ (x ; y ; z ) ≡ ( f (v ); g (v ); h (v )) ), riduce il grafico a una linea nello spazio X ×Y × Z ,
ovviamente:
set term win enhanced
set time
set title "Wiggle"
set samples 300
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
set parametric
set vrange [0:2*pi]
splot cos(3*v), sin(6*v), cos(9*v) lw 1
unset parametric
# lw 1 assegna lo spessore della linea
Guida rapida nella grafica scientifica con GNUplot –
14
Un confronto grafico simultaneo tra più linee parametriche in X ×Y × Z di spessore diverso (il
colore diverso è automatico) può essere codificato come nell’esempio (ovvio) seguente:
set term win enhanced
set time
set title "Wiggles"
set samples 300
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
set parametric
set vrange [0:2*pi]
h=0.5
k=sqrt(3)/3
splot cos(v), sin(v)+k, cos(3*v)/3 lw 3, \
cos(v)+h, sin(v)-k/2, cos(3*v)/3 lw 5, \
cos(v)-h, sin(v)-k/2, cos(3*v)/3 lw 8
unset parametric
Guida rapida nella grafica scientifica con GNUplot –
8.
15
Introduzione di costanti complesse nelle espressioni
Le costanti complesse vengono espresse nella sintassi { 〈 real 〉 , 〈 imag 〉 }, dove 〈 real 〉 e 〈 imag 〉 sono
costanti reali che rappresentano, rispettivamente, la parte reale e la parte immaginaria del numero
complesso. Così, {0,1} rappresenta i , l’unità immaginaria (o j , nei testi di Ingegneria e di Teoria
dei Sistemi), mentre {0.6,-2.2625} rappresenta il numero complesso 3/5 − i (21/ 8) .
La possibilità di usare costanti complesse e l’unità immaginaria, unitamente alle funzioni abs, arg,
imag, real, rende possibile tracciare i diagrammi di Bode e di Nyquist della risposta in frequenza di
un dato sistema del quale sia nota la funzione di trasferimento. Ad esempio, per il sistema avente
la funzione di trasferimento
H (s ) =
3
5 + 2s
⇒ H (iω ) =
3
,
5 + 2iω
il diagramma di Bode del guadagno espresso in decibel per valori della pulsazione compresi tra
0.1 e 1000 [rad/s] (la pulsazione ω corrisponde all’ascissa x ) come segue:
set term win enhanced
set time
unset parametric
set grid
set title "Diagramma di Bode nel dominio delle frequenze"
set xlabel 'pulsazione (in rad/s)'
set ylabel 'guadagno (in db)'
set samples 1000
set xrange [0.1:1000]
set logscale x
plot 20*log10(abs(3/(5+2*{0,1}*x))) # log10=logaritmo in base 10, abs=valore assoluto
unset logscale x
Guida rapida nella grafica scientifica con GNUplot –
9.
16
Interpolazione di dati sperimentali con il comando fit e l’opzione smooth
Siano stati raccolti dei dati, con i quali, a ogni valore della grandezza x (ascissa) è associato un
valore della grandezza y (ordinata) con una deviazione standard z (un indicatore della qualità dei
dati {x , y } , espresso dal peso w di ciascuno come z ≡ 1/w 1 / 2 ). In un sistema di assi cartesiani, si
debbano riportare le coppie {x , y } di dati sperimentali e, quindi, interpolare i punti mediante una
funzione nota y = f (x ) , di natura prestabilita. Nell’esempio seguente, è usato il comando fit:
9.1
salvare le terne { x , y , z } in un file-dati di testo, e.g., .txt (o un qualsiasi altro editor), purché
in codifica ANSI. Nel file, le righe di commento devono incominciare con il carattere # ; i
dati devono essere incolonnati, e.g., con il tabulatore della tastiera; il file dataset1.txt è stato
posto nella cartella generale datafolder, il cui directory viene individuato, dalla finestra di
editing, con il tasto ChDir, presente sulla barra delle funzioni.
Nelle terne {x , y , z } , l’elemento z può costituire la deviazione standard delle coppie {x , y } .
Più in generale, se si vuole imporre il passaggio della funzione interpolante per certi punti, si
assegna ad essi un valore z di deviazione minore di quello degli altri punti;
9.2
assegnare la funzione di interpolazione parametrica dei dati sperimentali, e.g., la funzione
cubica generale, f (x ) := a + bx + cx 2 + dx 3 ;
9.3
avviare GNUplot e individuare (tasto ChDir) il directory della cartella datafolder. I comandi
che assegnano la funzione interpolante, ne calcolano i coefficienti parametrici a , b , c , d ,
ottimizzati vs. i dati sperimentali, e tracciano sia i dati sia la curva interpolante:
set term win enhanced
set time
set grid
set title "Fit di interpolazione cubica"
unset parametric
set xlabel "X"
set ylabel "Y"
f(x)=a+b*x+c*x**2+d*x**3
fit f(x) 'dataset1.txt' u 1:2:3 via a,b,c,d # u=using
plot 'dataset1.txt', f(x) # posizione dei dati interpolati con f(x), grafico di f(x)
Guida rapida nella grafica scientifica con GNUplot –
17
Se si desidera conoscere anche il valore che la funzione interpolante f assume per un certo valore
di x (e.g., x = 4.7 ), basta far seguire immediatamente all’esecuzione grafica il comando
print f(4.7)
# comando per l’uso di GNUplot come calcolatrice
Nel caso in cui non si desideri interpolare con un tipo specifico di funzione è disponibile l’opzione
smooth del comando plot. Tale opzione è applicabile a cinque metodi d’interpolazione: acsplines,
bezier, csplines, sbezier, unique. Ancora, le terne { x , y , z } incolonnate dei dati devono essere
salvate in un file di testo, e.g., dataset2.txt (in codifica ANSI), pure contenuto in datafolder e
analogo a dataset1.txt. Ora, però, i dati z della 3.a colonna devono costituire – obbligatoriamente
– gli scarti (errori) assegnati alle misure specifiche. Così, e.g. (ricordarsi del tasto ChDir),
set term win enhanced
set time
set grid
set title "Fit di interpolazione acsplines"
unset parametric
set xlabel "X"
set ylabel "Y"
plot 'dataset2.txt' u 1:2:3 smooth acsplines, 'dataset2.txt'
# grafico della curva y='acsplines', posizione dei dati interpolati con 'acsplines'
Il risultato è rappresentato dal grafico seguente:
Quanto più viene aumentato il valore dello scarto z di un dato tanto più la curva interpolante si
avvicina al punto, tendendo, però, ad assumere, un profilo globale maggiormente irregolare.
Guida rapida nella grafica scientifica con GNUplot –
18
10. Visualizzazione degli errori nei dati sperimentali
Una rappresentazione grafica elementare 2D degli errori tabulati di un insieme di dati richiede che
GNUplot legga un certo dataset3.txt (in codifica ANSI), contenente da 3 a 6 colonne, ancora nella
cartella datafolder. Poiché le colonne 1.a e 2.a sono riservate alle coppie {x,y} di valori associati
più attendibili (misurati o medî) dei dati, ogni colonna successiva conterrà gli errori (scarti)
corrispondenti, ∆ x o\e ∆ y . Ne risulteranno, così, le configurazioni fondamentali seguenti:
3 colonne:
3 colonne:
4 colonne:
u 1:2:3 with xerrorbars
u 1:2:3:4 with xyerrorbars
x, y, ∆ x con x-errori simmetrici (col. 3),
x, y, ∆ y con y-errori simmetrici (col. 3),
x, y, ∆ x , ∆ y , con x,y-errori simmetrici (col. 3 e 4),
4 colonne:
u 1:2:3:4 with xerrorbars
x, y, ∆ x − , ∆ x + ,
4 colonne:
6 colonne:
u 1:2:3 with yerrorbars
u 1:2:3:4 with yerrorbars
u 1:2:3:4:5:6 with xyerrorbars
−
+
−
+
x, y, ∆ y , ∆ y ,
con x-errori distinti (col. 3 e 4),
con y-errori distinti (col. 3 e 4),
x, y, ∆ x , ∆ x , ∆ y − , ∆ y + ,
con x,y-errori distinti
(col. 3, 4, 5 e 6).
Esempî di comandi grafici:
•
plot 'dataset3.txt' u 1:2:3 with xerrorbars
•
plot 'dataset3.txt' u 1:2:3 with yerrorbars
•
plot 'dataset3.txt' u 1:2:($2+$3):($2-$4) with yerrorbars
i dati della 3.a colonna sono considerati come scarti ∆ x ;
i dati della 3.a colonna sono considerati come scarti ∆ y ;
i dati della 3.a e della 4.a colonna – indicati collettivamente e sequenzialmente come ($3) e
($4) – sono presi come gli scarti distinti, superiore e inferiore, per ciascun dato-y ($2);
•
plot 'dataset3.txt' u 1:2:($1+$3):($1-$3):($2+$4):($2-$5) with xyerrorbars
i dati della 3.a e della 4.a colonna sono presi come ± ∆ x mentre le colonne 4.a e 5.a
forniscono, rispettivamente, gli scarti distinti, superiore e inferiore, di ciascun dato-y ($2).
Chiaramente, si possono usare funzioni e combinazioni arbitrarie a piacere:
plot 'dataset3.txt' u 1:2:($2*0.07) with yerrorbars
rappresenta i dati con un errore su ciascun dato-y ($2) del 7% ;
plot 'dataset3.txt' u 1:2:($1+4):($1-4):($2+$3):($2-$3) with xyerrorbars
genera lo scarto simmetrico costante ± 4 su ciascun dato-x ($1) e lo scarto simmetrico di
ciascun dato-y, ($2), con il dato corrispondente della 3.a colonna, ($3).
Si può generare la conversione alla scala logaritmica vs. y del grafico precedente, aggiungendo ad
esso un raccordo lineare dei punti sperimentali (si generi tale grafico, ricordarsi del tasto ChDir):
set term win enhanced
set time
set title "Dati in scala semi-logaritmica vs. y"
set logscale y
set bars 3.0 # assegna la dimensione dei 'tics' (trattini terminali) delle barre
plot 'dataset3.txt' u 1:2:($1+4):($1-4):($2+$3):($2-$3) with xyerrorbars, \
'dataset3.txt' u 1:2 notitle with lines # with lines=con raccordo rettilineo dei dati
unset bars
unset logscale y
Guida rapida nella grafica scientifica con GNUplot –
19
Come conclusione, ci si può sbizzarrire assemblando alcuni dei vari comandi presentati fin qui. Il
loro significato – al livello elementare di questo documento, almeno – non dovrebbe richiedere
chiarimenti. Sarà solo necessario, da parte di chi desideri testarli, generare da sé dei file txt di dati
arbitrari purché incolonnati e individuati con il tasto ChDir:
set term win enhanced
set time
unset parametric
set title "Fit di interpolazione polinomiale di 6° grado, \n c/barre d'errore e 'tics'"
# \n = a capo in un 'title'
set grid
set xlabel "X"
set ylabel "Y"
set bars 3.0 # dimensione dei 'tics' (trattini terminali) delle barre
f(x)=a+b*x+c*x**2+d*x**3+e*x**4+f*x**5+g*x**6
fit f(x) 'dataset3.txt' via a,b,c,d,e,f,g
plot [-0.5:20.5] [-10:110] 'dataset3.txt' \
u 1:2:($2-$3)*0.13 with yerrorbars, f(x)
unset bars
Fit di interpolazione polinomiale di 6° grado,
c/barre d'errore e 'tics'
'dataset3.txt'
using 1:2:($2-$3)*0.13
f(x)
100
80
Y
60
40
20
0
0
5
10
15
20
X
mer lug 02 10:32:50 2014
Il fit polinomiale di 6° grado non dà risultati soddisfacenti ai valori medio-inferiori delle ascisse
dei dati analizzati. È opportuna la scelta di una funzione interpolante diversa.
■
____________________
Insieme con la guida in linea di GNUplot, possono risultare utili il ‘tutorial’ Gnuplot in Action.pdf, free-scaricabile dal
Web, i documenti didattici del Prof. Carlo Meneghini, Univ. degli Studi Roma-3, Tor Vergata, anch’essi reperibili dal
Web, e la pagina http://www.csse.uwa.edu.au/programming/gnuplot_demos/, Un. of West Alabama. Livingston, AL.
■■■
Guida rapida nella grafica scientifica con GNUplot –
20
prove, esempi, applicazioni
Guida rapida nella grafica scientifica con GNUplot –
Polinomi e Funzioni Associate di Legendre
Polinomio orto-normalizzato di Legendre di grado n
set term win enhanced
set time
set title "Polinomi orto-normalizzati di Legendre P_6(x), P_11(x)"
set xlabel "X"
set ylabel "Y"
set samples 250
set grid
set size 0.54,1.0
# Espressione generale:
#
# P_n(x)=2.**-n*sum[k=0:floor(n/2)](-1)**k*(2*(n-k))!/(k!*(n-k)!*(n-2*k)!)*x**(n-2*k)
#
# il valore di n deve essere definito per ogni P_n(x)
#
#Esempio: grafici di P_6(x) e di P_11(x):
#
h=6 # grado di P_h(x) (utente)
P_6(x)=2.**-h*sum [k=0:floor(h/2)](-1)**k*(2*(h-k))!*x**(h-2*k)/(k!*(h-k)!*(h-2*k)!)
r=11 # grado di P_r(x) (utente)
P_11(x)=2.**-r*sum[k=0:floor(r/2)](-1)**k*(2*(r-k))!/(k!*(r-k)!*(r-2*k)!) *x**(r-2*k)
plot [-1.05:1.05] [-1.05:1.05] P_6(x),P_11(x)
____________________
Funzione Associata di Legendre di ordine l e rango m
set term win enhanced
set time
set title "Funzione Associata di Legendre P_9_,_5(x)"
set xlabel "X"
set ylabel "Y"
set samples 250
set grid
set size 0.54,1.0
set xrange [-25:25]
# range-x della finestra grafica (utente)
# set yrange [-yy:YY] # range-y della finestra grafica (utente)
# Espressione generale:
#
# P_l_m(x)=(1-x**2)**(m/2)*2**-l*sum[k=0:floor((l-m)/2)] \
(-1)**k*(2*(l-k))!*x**(l-m-2*k)/(k!*(l-k)!*(l-m-2*k)!)
#
# i valori ammissibili di l e di m devono essere definiti per ogni P_l_m(x). \
L’indice k di somma varia sotto le condizioni simultanee: 0≤m≤l, max{k}=floor((l-m)/2)]
#
#Esempio: grafico di P_9_5(x)
#
l=9
# ordine di P_l_m(x) (utente)
m=5 # rango di P_l_m(x) (utente)
P_9_5(x)=(1-x**2)**(m/2)*2**-l* \
sum[k=0:floor((l-m)/2)](-1)**k*(2*(l-k))!/(k!*(l-k)!*(l-m-2*k)!)*x**(l-m-2*k)
plot P_9_5(x)
21
Guida rapida nella grafica scientifica con GNUplot –
22
Fattore polare dell’Armonica Sferica orto-normalizzata di ordine l e rango m
Il grafico del fattore polare Θ (θ ) dell’Armonica Sferica orto-normalizzata Y l , m (θ , ϕ ) risulta, qualitativamente,
identico o simmetrico vs. l’asse X a quello della Funzione Associata di Legendre Pl , m (u ) , dello stesso ordine l e
rango m . Infatti, Y l , m (θ , ϕ ) e Pl , m (u ) , con u ≡ cos θ , sono proporzionali tra loro nella convenzione di fase CSW
(v., dell’autore: Metodi Matematici della Fisica - Note e applicazioni sparse). La codifica è riportata, qui,
per completezza … a beneficio solidale di qualche artigiano solitario in Fisica Quantistica.
set term win enhanced
set time
set title "Fattore polare dell’Armonica Sferica orto-normalizzata (7,2)-sima"
set xlabel "X"
set ylabel "Y"
set samples 250
set grid
set size 0.54,1.0
set xrange [-25.:25.]
# range-x della finestra grafica (utente)
# set yrange [yy.:YY.] # range-y della finestra grafica (utente)
#
# Espressione generale:
# pf_l_m(x)=(-1)**m*2**-(l+1)*((2*l+1)*(l-m)!/(pi*(l+m)!))**(1/2)*(1-x**2)**(m/2)* \
sum[k=0:floor((l-m)/2)](-1)**k*(2*(l-k))!/(k!*(l-k)!*(l-m-2*k)!)*x**(l-m-2*k)
# i valori ammissibili di l e di m devono essere definiti per ogni pf_l_m(x). \
L’indice k di somma varia sotto le condizioni simultanee 0≤m≤l, max{k}=floor((l-m)/2)]
#
#Esempio: grafico di pf_7_2(x)
l=7
# ordine di pf_l_m(x) (utente)
m=2 # rango di pf_l_m(x) (utente)
pf_7_2(x)=(-1)**m*2**-(l+1)*((2*l+1)*(l-m)!/(pi*(l+m)!))**(1/2)*(1-x**2)**(m/2)* \
sum[k=0:floor((l-m)/2)](-1)**k*(2*(l-k))!/(k!*(l-k)!*(l-m-2*k)!)*x**(l-m-2*k)
plot pf_7_2(x)
____________________
Spettro di Decadimento β
set term win enhanced
set time
unset parametric
set title "Spettro di Decadimento Beta, f(x)=(x**2)*(sqrt(1.8125)-sqrt((x**2)+0.25))"
set xlabel "x=impulso dell'elettrone"
set ylabel "y=numero di elettroni"
set xrange [0:1.25]
set grid
set size 0.54,1.0
f(x)=(x**2)*(sqrt(1.8125)-sqrt((x**2)+0.25))
plot f(x)
____________________
Grafico della Funzione Beta di Euler, z=B(x,y), con x,y>0
set term win enhanced
set time
set title "Grafico della funzione Beta di Euler, z=B(x,y)"
unset parametric
Guida rapida nella grafica scientifica con GNUplot –
23
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
set xtics 1.0
set ytics 1.0
set ztics 1.0
set isosamples 1000
unset colorbox
set view 35,35
B(x,y)=gamma(x)*gamma(y)/gamma(x+y)
splot [0.0001:6.0] [0.0001:6.0] [0.0001:10.0] B(x,y) with pm3d
■■■