Handling/CompAlgSystems4Golem/gnuplot/training/index

Nácvik manipulace se vzdálenými datovými soubory

Na tomto serveru se nachází datový soubor sinusx, který obsahuje dva sloupce dat: x a sin(x). Vaším úkolem je tento soubor pomocí programu wget stáhnout a v Gnuplotu z něj vykreslit různé typy grafů.

Předpoklady

Jak spouštět sekvence příkazů

Pod GNU/Linux

  • Sekvence příkazů (všechny řádky najednou) se zkopíruje (buď Ctrl-C, Ctrl-V nebo jen označením textu myší a kliknutím prostředním tlačítkem) do příkazového řádku s shell interpreterem bash a spustí se odřádkovním Enter.
  • Kvůli použití interpreteru bash jsou některé znaky se zvláštním významem (např. $) tzv. escapované zpětným lomítkem.

Pod Windows

  • Po spuštění programu Gnuplot se sekvence s příkazy zadává přímo do příkazové řádky.
    1. Ctrl-C sekvence s příkazy (všechny řádky najednou)
    2. Ctrl-V v příkazovém řádku programu Gnuplot
    3. Enter pro spuštění
  • Soubor je nejdříve stažen na disk a následně zobrazen příkazem

    `system '"C:\Program Files\GnuWin32\bin\wget.exe" -q -O data.txt http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/sinusx.page'; plot 'data.txt'`
    
    Cesta k programu `wget.exe` se může ve Vašem systému lišit (např. `Program Files (x86)`) a je potřeba ji správně nastavit.

Úkol č. 1: Vykreslit základní závislost

Pod GNU/Linux

echo "plot '< wget -q -O - http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/sinusx.page' u 1:2 w l title 'sin(x)'"|gnuplot -persist

Pod Windows

system '"C:\Program Files\GnuWin32\bin\wget.exe" -q -O data.txt http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/sinusx.page'; plot 'data.txt' u 1:2 w l title 'sin(x)'

Úkol č. 2: Vykreslit základní závislost, numericky ji zintegrovat a integrál vykreslit do stejného grafu

Klíčový moment je v pasáži 1:(x=x+\$2*dt). Inspiraci můžet nalézt zde či zde.

Pod GNU/Linux

echo "dt=0.1;x=0;plot '< wget -q -O - http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/sinusx.page' u 1:2 w l title 'sin(x)','< wget -q -O - http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/sinusx.page' u 1:(x=x+\$2*dt) w l title 'Integral sin(x)'"|gnuplot -persist

Pod Windows

system '"C:\Program Files\GnuWin32\bin\wget.exe" -q -O data.txt http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/sinusx.page'; dt=0.1; x=0; plot 'data.txt' u 1:2 w l title 'sin(x)', 'data.txt' u 1:(x=x+$2*dt) w l title 'Integral sin(x)'

Úkol č.3: Nafitovat funkci jedné proměnné

Pod GNU/Linux

echo "f(x)=A*sin(2*x); fit f(x) '< wget -q -O - http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/sinusx.page' u 1:2 via A"|gnuplot

Pod Windows

system '"C:\Program Files\GnuWin32\bin\wget.exe" -q -O data.txt http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/sinusx.page'; f(x)=A*sin(2*x); fit f(x) 'data.txt' u 1:2 via A

V případě nahrazení fitovací funkce obecným tvarem f(x)=A*sin(B*x), je třeba omezit x-ový rozsah (např. set xrange [0:2]), aby fitování neskončilo v lokálním minimu. Nezapomeňte na via A,B.

Úkol č.3: Nafitovat funkci dvou proměnných

Inspirováno gnuplot demo script: fit.dem.

Na serveru je uložen soubor hemisphr.dat Následující příkaz soubor nafituje funkcí

h(x,y) = sqrt(r*r - (abs(x-x0))**2.2 - (abs(y-y0))**1.8) + z0,

vydá parametry a vykreslí surová data a fit:

Pod GNU/Linux

echo "h(x,y) = sqrt(r*r - (abs(x-x0))**2.2 - (abs(y-y0))**1.8) + z0; fit h(x,y) '< wget -q -O - http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/hemisphr.page' using 1:2:3:(1) via r, x0, y0, z0;splot '< wget -q -O - http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/hemisphr.page' using 1:2:3, h(x,y)"|gnuplot -persist

Pod Windows

system '"C:\Program Files\GnuWin32\bin\wget.exe" -q -O data.txt http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/hemisphr.page'; h(x,y) = sqrt(r*r - (abs(x-x0))**2.2 - (abs(y-y0))**1.8) + z0; fit h(x,y) 'data.txt' using 1:2:3:(1) via r, x0, y0, z0;splot 'data.txt' using 1:2:3, h(x,y)

Poznámka: Ve výrazu using 1:2:3:(1) je parametrem (1) konstantní odhad chyby (nemá vliv na výsledek fitu - je to pouze požadavek programu). Můžete použit na většinu případů (1)

Úkol č. 4: Vykreslit základní závislost, numericky ji zderivovat a derivaci vykreslit do stejného grafu

Pod Windows

system '"C:\Program Files\GnuWin32\bin\wget.exe" -q -O data.txt http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/sinusx.page'; x0=NaN; y0=NaN ; plot 'data.txt' title 'sin(x)', 'data.txt' u (dx=$1-x0,x0=$1,$1-dx/2):(dy=$2-y0,y0=$2,dy/dx) title 'Derivative sin(x)'

Pod GNU/Linux

echo "x0=NaN; y0=NaN ; plot '< wget -q -O - http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/sinusx.page' with lines title 'sin(x)', '< wget -q -O - http://golem.fjfi.cvut.cz/wiki/Handling/CompAlgSystems4Golem/gnuplot/training/sinusx.page' u (dx=\$1-x0,x0=\$1,\$1-dx/2):(dy=\$2-y0,y0=\$2,dy/dx) with lines title 'Derivative sin(x)'" | gnuplot -persist

Další příklady