--- format:markdown ... # Nácvik manipulace se vzdálenými datovými soubory Na tomto serveru se nachází datový soubor [sinusx](http://golem.fjfi.cvut.cz/wiki/_showraw/Handling/CompAlgSystems4Golem/gnuplot/training/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 - alespoň základní dovednost práce s Gnuplotem, inspirovat se dá třeba [zde](http://gnuplot.sourceforge.net/demo/) - Linux: mít nainstalovány [gnuplot](http://www.gnuplot.info/) a [wget](http://www.gnu.org/s/wget) - Windows: mít nainstalovány [gnuplot pro Windows](https://sourceforge.net/projects/gnuplot/files/latest/download) a [wget pro Windows](http://kent.dl.sourceforge.net/project/gnuwin32/wget/1.11.4-1/wget-1.11.4-1-setup.exe) ## 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](http://gnuplottips.blogspot.cz/2009/09/i-just-started-using-gnuplot-after.html) či [zde](http://gnuplot.sourceforge.net/demo/bivariat.html). ### 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](http://gnuplot.sourceforge.net/demo/fit.html).* Na serveru je uložen soubor [hemisphr.dat](http://golem.fjfi.cvut.cz/wiki/_showraw/Handling/CompAlgSystems4Golem/gnuplot/training/hemisphr) 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 * [Základní příklady stažení dat a jejich prezentace](http://golem.fjfi.cvut.cz/wiki/Handling/BasicExamples)