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 ■■■
© Copyright 2024 Paperzz