Gnuplot krok po kroku
- Uruchom program. (W Linuksie polecam wersję napisaną w Qt, obecnie:
gnuplot5-qt
) - Narysuj wykres funkcji
> plot x*x
- W analogiczny sposób narysuj wykres funkcji .
- Narysuj wykres tej samej funkcji, ale w przedziale .
> plot [-10*pi:10*pi] sin(x)/x
- Aby lepiej zrozumieć, dlaczego on tak wygląda, narysuj na jednym wykresie trzy funkcje: , i
> plot [-10*pi:10*pi] sin(x)/x, sin(x), 1/x
- Prawda, że rysunek jest brzydki? W dodatku niewiele na nim widać. Ogranicz zakres zmienności wartości funkcji do przedziału [-1.5,1.5]
> plot [-10*pi:10*pi][-1.5:1.5] sin(x)/x, sin(x), 1/x
- Powinno być teraz jasne, że wykres funkcji dla dużych wygląda jak tłumiony funkcją . Żeby coś więcej zobaczyć, narysujmy siatkę (ang. grid)
> set grid > replot
Komenda
set
służy do ustawiania domyślnych parametrów wykresu, areplot
wykonuje poprzednią komendę plot. - Spróbuj poruszać myszką nad rysunkiem. Gnuplot wyświetla współrzędne punktu wskazywanego przez mysz. Co się dzieje, gdy klikniesz środkowym klawiszem myszy? Co, jeśli poruszasz kółkiem myszy? Do czego w gnuplocie służy prawy klawisz myszy?
- Jak zmienia się sposób wyświetlania wykresów, jeśli poruszasz kółkiem myszy, przytrzymując klawisz shift lub ctrl?
- Do pierwotnego widoku możesz powrócić za pomocą klawisza u. Spróbuj.
- Wróć do okna poleceń gnuplota. Jak działają w nim klawisze ↑ i ↓? Od tej pory nie musisz wpisywać kolejnych poleceń od nowa; wystarczy edytować poprzednie, wybrane tymi klawiszami.
- Wykres jest brzydki. Krzywe są kanciaste.
Aby zrozumieć, dlaczego, wyświetl linie oraz symbole (ang. points)> plot [-10*pi:10*pi][-1.5:1.5] sin(x)/x with linespoints, sin(x) with linespoints, 1/x with linespoints
- Napisanie powyższej instrukcji jest tak pracochłonne, że na pewno nienawidzisz już gnuplota i zastanawiasz się, komu on może w XXI wieku być do czegokolwiek potrzebny? Pierwsza sztuczka: zamiast pełnych nazw poleceń, można pisać skrótami, np.
p
zamiastplot
,w
zamiastwith
,lp
zamiastlinespoints
:p [-10*pi:10*pi][-1.5:1.5] sin(x)/x w lp, sin(x) w lp, 1/x w l
Zapis (dla nowicjuszy) jest mniej czytelny, za to bardziej zwięzły.
- Problem z powyższymi rysunkami jest taki, że gnuplot generuję każdą krzywą ze 100 odcinków. Zwiększmy ich liczbę do 1000:
> set samples 1000 > replot
Komendy te można skrócić do
se sa 1000
orazre
, ale to chyba przesada: skraca się tylko to, czego używa się często. - Narysuj teraz krzywe bez symboli:
> p [-10*pi:10*pi][-1.5:1.5] sin(x)/x, sin(x), 1/x
Wykres jest teraz dużo bardziej dokładny,
- Jak zapisać wykres w pliku? Trzeba w tym celu wykonać dwie rzeczy: ustawić zmienną output, w której przechowywana jest nazwa pliku, oraz zmienić tzw. terminal, czyli urządzenie rysujące na takie, które zamiast ekranu odpowiadać będzie jakiemuś formatowi graficznemu. Poniższe instrukcje spowodują zapisanie wykresu w pliku o nazwie rys1.png:
> set output "rys1.png" > set terminal png > replot > set terminal pop > unset output
Komenda
set term pop
przywraca poprzedni terminal, aunset output
zamyka plik. Warto zapamiętać, że w informatyce „pop” często oznacza „przywróć poprzedni stan”. Słowoterminal
można skrócić doterm
, aoutput
doout
.
- Sprawdź, jakie terminale obsługuje twoja wersja gnuplota
> help terminal
- Zapisz wykres w formacie eps (encapsulated PostScript), preferowanym w zastosowaniach, w których wymagana jest wysoka jakość (np. w książkach)
> set terminal postscript eps enhanced color > # oraz pozostałe instrukcje jak w przykładzie powyżej
- Chwila relaksu: sprawdź, jak działa terminal
dumb
(jeśli w Twojej instalacji jest obsługiwany). Nie zapomnij wrócić do domyślnego tarminala (set term pop
). - Dwa inne popularne formaty obsługiwane przez gnuplot to SVG i JPG. Zapisz wykres w jednym z nich.
- Interaktywne tworzenie „ładnych” wykresów jest żmudne, gdyż wymaga uwzględnienia mnóstwa szczegółów. Praca nad takim wykresem będzie łatwiejsza, jeśli wszystkie komendy zapiszesz w osobnym pliku tekstowym. Utwórz plik „rys1.gp” o następującej treści
set samples 1000 set grid set xlabel "x" set ylabel "f(x)" set mxtics 10 set mytics 5 set key font ",16" set arrow 1 from -5, 1.3 to 0,1 linewidth 1.5 linetype 2 linecolor "black" head set label 1 "sin(0)/0" at -5, 1.4 center font ",15" set term png font "Arial,18" linewidth 1.5 set out "rys.png" p [-10*pi:10*pi][-1.5:1.75] sin(x)/x linewidth 1.5 title "f(x)", sin(x) title "g(x)", 1/x title "h(x)" unset out set term pop
Następnie załaduj go poleceniem
load "rys1.gp"
Sprawdź, jak wygląda rysunek w pliku „rys.png”
- Podmień w tym pliku dwie instrukcje, ustalające terminal i plik docelowy:
set term postscript eps enhanced font "Arial,18" linewidth 2 set out "rys.eps"
pozostawiając resztę bez zmian. Sprawdź, że jakość pliku
eps
jest bez porównania lepsza odpng
. - Klasyczny PostScript jest czarno-biały jak wydruk ze zwyczajnych drukarek laserowych. Jak rysunkowi z poprzedniego punktu dodać kolor? Wskazówka: musisz coś zrobić z terminalem.
- Teraz lekko zwiększamy zakres użyteczności i poziom trudności zadań. Utwórz plik
dane.txt
z następującymi danymi:1 1 1 1 2 2 4 4 3 3 9 8 4 4 16 16 5 5 25 32 6 6 36 64 7 7 49 128 8 8 64 256 9 9 81 516 10 10 100 1024
- Jak widać, plik ma 4 kolumny i 10 wierszy. Narysuj wykres drugiej kolumny względem pierwszej:
plot "dane.txt" with linespoints pointsize 3
- A teraz podobny wykres, ale jako wartości „y” bierzemy dane z kolumny 3:
plot "dane.txt" using 1:3 with linespoints pointsize 3
- Sprawdź, że długie słowa kluczowe można skrócić do 1-2 liter:
p "dane.txt" u 1:3 w lp ps 3
- Skoro jesteśmy na poziomie eksperckim, narysuj czwartą kolumnę w funkcji pierwszej.
- A teraz pierwszą w funkcji czwartej. Niechcący nauczył(a/e)ś się czegoś o funkcjach odwrotnych.
- Teraz poziom ekspercki: wykres pierwiastka z drugiej kolumny względem pierwszej. Zwróć uwagę na symbol dolara, który działa jak selektor kolumny, nawiasy () oraz to, że pierwiastek kwadratowy to sqrt (ang. square root):
p "dane.txt" u 1:(sqrt($2)) w lp ps 2
- Oczywiście na jednym obrazku można umieścić wykresy kilku zbiorów danych, funkcji, lub danych i funkcji. Narysuj wykres oraz , gdzie to wykres danych z kolumny 3 pliku „dane.txt” pomniejszonej o 2 w funkcji danych z kolumny 1, a .
p "dane.txt" u 1:($3-2) w lp ps 3, 3 + 4*x
- gnuplot może służyć jako prosty kalkulator. Wartości wyrażeń wyświetla się komendą print. Oblicz w ten sposób wartość
- gnuplot umożliwia definiowanie funkcji. Składnia jest prosta:
nazwa_funkcji(parametr_1,..., parametr_n) = wyrażenie
Zdefiniuj funkcję
- Poniższa tabela zawiera wynik pomiaru zależności długości fali dźwiękowej () od jej częstotliwości ():
[Hz]
[m]ΔL
[m]500 9.8 0.05 600 8.3 0.05 760 6.4 0.05 985 4.9 0.05 1300 3.8 0.05 1860 2.7 0.05 2980 1.7 0.05 4500 1.1 0.05 6400 0.78 0.005 - Dopasuj parametry funkcji do powyższych danych.
fit f(x) "d.txt" u 1:2:3 via a,b
- Narysuj dane wraz ze słupkami błędów (opcja
using 1:2:3 with error
) oraz funkcję - Czy dopasowanie wygląda „na oko” na wiarygodne? Powiększ w tym celu fragmenty wykresu prawym klawiszem myszy. Pierwotny widok możesz później przywrócić komendą
reset
w konsoli gnuplota lub klawiszemu
w oknie rysunku. - Kontrolę ilościową jakości dopasowania zapewnia parametr
FIT_STDFIT = sqrt(WSSR/ndf)
. Czy jego wartość mieści się w przedziale 0.5…2? Jeśli tak, dopasowanie prawdopodobnie jest OK. - Jeśli
FIT_STDFIT
jest większy od 1, za błąd pomiarowy dopasowywanego parametru przyjmuje się jego „Asymptotic Standard Error” pomnożony przezFIT_STDFIT
. Znajdź wartość niepewności pomiarowej i . Wartość asymptotycznego błędu standardowego parametruzmienna
przechowywana jest w zmiennej o nazwiezmienna_err
.> print a_err * FIT_STDFIT > print b_err * FIT_STDFIT
- Czy uzyskane przez Ciebie wyniki pozwalają przyjąć tezę, że ?
- Ile wynosi prędkość dźwięku w badanym metalu?
- Dopasuj parametry funkcji do powyższych danych.
- Jak, bez modyfikacji pliku z danymi, uzyskać wykres danych z poprzedniego zadania, ale w funkcji a nie . Taki wykres powinien wyglądać jak linia prosta, a do jego wykonania trzeba użyć opcji
using
, nawiasów okrągłych i dolara. - Kolejne zadanie do samodzielnego wykonania. Niech oznacza sumę , gdzie jest liczbą naturalną. Wyznacz dla (czyli od dziesięciu do miliarda z mnożnikiem 10). Uczeni w piśmie twierdzą, że dla dostatecznie dużych wartość można przybliżyć wzorem (
log
oznacza tu – i w gnuplocie – logarytm naturalny). Oszacuj wartość stałych i . Wykonaj odpowiedni rysunek z dokładnymi wartościami oraz swoją aproksymacją . Nie musisz szacować niepewności i . Uwaga. Do wyznaczenia powyższych sum możesz wykorzystać https://www.wolframalpha.com/input/?i=sum+1%2Fx+from+1+to+1000000000. - Po wykonaniu poprzedniego zadania, bez pomocy WolframAlpha oszacuj wartość sumy dla .
- Prawie na koniec uruchom polecenie
test
, które pokazuje możliwości danego terminalu. - (*) A na koniec spróbuj uruchomić program demonstracyjny gnuplota
> load "all.dem"
Problem w tym, że musisz go uruchomić z katalogu, w którym ten plik się znajduje. W tym celu należy zmienić katalog komendą
cd
. W linuksie położenie tego pliku można znaleźć poleceniem (w konsoli linuksa a nie gnuplota!)find /usr -name "all.dem"
Pliki z wynikami działania skryptu demonstracyjnego znajdują się na stronie http://gnuplot.info/demos/