Gnuplot I - Funkce 1 proměnné
V úvodním článku bych Vás chtěl naučit vykreslovat grafy funkcí jedné proměnné.
1.9.2004 08:00 |
Vladimír Jarý
| Články autora
| přečteno 24479×
Základy práce v Gnuplot
Gnuplot slouží ke kreslení grafů funkcí ve 2d a 3d a zpracování statistických dat. V dnešním článku Vás stručně seznámím s možnostmi kreslení dvourozměrných grafů.
Gnuplot by měl být součástí většiny hlavních distribucí, pokud na té Vaší chybí, můžete si jej stáhnout z domácí stránky projektu. K dispozici jsou zdrojové kódy pro Unix/Linux, Os/2, pro 32-bitová Windows, Apple Macintosh a další méně významné platformy. Ačkoliv je rozhraní programu řádkové, pro výstup grafu budete potřebovat běžící X window server. Program se spouští z konzole příkazem gnuplot, pro ukončení stiskněte ctrl+d nebo zadejte příkaz exit. Pro vypsání základní nápovědy napište na prompt help.
Zadávání funkcí
Jako proměnná se používá standardně x, v případě třírozměrných grafů pak x a y, u parametrických grafů hraje roli parametru písmeno t. Součet se značí znakem +, rozdíl znakem -, pro součin * podíl / a pro mocninu **. Plus respektive mínus mají navíc i význam unárního operátoru (+5, -3). Ludolfovo číslo lze zadat konstantou pi (pi zde má hodnotu 3.14159265358979). Následuje tabulka některých základních funkcí:
- absolutní hodnota: abs
- znaménko: sgn
- druhá odmocnina: sqrt
- přirozený logaritmus (základ e): log
- dekadický logaritmus (základ 10): log10
- exponenciála: exp
- trigonometrické funkce: sin, cos, tan
- cyklometrické funkce: asin, acos, atan
- hyperbolometrické funkce: sinh, cosh, tanh
- inverzní hyperbometrické funkce: asinh, acosh, atanh
Kromě těchto základních funkcí známých ze středoškolské analýzy zvládá Gnuplot
i Besselovy funkce, beta a gamma funkce. U řady funkcí jsou navíc podporovány i komplexní argumenty.
Pozor, při zadávání funkcí a psaní příkazů závisí na velikosti písmen! K vyhodnocení aritmetického výrazu použijte příkaz print. V prostředí gnuplot je možné zavádět vlastní proměnné ve tvaru proměnná = hodnota
print sin(0) # vrátí 0
a = 5 # do proměnné a ulož hodnotu 5
print a**2+a+5 # vrátí 30
Vykreslování funkcí jedné proměnné
K nakreslení grafu 1 proměnné (x) slouží příkaz plot. Základním argumentem příkazu je požadovaná funkce, popřípadě více funkcí oddělených čárkou. Zkuste zadat plot sin(x). Pokud napíšete příkaz správně, mělo by se objevit X-ové okno s nakresleným grafem, v případě chyby použijte šipku nahoru (slouží pro pohyb v historii příkazů, obdobně jako v konzoli) a opravte zadání. Výsledný graf, jak je vidět na obrázku, nevypadá příliš pěkně, bylo by potřeba změnit měřítko os. Pokud chceme změnit osy pouze pro jeden konkrétní graf, stačí přímo za příkaz plot připsat požadované rozměry v tomto tvaru:
plot [x1:x2][y1:y2] f(x)
# obecná syntaxe, nastaví osu x na (x1, x2) a osu y na (y1, y2)
plot [0:2*pi][-1:1] sin(x) # nakreslí 1 periodu sinusoidy od 0 do 2 pi
plot [0:2*pi] cos(x) # změní pouze osu x
plot [][-1:1] # změní pouze osu y
Pro změnu os po celou dobu relace použijeme příkaz set, který slouží k nastavování mnoha různých aspektů programu. (Pro výpis všech parametrů tohoto příkazu stačí napsat samotné set):
set xrange [x1,x2] # nastaví globálně osu x
set yrange [y1,y2] # nastaví globálně osu y
Pokud se chcete vrátit k výchozímu nastavení osy y, napište set autoscale y a osa y se bude opět automaticky dopočítávat. Pro aplikování změn měřítka (a nejenom měřítka) na již vykreslený graf slouží příkaz replot. A k měřítku ještě jednou, občas se hodí nastavit jednu osu v logaritmické stupnici. Opět použijeme příkazu set, tentokráte s parametrem logscale osa. Pro návrat na nelogaritmickou osu se použije příkaz
unset s parametrem logscale.
Pozor, příkaz unset sloužící jako protiklad příkazu set byl zaveden ve verzi
(tuším) 4.0, ve starších verzích se pro zrušení konkrétního nastavení (třeba právě logaritmického měřítka) zavolal příkaz set s parametrem začínajícím prefixem no- (v tomto případě
nologscale). Více snad vysvětlí ukázka:
plot log(x), exp(x) #vykresli vhodné funkce
pro demonstraci logaritmického měřítka
set xrange [1,5]
set logscale x # osa x logaritmická
replot # překreslí graf s novým nastavením
set logscale y # osa y logaritmická
replot # překreslí graf s novým nastavením
# syntaxe platná pro verzi 4.0
unset logscale x
unset logscale y
# syntaxe platná ve starších verzích
set nologscale x
set nologscale y
Vykreslování os
Asi jste si všimli, že normálně je vypnuté zobrazování os x a y (tedy přímek o rovnicích x=0, y=0). K zobrazení těchto os nám pomůže již známý příkaz set:
plot x
set xzeroaxis # zobraz osu x
set yzeroaxis # zobraz osu y
set zeroaxis # zobraz osu x i osu y jediným příkazem :-)
replot # podívej se na výsledek
Pro opětovné skrytí os zavolejte příkaz unset:
unset xzeroaxis # vypne osu x
unset yzeroaxis # vypne osu y
unset zeroaxis # příkaz pro lenochy, vypne obě osy najednou
set nozeroaxis # pouze pokud máte starší verzi
Následuje stručně řada dalších příkazů pro úpravu vzhledu grafu:
set title "Návštěvnost Linuxsoftu :-)'" # Nastav popisek grafu
set xlabel "Čas" # nastav popisek osy x
set ylabel "Hodnota" # nastav popisek osy y
set nokey # skryj legendu
set noborder #skryj rámeček
set grid # zobraz mřížku
set xrange[0:4]
plot exp(x)
Definování vlastních funkcí:
Ačkoliv gnuplot podporuje celkem slušnou řádku základních funkcí, není na škodu umět nadefinovat si funkci vlastní. Seznam vlastních funkcí zobrazíte příkazem show functions. Následuje syntaxe a několik příkladů:
Syntaxe: jméno_funkce(proměnné) = výraz
parabola(x) = x**2 # definujeme si funkci y=x^2
plot parabola(x) # a vykreslíme ji
pythagoras(x,y) = sqrt(x**2+y**2) # Pythagorova věta
print pythagoras(3,4) # vrátí 5
test(x) = x>0 ? sin(x) : cos(x)
V poslední ukázce je použit podmíněný výraz známý z jazyka C:
podminka ? výraz1 : výraz2
a znamená, že se vyhodnotí pravdivost výroku v podmínce, pokud jesplněna, vykoná se výraz1, jinak výraz2. Také logické operátory jsou převzaté z Céčka:
- Je rovno: ==
- Není rovno: !=
- Je větší: <
- Je menší: >
- Je větší nebo rovno <=
- Je menší nebo rovno >=
- Konjunkce: &&
- Disjunkce: ||
Za výraz1 nebo výraz2 je možné vložit i další větvení a nadefinovat například funkci signum (funkce signum vrací záporným argumentům hodnotu -1, v nule nabývá hodnotu 0 a konečně kladným argumentům vrací 1).
znamenko(x) = x>0 ? 1 : (x==0 ? 0 : -1)
print znamenko(-10)
print znamenko(0)
print znamenko(10)
To je pro dnešek vše, doufám, že jsem Vás příliš neznechutil matematikou.
V příštím pokračování se naučíme vykreslovat grafy funkcí 2 proměnných.
Verze pro tisk
|
Nejsou žádné diskuzní příspěvky u dané položky.
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|