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ásokk
al (pl. set) állíthatjuk be. Egy adott állapotot asave
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 p
ozití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: aset 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 dokumen
tumokhoz).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) a
ká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étfit 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.