LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> 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 24368×

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

pridej.cz

 

DISKUZE

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 ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze