gnuplot: wartości zmiennych i definicje w poleceniu plot
Właśnie natknąłem się na następujące:
Zgodnie z instrukcją gnuplot element plot może zawierać definicję.
Syntax:
plot {<ranges>} <plot-element> {, <plot-element>, <plot-element>}
Each plot element consists of a definition, a function, or a data source
together with optional properties or modifiers:
plot-element:
{<iteration>}
<definition> | {sampling-range} <function> | <data source>
| keyentry
{axes <axes>} {<title-spec>}
{with <style>}
Sprawdź następujący przykład:
Na pierwszym wykresie
y=x+1jest wykreślany, ponieważa=1został zdefiniowany wcześniej. Zgodnie z oczekiwaniami.Dla drugiego wykresu i pierwszego polecenia wykresu powinno być takie samo, ale
y=2*x+1zamiast tego jest wykreślane (dwukrotnie).Na trzecim wykresie, gdy
a=1jest wyraźnie określony, jest wykreślany zgodnie z oczekiwaniami.
Dlaczego gnuplot ignoruje a=1drugi wykres? Czy coś źle zrozumiałem?
Kod:
### definitions in plot command
reset session
a = 1
b = 1
f(x) = a*x + b
set yrange[-40:40]
set multiplot layout 1,3
plot f(x)
plot f(x), a=2 f(x), a=3 f(x)
plot a=1 f(x), a=2 f(x), a=3 f(x)
unset multiplot
### end of code
Wynik:
Odpowiedzi
Twoja diagnoza jest nieco błędna. W drugim panelu na pierwszy, fioletowy wykres nałożono wykres a = 3 zamiast wykresu a = 2.
Dlaczego? Ponieważ gnuplot gromadzi wszystkie elementy pełnej fabuły przed faktycznym narysowaniem któregokolwiek z nich. Obejmuje to wykonanie dwóch przejść przez linię poleceń. Jeden przebieg do analizowania i ładowania danych z dowolnych wymienionych źródeł danych (potrzebnych na przykład do autoskalowania), a następnie drugi przebieg do oceny funkcji w zakresie (który mógł zostać określony przez autoskalowanie). Podczas pierwszego przebiegu tutaj a zostaje ustawione na 2, a następnie na 3. Na początku drugiego przebiegu a jest nadal 3 i przy braku początkowej definicji, aby ją zmienić, to jest to, co jest używane, gdy obliczane jest f (x) .