A gnuplot program

 

A gnuplot egy parancsokkal vezérelt rajzoló és függvényillesztő program. A programnak a forráskódja is rendelkezésre áll, így az lefordítható számos operációs rendszerre (Unixok, VMS stb.), de még DOS és Windows95/98/NT/20XX alá is. Kisebb (elsősorban file elnevezési) eltérésektől eltekintve ezek a változatok ugyanúgy működnek (a Windows alatti változat is parancssor-orientált, mindössze egy kényelmes menürendszert használhatunk a parancssor összeállításához). DOS alatt legalább 386-os processzor szükséges a futtatáshoz.

A programot a gnuplot utasítással indíthatjuk el, kilépni belőle a quit paranccsal tudunk.

A parancsok értelmezésekor a program különbséget tesz a nagy és kisbetűk között (az utasítások általában kisbetűsek). A parancsokat rövidíthetjük az első egyértelműséget biztosító karakterig. Azaz pl. a két következő utasítás megegyezik:

p cos(x) w l

plot cos(x) with lines

A stringeket macskakörmök (") vagy aposztrófok (') között kell megadni. Ezek használata általában megegyezik, kivéve a DOS/Windows környezetet, ahol az állományok nevét aposztrófok (') között kell (érdemes) megadni, ha azok \ jelet is tartalmaznak. Például:

cd 'c:\meres'

a c:\meres könyvtárba lép be.

A program támogatja a paranccsor szerkesztését és a korábbi parancsok visszahozatalát. A program használatához segítséget a help utasítással kaphatunk.

Lehetőség van a parancsokat egy megadott állományból is beolvasni a

load "állomány"

parancs segítségével. Az állományokban a # jel megjegyzés sort jelöl (ez igaz a mérési adatokat tartalmazó állományra is).

A program állapotát a különböző utasításokkal (pl. set) állíthatjuk be. Egy adott állapotot a

save paranccsal menthetünk el (ezt aztán visszatölthetjük a load utasítással). Pl.:

save 'munka.gpl'

elmenti a munka.gpl állományba a pillanatnyi állapotot. Ha csak a (később tárgyalandó) függvényeket ill. változozók akarjuk elmenteni, akkor a functions ill. var módosítót kell használnunk:

save functions 'fuggv.gpl'

save var 'valtozo.dat'

Állományból való beolvasáskor hasznos lehet a pl.

pause 3    

parancs, amelyik 3 másodpercet vár, vagy a 

pause -1  "Nyomjd meg az Enter-t"

amelyik egy Enter lenyomására vár.


A trigonometrikus függvényeket radiánban (alapértelmezés) vagy fokban számolhatjuk. A két állapot között a set angles vált. Pl. fokora a 

set angles degrees 

, míg radiánra a 

set angles radians

vált.

A programból a ! segítségével programot is indíthatunk, pl. a

! pend

utasítással kiugrunk a gnuplot-ból, lefuttatjuk a pend programot, majd folytatjuk a gnuplot használatát.
 

A gnuplot program a következőkben említetten kívül más lehetőséget is biztosít a rajzolásra és számolásra (pl. felületek és kontúrok rajzolása, gömbi- és hengerkoordináták használata, parametrikus görbék használata, másodlagos tengelyek, stb.). Ezekről a program beépített help-je és a programhoz mellékelt mintaprogramok adnak értékes információt.


Rajzolás

A rajzoláshoz a program elfogadja a C / Fortran / Pascal szintaxisban megadott kifejezéseket (ez alól a hatványozás kivétel, jele itt a **). A

plot sin(x)

parancs kirajzolja az y = sin(x) függvényt az alapértelmezésben megadott határok között. Ha -5 és 5 közötti x tartományra vagyunk kíváncsiak, akkor kiadhatjuk a

set xrange [-5:5]

parancsot. Ekkor a rajzból csak az -5 < x < 5 tartomány jelenik meg. Hasonlóan ehhez, az y és a háromdimenziós rajznál használt z tengelyt is beállíthatjuk a set yrange és a set zrange utasításokkal. Az automatikus skálázást a set autoscale parancs állítja vissza. Lehetőség van logaritmikus skála beállítására is: pl. az x tengelyen a set log x utasítással. A set nolog x parancs visszaállítja a lineáris skálát.

A program állományban található adatokat is képes kirajzolni, ha azok soronként tartoznak össze, és a sorban található adatokat szóköz vagy tabulátor választja el. Például egy meres.dat file harmadik oszlopában található adatokat az első függvényében a

plot "meres.dat" using 1:3 with linespoints

parancs rajzolja ki, vonalakkal összekötött pontokkal. Ha a negyedik oszlop tartalmazza a harmadik oszlop hibáit, akkor a

plot "meres.dat" using 1:3:4 with errobars

kirajzolja a pontokat a hibákkal együtt. Egyszerre több plot parancsot is kiadhatunk, pl.

plot sin(x),"meres.dat" using 1:3:4 with errobars

a sin(x) függvényt is odarajzolja a mérési adatok mellé.

Az adatállományban a # karakter után megjegyzéseket tehetünk, az üres sorokkal pedig egy görbe különböző szakaszait választhatjuk el a kirajzolásnál.

Az oszlopok megadása helyett egy kifejezést is írhatunk () között. Például a

plot "data.1" using (tan($2)):($3/$4) with lines 5 3

a data.1 állomány második oszlop tangensének függvényében rajzolja ki a harmadik és negyedik oszlop hányadosát (5 3 típusú) vonallal.

Amennyiben az adatállomány pl. vesszővel elválasztott számokat tartalmaz, akkor ezt -a gnuplot számára speciális formátumot - külön jeleznünk kell. Pl.

plot "data.1" using 1:($2+$3) '%lf,%lf,%lf'

az első (vesszővel elválasztott) oszlop függvényében kirajzolja a második és harmadik oszlop összegét.

A program többféle típusú rajzot tud készíteni, amit a with után adhatunk meg (pl. dots, lines, linespoints, steps, boxes). Az xerrorbars és xyerrobars segítségével a hibákat is feltüntethetjük. Pl. a

plot 'meres.dat' using 1:2:(sqrt($1)) with xerrorbars

a hibákat a második oszlop gyökeként veszi (ez akkor hasznos, ha a második oszlop pl. beütésszámokat tartalmaz), míg a

plot 'meres.dat' using 1:2:($1-$3):($1+$3):4:5 with xyerrorbar

az x koordináták hibáját a harmadik oszlop, míg az ymin és ymax értékeket a negyedik és ötödik oszlop adja meg.

Az ábrát feliratozni a

set title "Szöveg"

paranccsal tudjuk, míg az egyes görbéket a plot sorban megadott title utasítással jelölhetjük meg. Pl. próbáljuk ki a 

plot sin(x) notitle w lines, x**2 title 'negyzet' w l

utasítást!

Az aktuális időpontot is feltüntethetjük az ábrán a set time parancs segítségével.

 

Változók és függvények

A gnuplot változóknak értéket adni pl. a

a=1.1

b=0.01

parancsokkal tudunk, a lekérdezésre pl. a

print a, b

parancs szolgál. Komplex változókat is használhatunk: pl. a -3 + 4i értéket {-3,4} alakban adhatunk meg. A gnuplot mind az integer, mind a real típusú változókat használja, ezért vigyázzunk: 5/2 (ez 2) és az 5.0/2 (ez 2.5) különböző értékeket jelöl! A programban a pi változó definiálva van.

Függvényeket mi is definiálhatunk, pl. a

f(x)=a*exp(-b*x)+c

parancs megadja az f (x) = a exp(-bx) + c függvényt.

A C nyelvből örökölt feltételes értékadással ( ez az a ? b : c alakú, ami b-t ad vissza, ha az a feltétel igaz, egyébként a c-t) egy függvényt több darabból is összerakhatunk. Például függvényünk legyen egy cosinus hullám a (-p/2,p/2) intervallumban, ezen kívül pedig 0:

g(x)= abs(x) < pi/2 ? cos(x) : 0

Az értékadást a rajzoláskor is használhatjuk: a

plot 'meres.dat' using 1:($4 > 0 ? 1/0 : ($2+$3)/2.0 )

kirajzolja az első oszlop adatai függvényében a második és harmadik oszlop átlagát, ha a negyedik oszlop pozitív (az 1/0 kifejezést nem tudja értelmezni a gnuplot, ezért nem rajzol ki semmit).

A plot helyett az splot parancsot kell (kétdimenziós) felületek rajzolásánál használnunk. Ekkor lehetőség van szintvonalak megadására is (set contour). A replot parancs megismétli a legutolsó rajzolást.

 

Kimenetek és nyomtatás

 

A program kimenete (az, ahova rajzol) különböző típusú lehet: pl. DOS esetén (alapértelmezésben) megpróbál közvetlenül az (SVGA) képernyőre rajzolni, míg Unix rendszerben ez az X11 felület. Amennyiben nincs grafikus felületünk, ne essünk pánikba: a

set term dumb

paranccsal beállított dumb kimenet ASCII karakterekkel rajzolja ki a grafikont (a program minden más funkciója változatlan).

A kimenet típusát egy adott nyomtatónak megfelelőre is beállíthatjuk a

set term kimenti_adattípus

paranccsal. A set term kilistázza a program által ismert kimenit adattípusokat. Például az EPSON nyomtatót a

set term epson_60dpi

utasítással választhatjuk ki. PostScript nyomtató esetén a

set term postscript

beállítást kell használnunk. A


set terminal gif transparent xffffff x000000 x202020 x404040 x606060 x808080 xA0A0A0 xC0C0C0 xE0E0E0 

parancs fehér transzparens háttéren fekete ábrát állít elő GIF formátumban (pl. WWW dokumentumokhoz).

A set term table utasítással kiírathatjuk a grafikont létrehozó pontok koordinátáit.

A set term parancs használata csak azt jelenti, hogy a program által létrehozott ábra kimeneti adatformátuma megfelel a beállított eszköznek. Külön meg kell adnunk a nyomtatási adatok kimeneti helyét - célszerű először a set term paranccsal a kimeneti formátumot beállítani, majd a set output utasítással a kimenet helyét. Pl. a

set output "kimenet.kim"

parancs irányítja át a rajz adatait a kimenet.kim kimeneti állományba. A set output parancs önmagában lezárja a kimenetet (és elindítja a nyomtatást).

Windows95/98/NT/20XX használata esetén a PrtSc gomb segítségével közvetlenül is nyomtathatunk

Összegolaló példaként vegyük a következő utasításokat, amelyekkel kinyomtathatjuk a sin(x) függvényt egy HP DeskJet nyomtatón egy DOS-os gépen:

set terminal hpdj 150

set output 'LPT1'

plot sin(x) w lines

set output


Illesztés

A program tartalmazza egy nemlineáris, a legkisebb eltérések négyzetének minimalizációjának módszerén alapuló illesztési lehetőséget, ami az ú.n. , a Marquardt-Levenberg eljárást használja. Az illesztési technikáról a következőkben röviden csak egy kis ízelítőt adunk, a korrekt és precíz tárgyaláshoz azonban feltétlenül egy statisztika könyvet érdemes felütni.

A minimalizáláskor a program minden lépésben lépésenként kiszámolja az xi pontokban mért yi adatok és a megadott f(xi) függvény különbségégének négyzetét, súlyozva az yi értékek dyi hibájának négyzetével:

WSSR:=Si ( yi -f(xi))2 / dyi2

A nagyobb hibájú pontok így kisebb súllyal esnek latba. A pontok hibája természetesen lehet ugyanaz (ez az alapértelmezés), ekkor praktikusan nincs súlyozás. Ezek után a program megváltoztatja az f(x) függvényben szereplő paraméterek értékét (az f(x) paraméterek szerinti parciális deriváltjainak felhasználásával) úgy, hogy a WSSR értéke valamennyivel csökkenjen. Itt újra kiszámolja a WSSR értékét, és folytatja az eljárást addig, amíg minimumot nem talál. Itt kiírja az illesztett parméterek értékét, azok illesztésből eredő hibáját, valamint az ú.n. korrelációs mátrixot, amelyiknek 1 és -1 hez közeli értékei azt jelzik, hogy az adott két paraméter erősen korrelál/antikorrelál (azaz az egyik megváltozása mennyire növeli ill. csökkenti a másik értéket, ha ragaszkodunk a WSSR minimumához). A program által kiszámolt redukált WSSR érték (ami a WSSR a redukált szabadsági fokokkal elosztva) 1 körüli/alatti értéke megfelelő illeszkedést jelez, míg a lényegesen (akár nagyságrendekkel) magasabb érték rossz illeszkedésre utal.

Egy megadott f(x) függvényt a következő parancs illeszt a meres.dat állomány adataira (most figyelembe vesszük a hibákat is (negyedik oszlop), ez a mező esetleg elhagyható)

fit f(x) "meres.dat" using 1:3 via b,c

Amennyiben a negyedik oszlop mérési adatok hibáját tartalmazza, akkor az ezt így vehetjük figyelembe:

fit f(x) "meres.dat" using 1:3:4 via b,c

Az illesztés iterációval közelíti meg a minimális eltérést adó értéket. Mivel csak az b és a c változókat adtuk meg, csak ezeket próbálja megváltoztatni a program. Az iterálás rossz kezdőpontból indulva nem fog megfelelően konvergálni, esetleg láthatóan rossz értéket ad (ezt azonnal leellenőrizhetjük a

plot f(x),"meres.dat" using 1:3:4 with errobars

utasítással). Ilyenkor más értékekről kell elindulni, esetleg csak egy változót kell először illeszteni, majd a másodikat s.í.t. Végül egyszerre lehet az összes változót illeszteni. A program által megadott értékek (konfidencia intervallumok, korrelációs mátrix) az illesztési történettel együtt a fit.log állományba végéhez is hozzáíródnak.

Amennyiben az illesztendő függvény paraméterei nem függetlenek egymástól, akkor az illesztés nem fog működni. Pl. az a*exp(x+b) illesztése nem sikerülhet, ui. a*exp(x+b)=a*exp(b)*exp(x). E helyett akár az a*exp(x) akár az exp(x+b) függvényt használhatjuk. Ugyanígy gondot okozhat, ha a változóink egész számok (emlékezzünk arra, hogy a=1 és a=1.0 különböző értékeket jelöl!).

Természetesen a plot parancshoz hasonlóan a fit esetében is használhatunk az oszlopok jelölésénél függvényeket. Pl. a

fit f(x) "meres.dat" using 1:(sin($3)) via b,c

az f(x) függvényt a harmadik oszlop színuszához fogja illeszteni.

 

Az illesztés kezdeti adatait és az illesztendő változókat egy állományba (pl. valtozok.dat) is beleírhatjuk. Ekkor a via a,b,c kifejezés helyett egyszerűen csak megadjuk az állomány nevét

fit f(x) "meres.dat" using 1:3:4 "valtozok.dat"

Az update "valtozok.dat" utasítással az illesztendő változók állományában írhatjuk újra bele a változók éppen aktuális értékeit.

Természetesen az állományba íráskor ügyelnünk kell az integer és a real írásmód közötti különbségre. Azokat a változókat, amelyeket nem akarunk egy ilyen állomány felhasználásakor illeszteni, az állományban a sor végére illesztett # FIXED jelöléssel lássunk el.