Gnuplot krok po kroku

    1. Uruchom program. (W Linuksie polecam wersję napisaną w Qt, obecnie: gnuplot5-qt)
    2. Narysuj wykres funkcji y(x) = x^2
      > plot x*x
    3. W analogiczny sposób narysuj wykres funkcji y(x) = \sin(x)/x.
    4. Narysuj wykres tej samej funkcji, ale w przedziale [-10\pi, 10\pi].
      > plot [-10*pi:10*pi] sin(x)/x
    5. Aby lepiej zrozumieć, dlaczego on tak wygląda, narysuj na jednym wykresie trzy funkcje: y(x) = \sin(x)/x, g(x) = \sin(x) i h(x) = 1/x
      > plot [-10*pi:10*pi] sin(x)/x, sin(x), 1/x
    6. 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
    7. Powinno być teraz jasne, że wykres funkcji y(x) = \sin(x)/x dla dużych |x| wygląda jak g(x) = \sin(x) tłumiony funkcją h(x) = 1/x. Żeby coś więcej zobaczyć, narysujmy siatkę (ang. grid)
      > set grid
      > replot

      Komenda set służy do ustawiania domyślnych parametrów wykresu, a replot wykonuje poprzednią komendę plot.

    8. 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?
    9. Jak zmienia się sposób wyświetlania wykresów, jeśli poruszasz kółkiem myszy, przytrzymując klawisz shift lub ctrl?
    10. Do pierwotnego widoku możesz powrócić za pomocą klawisza u. Spróbuj.
    11. 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.
    12. Wykres jest brzydki. Krzywe są kanciaste.
      gnu1Aby 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
    13. 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 zamiast plot, w zamiast with, lp zamiast linespoints:
      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.

    14. 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 oraz re, ale to chyba przesada: skraca się tylko to, czego używa się często.

    15. 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,

    16. 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, a unset output zamyka plik. Warto zapamiętać, że w informatyce „pop” często oznacza „przywróć poprzedni stan”. Słowo terminal można skrócić do term, a output do out.
      rys1

    17. Sprawdź, jakie terminale obsługuje twoja wersja gnuplota
      > help terminal
    18. 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
    19. 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).
    20. Dwa inne popularne formaty obsługiwane przez gnuplot to SVG i JPG. Zapisz wykres w jednym z nich.
    21. 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”

    22. 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 od png.

    23. 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.
    24. 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
    25. Jak widać, plik ma 4 kolumny i 10 wierszy. Narysuj wykres drugiej kolumny względem pierwszej:
       plot "dane.txt" with linespoints pointsize 3
    26. A teraz podobny wykres, ale jako wartości „y” bierzemy dane z kolumny 3:
      plot "dane.txt" using 1:3 with linespoints pointsize 3
    27. 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
    28. Skoro jesteśmy na poziomie eksperckim, narysuj czwartą kolumnę w funkcji pierwszej.
    29. A teraz pierwszą w funkcji czwartej. Niechcący nauczył(a/e)ś się czegoś o funkcjach odwrotnych.
    30. 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
      
    31. Oczywiście na jednym obrazku można umieścić wykresy kilku zbiorów danych, funkcji, lub danych i funkcji. Narysuj wykres y(x) oraz f(x), gdzie y(x) to wykres danych z kolumny 3 pliku „dane.txt” pomniejszonej o 2 w funkcji danych z kolumny 1, a f(x)=3+4x.
       p "dane.txt" u 1:($3-2) w lp ps 3, 3 + 4*x

      gp2

    32. gnuplot może służyć jako prosty kalkulator. Wartości wyrażeń wyświetla się komendą print. Oblicz w ten sposób wartość 2^{10}, \pi^\pi, \log_{10}1000.
    33. gnuplot umożliwia definiowanie funkcji. Składnia jest prosta:
       nazwa_funkcji(parametr_1,..., parametr_n) = wyrażenie

      Zdefiniuj funkcję f(x) = a + b/x

    34. Poniższa tabela zawiera wynik pomiaru zależności długości fali dźwiękowej (L) od jej częstotliwości (f):
      f
      [Hz]
      L
      [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

       

      1. Dopasuj parametry funkcji L(f) = a + b/f do powyższych danych.
        fit f(x) "d.txt" u 1:2:3 via a,b
      2. Narysuj dane wraz ze słupkami błędów (opcja using 1:2:3 with error) oraz funkcję f(x)
      3. 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 klawiszem u w oknie rysunku.
      4. 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.
      5. Jeśli FIT_STDFIT jest większy od 1, za błąd pomiarowy dopasowywanego parametru przyjmuje się jego „Asymptotic Standard Error” pomnożony przez FIT_STDFIT. Znajdź wartość niepewności pomiarowej a i b. Wartość asymptotycznego błędu standardowego parametru zmienna przechowywana jest w zmiennej o nazwie zmienna_err.
        > print a_err * FIT_STDFIT
        > print b_err * FIT_STDFIT
      6. Czy uzyskane przez Ciebie wyniki pozwalają przyjąć tezę, że a = 0?
      7. Ile wynosi prędkość dźwięku w badanym metalu?
    35. Jak, bez modyfikacji pliku z danymi, uzyskać wykres danych z poprzedniego zadania, ale w funkcji 1/f a nie f. Taki wykres powinien wyglądać jak linia prosta, a do jego wykonania trzeba użyć opcji using, nawiasów okrągłych i dolara.
    36. Kolejne zadanie do samodzielnego wykonania. Niech f(n) oznacza sumę 1/1 + 1/2 + 1/3 +\ldots+ 1/n, gdzie n jest liczbą naturalną. Wyznacz f(n) dla n = 10, 100, 1000, 10000, 100000,\ldots,1000000000 (czyli od dziesięciu do miliarda z mnożnikiem 10). Uczeni w piśmie twierdzą, że dla dostatecznie dużych x wartość f(x) można przybliżyć wzorem f(x) \approx a + b\log x (log oznacza tu – i w gnuplocie – logarytm naturalny). Oszacuj wartość stałych a i b. Wykonaj odpowiedni rysunek z dokładnymi wartościami f(n) oraz swoją aproksymacją f(x). Nie musisz szacować niepewności a i b. Uwaga. Do wyznaczenia powyższych sum możesz wykorzystać https://www.wolframalpha.com/input/?i=sum+1%2Fx+from+1+to+1000000000.
    37. Po wykonaniu poprzedniego zadania, bez pomocy WolframAlpha oszacuj wartość sumy 1/1 + 1/2 + 1/3 +\ldots+ 1/n dla n=10^{100}.
    38. Prawie na koniec uruchom polecenie test, które pokazuje możliwości danego terminalu.
    39. (*) 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/