Skip to content

GNUplot

mercoledì 22 ottobre , 2008

Cercate un’alternativa all’infido Excel? Stanchi di OpenOffice Calc?

Per quelli che come me hanno da lavorare spesso con analisi dati, fit, valutazione di parametri, errori e chissà che altro, uno strumento davvero indispensabile è il fantasmagorico GNUplot!!

Da dove cominciare? Eh si è un vero problema: Gnuplot fa davvero una quantità notevole di cose, e non ho intenzione di scrivere una guida, soprattutto perchè non penso di essere sufficientemente padrone dello strumento.

Piuttosto vi presento una situazione pratica che dovrebbe essere di per sè sufficiente a far intravedere uno schizzo di questo piccolo capolavoro.

Premetto che sono uno studente di Fisica del secondo anno, e quelli che seguono sono dati presi realmente in laboratorio (sono semplicissime verifiche sperimentali sulle proprietà della resistività).

Ammettiamo ad esempio di ottenere una tabella di dati di questo tipo

0.450    0.459    0.0014    0.0006
0.435    0.444    0.0014    0.0006
0.410    0.418    0.0013    0.0006
0.396    0.403    0.0013    0.0006
0.380    0.387    0.0012    0.0006
0.365    0.371    0.0012    0.0006
0.351    0.356    0.0012    0.0006
0.335    0.340    0.0011    0.0006
0.299    0.303    0.0010    0.0006
0.285    0.289    0.0010    0.0006
0.271    0.274    0.0010    0.0006
0.254    0.257    0.0009    0.0006
0.239    0.242    0.0009    0.0006
0.225    0.227    0.0009    0.0006
0.209    0.211    0.0008    0.0006
0.195    0.197    0.0008    0.0006
0.149    0.150    0.0007    0.0006
0.135    0.136    0.0007    0.0006
0.119    0.120    0.0007    0.0006
0.104    0.105    0.0007    0.0006
0.093    0.094    0.0006    0.0006
0.081    0.081    0.0006    0.0006
0.066    0.066    0.0006    0.0006
0.050    0.050    0.0006    0.0006
0.040    0.040    0.0006    0.0006
0.030    0.030    0.0006    0.0006
0.021    0.021    0.0006    0.0006

Dove le prime due colonne sono rispettivamente la corrente (Ampère) e la tensione (Volt); le altre due sono gli errori strumentali sulle misure x e y.

Da terminale cominciamo lanciando gnuplot; a questo punto viene lanciato un nuovo ambiente, ed otterremo qualcosa come

G N U P L O T
Version 4.2 patchlevel 2
last modified 31 Aug 2007
System: Linux 2.6.24-21-generic

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&gt;

 

Terminal type set to 'wxt'
gnuplot>

da qui possiamo lavorare su un grafico. Mettiamo i nostri dati in un file che chiamiamo dati.dat (suppongo che vi troverete a lavorare nella cartella in cui si trova il file);

ATTENZIONE: i dati devono essere ordinati in colonne, per convenzione la prima è quella delle x e la seconda quella delle y, inoltre gnuplot legge i dati in notazione anglosassone (il punto al posto della virgola)

Da questo ambiente possiamo ancora usare i comandi standard del terminale, ma con alcune accortezze (ad es: cd “nomecartella”, con le virgolette), pertanto con un po’ di buona volontà si possono scrivere anche veri e propri script.

Ma torniamo a noi..vogliamo ad esempio mettere in grafico queste misure:

gnuplot> set title "resistenza"

il comando set permette di configurare quasi tutto, vi faremo presto l’abitudine; in questo caso, come è facile intuire, abbiamo dato un titolo al grafico.

Dobbiamo ora definire gli intervalli in cui disegnare il nostro grafico (lo scaling sarà poi automatico); diamo quindi

gnuplot> set xrange [0:0.5]
gnuplot> set yrange [0:0.5]

a questo punto vogliamo vedere cosa abbiamo per le mani, dunque diamo un
gnuplot> plot "datitemp.dat" using 1:2 tit "resistenza"

piuttosto intuitivo anche qui direi. Notare che quel tit è abbreviazione per title; il programma le riconosce purchè non sia ambigue. Questo è il nome che verrà visualizzato in legenda. Ed ecco il risultato

Vediamo di fare meglio! Ad esempio vorremmo mettere i nostri errori..

gnuplot> replot "datitemp.dat" using 1:2:3 with xerrorbars tit "errore x"
gnuplot> replot "datitemp.dat" using 1:2:4 with yerrorbars tit "errore y"

Per chi non lo avesse ancora capito quell’using serve a definire quali colonne usare nel plotting; abbiamo usato replot in modo da “aggiungere” nuove caratteristiche al precedente plot senza sostituirle.

Ma ovviamente non ci è ancora sufficiente. Tipicamente vorremmo studiare l’andamento di questi dati facendo delle supposizioni sulla forma della legge che governa il fenomeno osservato. In questo caso siamo fortunati, i dati sembrano chiaramente indicare un andamento del tipo y=a+b*x, noi siamo esattamente interessati ad a e b

Diamo

gnuplot> f(x)=a+b*x
gnuplot> fit f(x) "datitemp.dat" via a,b

gnuplot troverà i valori dei parametri con il metodo dei minimi quadrati (maximum likelihood)

Final set of parameters            Asymptotic Standard Error
=======================            ==========================

a               = -0.00147977      +/- 0.000281     (18.99%)
b               = 1.0207           +/- 0.001083     (0.1061%)

Per la cronaca il nostro b è proprio la resistenza. Vogliamo vedere come si adagia la nostra retta sui dati?

gnuplot> replot f(x) tit "fit lineare"

non male no? Sicuri? Andiamo a dare un’occhiata al grafico dei residui..

Cosa sono costoro?

Il concetto è piuttosto banale ma non sto a dilungarmi; in sostanza si tratta delle differenze che, per ogni valore x misurato, vi sono fra la retta teorica e i dati sperimentali. Lascio la comprensione di ciò che segue al lettore come esercizio

0.45    0.0011630515    0.0008    0.0011
0.44    0.0014736087    0.0008    0.0011
0.41    0.0009912041    0.0008    0.0011
0.4    0.0002810575    0.0008    0.0011
0.38    0.0006123185    0.0008    0.0011
0.37    -0.0000771243    0.0008    0.0011
0.35    -0.0007872709    0.0008    0.0011
0.34    -0.0004560098    0.0008    0.0011
0.3    -0.0007106725    0.0008    0.0011
0.29    -0.0004208191    0.0008    0.0011
0.27    -0.0011309657    0.0008    0.0011
0.25    -0.0007790008    0.0008    0.0011
0.24    -0.0004684436    0.0008    0.0011
0.23    -0.0011785902    0.0008    0.0011
0.21    -0.0008473292    0.0008    0.0011
0.2    -0.0005574758    0.0008    0.0011
0.15    -0.0006051003    0.0008    0.0011
0.14    -0.0003152469    0.0008    0.0011
0.12    0.0000160142    0.0008    0.0011
0.1    0.0003265714    0.0008    0.0011
0.09    0.0005543133    0.0008    0.0011
0.08    -0.0001972409    0.0008    0.0011
0.07    0.0001133163    0.0008    0.0011
0.05    0.0004445774    0.0008    0.0011
0.04    0.0006516155    0.0008    0.0011
0.03    0.0008586537    0.0008    0.0011
0.02    0.0010449880    0.0008    0.0011

la prima colonna sono le nostre x di prima, nella seconda ci sono i residui, la terza è l’errore a posteriori, mentre l’ultima è l’errore su b

gnuplot> set title "grafico dei residui"
gnuplot> set xrange [0:0.5]
gnuplot> set xlabel "corrente (A)"
gnuplot> set ylabel "tensione (V)"
gnuplot> set zeroaxis
gnuplot> plot "dati.txt" using 1:2:4 with yerrorbars tit "errore strumentale" \
> , "dati.txt" using 1:2:3  with yerrorbars tit "errore a posteriori"

Oibò!!!!! Non sono affatto disposti in maniera casuale!!

Cosa vuol dire? In parte osserviamo che evidentemente ci sono dei problemi strumentali, forse la digitalizzazione delle letture di corrente e tensione?

Ma soprattutto c’è un fatto fisico che interviene man mano che aumenta la corrente lungo il filo: la resistività è sì una caratteristica del materiale ma varia con la temperatura, e proprio la resistenza offerta dal filo alla corrente causa effetti di dispersione termica che alterano questa proprietà. In pratica l’ipotesi del fit y=a+b*x è ottimistica, vale solo per piccole correnti, poi il coefficiente b cambia in maniera circa proporzionale alla temperatura del filo.

Tornando a gnuplot: esistono una infinità di altre opzioni per le quali rimando al sito ufficiale

Tengo a ricordare che potete cambiare il tipo di output con

set terminal jpeg,wxt,x11,postscript...

e reindirizzare l’output con

set output file_destinazione

inoltre potete dichiarare variabili (nome=valore) eseguire calcoli, definire funzioni (ricordate f(x) nelll’esempio?), e cambiare veste grafica a piacimento, sbizzarrivetevi con i vari set e poi date replot per vedere cosa cambia.

Per concludere potete inoltre salvare le impostazioni (i vostri set) semplicemente con

save 'nomefile.gnu'

e caricarli successivamente con

load 'nomefile.gnu'

Concludo assicurando che con il comando splot è possibile anche graficare funzioni o dati in 3 dimensioni. Buon lavoro!!

2 commenti leave one →
  1. flyingecko permalink
    mercoledì 21 gennaio , 2009 9:57 pm

    Ottimo articolo, complimenti.
    Mi sarà molto utile (sono anch’io a fisica).

    Ciao

  2. Gianluca permalink
    domenica 1 febbraio , 2009 2:47 pm

    Ottima guida. Anche io sono di Fisica e uso gnuplot come un coltellino svizzero. Ormai uso solo questo, per fare i grafici.

Lascia un commento

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: