Gnuplot 2 - funkce ve 2 proměnných

Dnes se podíváme na možnosti vykreslování funkcí ve 3d a také na parametrické křivky.

20.9.2004 08:00 | Vladimír Jarý | přečteno 22066×

Trocha teorie

Reálná funkce dvou reálných proměnných je zobrazení, které přiřazuje uspořádané dvojici reálných čísel (definiční obor) jednoznačně reálné číslo. Grafem takovéto funkce je pak množina bodů v třírozměrném eukleidovském prostoru. Jako příklad funkce dvou proměnných můžeme vzít model zemského povrchu: každému bodu o dané zeměpisné šířce a délce je přiřazena nadmořská výška. Tolik asi na úvod.

Praxe

Základním příkazem v Gnuplotu pro práci s grafy funkcí dvou proměnných je splot, jehož nejdůležitějším argumentem je požadovaná funkce (jako proměnné se používá x, y):

splot sin(x)*cos(y) # nejjednodušší použití

Jak vidíte na obrázku, výsledek není příliš vhodný k publikaci. Jako první zkusíme změnit rozmezí os. U "obyčejných" funkcí v  jedné proměnné k tomu účelu sloužil příkaz set s parametry xrange a yrange. Asi Vás příliš nepřekvapí, že se tento příkaz použije i v tomto případě, pouze přibude parametr zrange pro úpravu osy z. Tímto způsobem nastavíme měřítko pro všechny grafy v rámci jedné relace, pro změnu jediného grafu použijeme následující zápis:

splot [x1:x2][y1:y2][z1:z2] f(x,y) # nastav meze na všech osách
splot [x1:x2] f(x,y) # nastav meze pouze na ose x 
splot [][y1:y2] f(x,y) # nastav pouze osu y
splot [][][z1:z2] f(x,y) # nastav pouze osu z

set xrange [0:2*pi] # nastav globálně meze na ose x
set yrange [0:2*pi] # nastav globálně meze na ose y
set autoscale z # automatické nastavení mezí na ose hodnot (z)
replot # překresli graf

Nyní už náš graf vypadá trochu lépe, ale stále není ideální. Zkusíme nevykreslovat zakryté části grafu - příkazem set hidden3d. Pro opětovné vykreslení i neviditelných míst zavolejte unset hidden3d.

set hidden3d # zobraz pouze viditelné
replot # překresli graf
Původní graf Po úpravě mezí os Zobrazení pouze viditelné části

Někdy se může hodit podívat se na graf z jiného úhlu a jiné vzdálenosti. I zde přijde ke slovu příkaz set, nyní s parametrem view h, v, z. Hodnota h představuje horizontální úhel (mezi pozorovatelem a horizontálou), v znamená vertikální úhel (mezi pozorovatelem a vertikálou), konečně z představuje míru přiblížení nebo oddálení (zoom). Výchozí hodnoty jsou 60 pro h, 30 pro v a 1 pro z. Pro přiblížení grafu používejte hodnoty z větší než 1, naopak pro oddálení menší než 1.

set view 45, 45, 0.75 # změna pozice pozorovatele
replot
set view ,,2 # přiblížení pozorovatele ke grafu
replot
set view 60,30,1 # návrat na výchozí pohled

Druhým způsobem je nakreslený graf popadnout myší a s pomocí metody drag&drop (popřípadě kurzorových kláves) jej natočit podle potřeby.

Pro zvýšení přesnosti grafu tu máme příkaz set isosamples sx, sy, kde sx (sy) představují počet vzorků na ose x (y), vyšší hodnoty vylepšují vzhled grafu, ale také procesorový čas potřebný k vykreslení (100*100 vzorků se na mém AMD XP 2600+ počítá asi 30 sekund).

set isosamples 50,50

Poslední možnost, kterou k tématu funkcí dvou proměnných zmíním, jsou ekvipotenciální čáry. Ekvipotenciální čára je množina bodů prostoru, které mají stejnou hodnotu veličiny, v případě modelu zemského povrchu se jedná o vrstevnice. Gnuplot zvládá 4 režimy vykreslování těchto čar - nevykreslovat, vykreslovat přímo do grafu funkce, vykreslovat projekci do roviny x, y a konečně vykreslit projekci a současně na graf funkce:

# kresli ekvipotenciální křivky na plochu grafu
set contour surface 
# kresli projekci ekvipotenciálních křivek do roviny x,y
set contour base
# kombinace předchozích způsobů
set contour both
# vypni vykreslování ekvipotenciálních čar
unset contour

Nastavování popisků grafu, os a mřížky se provádí úplně stejně jako v případě funkce jedné proměnné.

Změna pozice pozorovatele Po převzorkování Výsledná podoba

Polární souřadnice

Bod v rovině lze určit několika způsoby - asi nejpřirozenějším jsou kartézské souřadnice. Jejím základem jsou dvě kolmé přímky (osy x a y), které se protínají v počátku O. Polohu bodu pak jednoznačně určíme jako průsečík přímky rovnoběžné s osou x a přímky rovnoběžné s osou y. Ne vždy je ovšem použití kartézského systému nejvhodnější, například při studiu kruhových pohybů (rovnice popisující kyvadlo) se používají polární souřadnice. Pokud povedeme bodem P kružnici se středem v počátku O a označíme-li úhel mezi polopřímkou OP a poloosou x theta (θ), pak polární souřadnice bodu P budou R=|OX|, theta. Kartézské souřadnice lze z polárních jednoduše dopočítat:

x=R*cos(theta), y=R*sin(theta)

Rovnici křivky v polárních souřadnicích můžeme vyjádřit jako:

R=R(theta)

Pro zapnutí polárních souřadnic se zavolá příkaz set s parametrem polar. Při kreslení v polárních souřadnicích se používá proměnná t, která má význam polárního úhlu (theta). Při výchozím nastavení se mez t bere interval od 0 do 2*pi. Změna se provede příkazem set trange [theta1: theta2]. Pro změnu jednotek z radiánů na stupně použijte set angles degrees (radians pro radiány).

set polar # aktivuj polární souřadnice
plot cos(t)*sin(t) # čtyřlístek :-)
set trange [0:pi/2] # nastavení rozsahu t
replot # překreslení grafu
unset polar # návrat do kartézského systému

Pro zisk podrobnější nápovědy napište help polar

Polární souřadnice Křivka v mezích theta 0, 2*pi Křivka v mezích theta 0, pi/2

Parametrické křivky

Na závěr stručně zmíním postup vykreslování parametricky zadaných křivek. Zápis y=f(x) explicitně vyjadřuje závislost veličiny y na veličině x. Závislost x na y lze zadat i zprostředkovaně, pomocí parametru:

x=x(t) a y=y(t)

Pro vykreslení parametrické křivky je potřeba nejprve aktivovat režim parametrického zadávání a poté za příkaz plot přidat rovnice pro x a y v proměnné t:

# zapni režim parametrického zadávání
set parametric 
plot sin(t), cos(t)  # parametrická křivka

Výsledkem by měla být jednotková kružnice, ovšem kvůli rozdílnému měřítku na osách x, y nejspíše uvidíte elipsu. Pro srovnání měřítka na osách napište:

set size ratio 1

Tento příkaz nastaví poměr měřítka osy y k měřítku na ose x na zadanou hodnotu. Gnuplot umí vykreslovat parametricky zadané plochy v prostoru, za příkaz splot je třeba přidat parametrické vyjádření pro souřadnice x, y a z v proměnných u, v:

set parametric #  zapni parametrické zadání
# vykresli parametrickou plochu
# x(u, v) = cos(u)*cos(v)
# y(u, v) = cos(u)*sin(v)
# z(u, v) = sin(u)
splot cos(u)*cos(v),cos(u)*sin(v),sin(u)
set hidden3d # kresli jen viditelné
set isosamples 50,50 # nastav rozlišení grafu
replot # překresli graf
unset parametric # konec parametrického zadávání
Parametrická křivka Po úpravě měřítka Parametricky zadaná plocha

To je pro tento díl vše, příště se snad už nebude zabývat žádnou složitější matematikou, ale zpracováním datových souborů.

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=395