Úvod

Matematika je dnes oborem nezbytným pro studium a následnou profesní kariéru v přírodovědných i ekonomických disciplínách a odpovídajících učitelských oborech. V současnosti je třeba si klást otázky: Jakým způsobem je realizována současná výuka matematiky? Je výuka matematiky opravdu totéž jako schopnost počítat nebo provést nějaký výpočet? Jaký je význam matematiky pro profesní kariéru a myšlení mladých lidí, případně pro společnost? V době počítačů, notebooků a tabletů, jejichž výpočetní možnosti mnohonásobně převyšují možnosti kalkulaček, je nevyhnutelné tyto prostředky zahrnout do výuky a vést studenty k jejich smysluplnému používání. Tím však není myšlena pouze aplikace k pohodlnému provedení výpočtů. Díky moderním technologiím vznikl prostor k řešení náročnějších problémů, testování různých přístupů k problémům a diskusi nových kreativních myšlenek. Implementace profesionálního matematického software Mathematica, který lze dnes používat kromě počítačů a notebooků také pomocí tabletů nebo prostřednictvím webových rozhraní, do výuky, přispívá dle našeho názoru ke zkvalitnění vyučovacího procesu těchto náročných a často neoblíbených oborů. 

Cílem tohoto textu je přiblížit profesionální matematický software Mathematica studentům geografie.

Základní informace o programu Mathematica

Mathematica je počítačový program používaný zejména pro řešení technických a matematických úloh, soubory tohoto programu mají příponu *.nb. Vzhledem k tomu, že matematické výpočty jsou nezbytné prakticky ve všech vědních disciplínách, je program široce využíván prakticky ve všech přírodovědných oborech a v technických vědách, ze společenských věd pak především v ekonomii. Program vyvíjí a prodává firma Wolfram Research se sídlem v Champaign, Illinois v USA, nové verze jsou dostupné pro OS Microsoft Windows, MacOS X a Linux ve třech jazykových mutacích (anglické, čínské a japonské). Kromě standardních verzí je nabízeno velké množství balíčků zaměřených na speciální oblasti, jako například aplikovaná fyzika, finanční matematika, aplikovaná statistika, biomatematika atd..

. Komu je program Mathematica určen?

Program vznikl jako „system for doing mathematics by computer“, jak původně zněl jeho podnázev, není tedy primárně určen pouze odborným matematikům, naopak se uživatelsky zaměřuje na „matematické laiky“, kterým se snaží přístupným způsobem zprostředkovat rozsáhlý matematický aparát tak, aby ho mohli plnohodnotně využívat. Protože do kategorie „matematických laiků“ patří i většina geografů, jedná se o program, který může v geovědách najít poměrně vděčné uživatele. To přirozeně neznamená, že pro samotné matematiky je program nezajímavý nebo rutinní: rozsah a kvalita matematických postupů a algoritmů je v něm tak vysoká, že program je vhodným pomocníkem i pro ně.

. Co program Mathematica umí?

Mathematica, podobně jako další programy určené na ulehčení aplikací matematiky, umožňuje nejen klasické numerické výpočty, ale i výpočty symbolické. Ty se neomezují na základní matematické operace, ale jsou možné ve všech oblastech od elementární algebry přes matice až k diferenciálnímu a integrálnímu počtu. To umožňuje kvalitativní analýzu zkoumaných vztahů, sledování jejich závislostí na proměnlivých parametrech a další vazby. V případech, kdy není možné najít řešení v obecném tvaru (nelineární rovnice, parciální diferenciální rovnice vyšších řádů, apod.) a je proto nutné kvantitativní vyhodnocení pro konkrétní hodnoty, nabízí program možnost numerického řešení včetně práce s komplexními čísly a možnosti výpočtu s předem stanovenou mírou přesnosti. Silnou stránkou programu je tradičně i propracovaná grafika - od běžných dvourozměrných grafů po grafy prostorové s jednoduchou možností změnit úhel pohledu.

Systém Mathematica zahrnuje především nepřeberné množství funkcí a algoritmů z oblasti algebry, geometrie, kombinatoriky, statistiky a regresní analýzy, řešení rovnic a jejich soustav, diferenciálního a integrálního počtu, vizualizace 2D a 3D dat, práce s databázemi a daty (data mining, klastrová analýza, apod.), práce s 2D a 3D obrazy (včetně rozpoznávání obrazu), funkce pro kombinatoriku, analýzu textu, funkce a algoritmy z teorie čísel, prostředky pro výpočty v ekonomii, apod. Mathematica umožňuje import a export dat, obrázků, videa, zvuku, GIS dokumentů a biomedicínských programů. Pokročilejší uživatelé na programu oceňují i jeho výborný programovací jazyk podobný C++. 

Pro geovědy je důležitou funkcí programu možnost importovat data z neustále rozšiřované databáze matematických, vědeckých a socioekonomických informací, která je pro uživatele programu dostupná online prostřednictvím služby WolframAlpha. Některá z dat dostupných na WolframAplha jsou aktualizována v reálném čase (např. data o počasí). Databáze shromažďuje údaje ze všech oborů, k dispozici jsou mimo jiné i demografická data, geopolitické údaje, hospodářská data, apod. Wolfram Alpha funguje i samostatně jako „odpovídající stroj“ (tj. na rozdíl od vyhledavačů, které poskytují seznam stránek, na kterých by mohla být odpověď obsažena, nabízí přímo odpověď nebo požadovaný údaj). U dotazů matematických WolframAlpha nabízí i postup vedoucí k výsledku, výhodu pro uživatele je také možnost zadávat otázky přirozeným jazykem (přesněji anglicky, např.: „Where was Barack Obama born?“).

. Jak program Mathematica vznikl?

Program Mathematica byl vytvořen Stephenem Wolframem (* 29. 8. 1959 v Londýně, oba rodiče byli uprchlíci z hitlerovského Německa) v roce 1988 na základě staršího programu SMP vyvíjeného od roku 1979. Pro jeho programovaní byl vytvořen speciální programovací jazyk označovaný podle svého tvůrce jako „Wolfram Language“. V následujících letech byly postupně uvolňovány na trh nové verze vyvíjené týmem matematiků a programátorů soustředěných kolem Wolframa, resp. kolem jeho firmy Wolfram Research. Současná verze, Mathematica 10.0.1, která je v prodeji od 17. září 2014, je už 2.3. variantou programu.

. Uživatelské rozhraní programu Mathematica - notebook

Mathematica je rozdělena do dvou částí – jádra a front endu. Jádro interpretuje výrazy a vrací výsledky. Front end poskytuje grafické uživatelské rozhraní, ve kterém výsledky vhodně zobrazuje. 

Front end programu Mathematica vytvořil spoluzakladatel firmy Wolfram Research Theodore Gray, který mu dal graficky velmi střízlivou podobu zápisníku (čeští uživatelé mu říkají notebook). Notebook umožňuje komunikaci s jádrem programu formou vstupu a výstupu, textové formátování včetně zápisu složitějších matematických výrazů, formátování grafických výstupů, tabulek a zvuku. Obsah a formátování může být generováno algoritmicky nebo interaktivně (případně kombinací obou přístupů). Notebook je možné uložit, kopírovat, dodatečně upravovat, vytisknout apod., nemusí tedy sloužit výlučně jen ke komunikaci s jádrem programu, ale také k prezentaci a formátování výsledků. 
Zápisník sice vypadá jako běžný textový editor, má ale některá neobvyklá specifika. Předně je členěn na buňky, jejichž začátek a konec ukazují hranaté závorky na pravé straně notebooku. Počáteční poloha kurzoru na začátku buňky není svislá, ale vodorovná. Buňky mohou být několika typů, základní jsou:

a)	vstupní – input (dotaz pro jádro programu – o nich více v následující kapitole),
b)	výstupní – output (odpověď jádra programu),
c)	textové (neslouží ke komunikaci s jádrem programu, ale umožňují např. psát poznámky k postupu, vysvětlivky, apod.). 

Vstupní buňku uzavřeme příkazem na zpracování do jádra programu (viz následující kapitola), textová buňka se uzavírá nastavením vodorovného kurzoru myši pod text a stlačením levého tlačítka myši (přes celý notebook se objeví vodorovná čára a kurzor se nastaví na počátek nové buňky). Stejně se postupuje, pokud potřebujeme vložit novou buňku mezi dvě už existující buňky.

S buňkami je možné pracovat obdobně jako v běžných textových editorech s odstavci: je možné je přesouvat, kopírovat, mazat, formátovat jejich písmo i pozadí, apod. Pro tyto operace je však nutné nejdříve buňku označit kliknutím myši na hranatou závorku na pravé straně notebooku (kurzor se předtím změní na šipku doleva), označená buňka pak má při pravém okraji notebooku tlustou plnou svislou čáru. Výběr zrušíme kliknutím myši kamkoliv mimo pravý okraj buňky.
Přejetím myší přes více po sobě následujících závorek označujících buňky je možné vybrat skupinu buněk. Takto označené buňky je pak možné např. spojit do jedné buňky, seskupit je, animovat (pokud jsou grafické), apod. Nabídku možných operací dostaneme kliknutím pravého tlačítka myši na pravý okraj buňky.

. Komunikace s jádrem programu - vstup In[ ] a výstup Out[ ]

Komunikace mezi jádrem programu a notebookem se děje pomocí vstupu (náš dotaz) a výstupu (odpověď programu). Vstup zadáme v notebooku tak, že napíšeme výraz, který chceme zpracovat, a stiskneme Shift+Enter (nebo ikonou Mathematica z grafického menu, nebo Ins, nebo 5 na numerické klávesnici). Naše vstupy označuje program postupně jako In[1]:=, In[2]:=, In[3]:=, In[4]:= a okamžitě po zadání na ně odpovídá, odpověď na n-tý vstup označuje jako Out[n]:=. 

Příklady:

1+2

20*5-4

Vstup může být i delší než jeden řádek, aby byl ale jádrem programu „pochopen", musí každý z řádků končit symbolem, který signalizuje, že příkaz pokračuje na dalším řádku (např. matematický operátor, šipka, apod.). 

Příklad:

(14-4)*(5+5)

Jeden vstup může obsahovat i více příkazů zároveň, jednotlivé příkazy se oddělují středníkem. Když pak takovou skupinu příkazů odešleme na zpracování, vykonají se všechny, ve výstupu Out[n]:= se ale objeví jen odpověď na příkaz poslední. Proto se doporučuje psát do jednoho vstupu příkazy, které spolu nějak souvisí, nebo na sebe navazují. Nedoporučuje se spojovat do jednoho vstupu příkazy na export dat a na jejich zpracování, rovněž je nevhodné kombinovat takto příkazy určené k jednorázovému a k opakovanému užití.
 
Příklad:

a=3; b=3;a+b

Pokud se rozhodneme dodatečně příkazy zapsané do jednoho vstupu rozdělit do dvou buněk, vytvoříme pomocí klávesy Enter prázdný řádek a následně Shift + Ctrl + D. V příkazech můžeme použít výsledky předchozích výstupů (ať už jde o čísla, výrazy, grafiku, nebo cokoliv jiného). Na poslední výsledek odkazuje symbol %, na předposlední %%, výsledek z Out[n] se pak může označit %n nebo přímo Out[n].  

Příklad:

2*%

%/2

%%-11

. Práce s proměnnými

Jak je patrné z předchozího příkladu, odvolávání se na výsledky n-tého výstupu je poměrně těžkopádné a nepřehledné. V praxi se prakticky nepoužívá, výsledek příkazu, který máme v úmyslu dále zpracovávat nebo opakovaně používat, je vhodnější přiřadit nějaké proměnné (např. výsledek výpočtu označíme písmenem q a vždy, když budeme v dalších výpočtech tuto hodnotu používat, do výrazu doplníme pouze q).

Proměnná může být označena libovolně dlouhým označením, je třeba ale respektovat 2 pravidla:

a)	první znak označení musí být písmeno, na dalších místech mohou být písmena a číslice,
b)	označení proměnné se nesmí shodovat s některým z příkazů, které používá počítačový program Mathematica (např. Sin je označení pro funkci sinus, žádná proměnná se tedy „Sin“ jmenovat nesmí).

Protože všechny příkazy v programu Mathematica začínají velkým počátečním písmenem, doporučuje se, aby jména proměnných začínala písmenem malým. Pak nemůže dojít k „nedorozumění“, protože systém důsledně odlišuje malá a velká písmena. Tento fakt je třeba mít vždy na paměti, protože např. na proměnnou označenou jako a11 se nemůžeme odvolávat výrazem „A11“. Přiřazení konkrétní hodnoty proměnné se provádí pomocí operátoru =. Stejnou hodnotu můžeme přiřadit i více proměnným současně.

Příklad:

a=3; b=c=2

a-b+c

Jednou přiřazenou hodnotu proměnné si jádro programu „pamatuje“, dokud ji nenahradíme jinou hodnotou nebo dokud proměnnou nezrušíme. Fakt, že jsou hodnoty proměnných „evidovány“ přímo jádrem programu, je důležitý hlavně v případech, kdy pracujeme s více notebooky současně, nebo když ukončíme práci s jedním a bezprostředně pokračujeme v práci s dalším notebookem. Přepsání proměnné na novou hodnotu může vypadat např. takto:

a=3

4*a

a=12

a-11

Přirozeně můžeme proměnné přiřadit i nějaký výsledek matematické operace, ve které je proměnná použita. Pokud bychom proměnnou a z předchozího příkladu (v tuto chvíli má hodnotu 12) chtěli zdvojnásobit, stačí použít příkaz (upozorňujeme znovu, že = je operátor přiřazení hodnoty):

a=2*a

Hodnotu proměnné lze vymazat příkazem Clear[x], nebo x=. . Vymazání hodnoty proměnné po jejím posledním použití nás může ochránit před omyly nebo nedorozuměními při dalším použití programu. Vymazat lze i několik proměnných současně, příslušný příkaz má podobu Clear[x, y, z], případně x=y=z=. .

. Informace o příkazech programu Mathematica, nápověda a palety

Podat v tomto textu úplný výčet příkazů programu Mathematica by bylo zbytečné. Postupně se seznámíme s těmi základními, specializované příkazy pak může zájemce poznat v podstatě dvěma způsoby:

a)	v nápovědě programu (záložka Help – Function Navigator),
b)	přímo dotazem v notebooku.

Dotaz v notebooku má syntaxi ?NazevPrikazu pro základní informace o příkazu, ??NazevPrikazu pro podrobnější informace a ?Nazev* pro vyhledání všech příkazů začínajících písmeny „Nazev“ (znak * pro vynechaná písmena může být i uvnitř nebo na záčátku slova). Vstup s dotazem se nekombinuje s jinými příkazy, proto musí být otazník v dotazu vždy na začátku buňky. Pokud chceme např. zjistit, co přesně znamená příkaz Sin a jaká je jeho přesná syntaxe, můžeme postupovat takto:

?Sin

??Sin

?Sin*

Kliknutím na symbol >> v odpovědi na dotaz se pak dostaneme na podrobné informace o příkazu v nápovědě, které obsahují také základní i pokročilé příklady užití. V případě funkce Sin jde např. o tyto doplňkové informace:

	Mathematical function, suitable for both symbolic and numerical manipulation.
	The argument of Sin is assumed to be in radians. (Multiply by Degree to convert from degrees.)
	Sin is automatically evaluated when its argument is a simple rational multiple of π; for more complicated rational multiples, FunctionExpand can sometimes be used. 
	For certain special arguments, Sin automatically evaluates to exact values.
	Sin can be evaluated to arbitrary numerical precision.
	Sin automatically threads over lists.

Základní příklady použití (v nápovědě je 51 příkladů, zde ukázány jen 4 nejzákladnější):

The argument is given in radians:

Sin[Pi/3]

Use Degree to specify an argument in degrees:

Sin[60Degree]

Plot[Sin[x],{x,0,2Pi}]

Series[Sin[x],{x,0,10}]

Zejména pro začátečníky je výhodné používat při práci s notebookem palety. Palety se nacházejí v horním řádku programu pod názvem Palettes. Při práci v notebooku jsou velmi užitečné zejména paleta Basic Math Assistant, která obsahuje další podkategorie. Kategorie Calculator obsahuje syntaxi příkazů pro aritmetiku, algebru, funkce, diferenciální počet, apod., např.:

(∫_lower^upper)expr\[DifferentialD]var

Basic Commands obsahuje matematické konstanty, elementární funkce, nabízí jednotlivé vlastnosti tabulek, 2D a 3D grafů apod., např.:

Sort[list,Greater]

Plot3D[function,{(Subscript[var, 1]),min,max},{(Subscript[var, 2]),min,max}]

Další velmi užitečná paleta je Writing Assistant. I ta má několik podkategorií, z nichž ta nazvaná Writting and Formatting umožňuje práci s textem (tučně, kurzíva, velikost textu ap.), dále umožňuje úpravy jednotlivých buněk (pozadí buněk, orámování buněk), zarovnání textu, lze také nastavit hranice jednotlivých stránek v prezentaci (Start Slide, End Slide), atd. Podkategorie Typesetting pak umožňuje zadat písmena řecké abecedy, speciální symboly, tvary či operátory.

. Použití programu Mathematica jako textového editoru

Jak jsme již uvedli, s buňkami notebooku se pracuje podobně jako s textovým editorem. Program je proto možné použít i k editování nebo prezentování jednodušších textů, zejména v případech, kdy chceme prezentovat výsledky práce v programu Mathematica. Text v notebooku je možné uložit i ve formátech přístupných běžným textovým editorům (TeX, XML, RTF pro Word, PDF, ale také jen jako čistý text TXT, nebo ve formátu HTML. V této souvislosti je nicméně třeba poznamenat, že se Mathematica nehodí k editování dlouhých textů a že jsou značně omezeny i možnosti text formátovat, nelze proto očekávat výsledky srovnatelné s programy speciálně vyvinutými pro editaci textů. Protože není program vyvíjen v české jazykové verzi, mohou při převodu českých textů nastat i problémy se zobrazováním některých znaků (např. u některých starších verzí programu při převodu do *.pdf) nebo s typografií (zejména v případech, kdy je v češtině odlišná od anglické), na rozdíl od angličtiny také není možné používat automatické kontroly pravopisu a gramatiky. 

Možnost strukturovat text jako slideshow ocení zejména ti, kteří chtějí výstupy z programu Mathematica veřejně prezentovat.

Řešení aritmetických operací a matematických funkcí

. Základní aritmetické operace

Program Mathematica lze přirozeně používat i pro výpočet aritmetických operací, tj. podobně jako kalkulačku. Syntaxe základních aritmetických operací je následující:

({{2.45, desetinná čísla, 2,45}, {a+b, sčítání, a+b}, {a-b, odčítání, a-b}, {a*b, nebo a b, nebo 3c, násobení, ab, 3c}, {a/b, dělení, (a/b)}, {a^b, mocnina, (a^b)}, {(), kulaté závorky, ()}})

Desetinná čísla je třeba psát s anglickou typografií, tj. místo desetinné čárky používat tečku. Všimněte si, že pro násobení se používá operátor * nebo mezera. Mezeru v tomto případě nelze vynechat, protože program by zadání nerozuměl: výraz a b Mathematica interpretuje jako „a krát b“, ale výraz ab je pro ni proměnná s označením ab. Protože však jméno každé proměnné začíná malým počátečním písmenem, je možné při násobení čísla a proměnné (2*c, 2 c) mezeru úplně vynechat (2c). Obdobný je postup, pokud násobíme číslem výraz v závorce.

Při aritmetických výpočtech postupuje program zleva doprava, nejvyšší prioritu má umocňování, pak násobení s dělením a jako poslední sčítání s odčítáním. Prioritu operátorů lze měnit jen kulatými závorkami, ostatní typy závorek se v Mathematice používají k jiným účelům.

Příklady:

5+2 5

a=7; 3a

(2-3(4-3))

-1(2-3(4-3))

1 3/4

15.67/10

1.567-1.567

Pozor na odlišnosti v zápisu mocnin (2^(3^2)) a ((((2^3)))^2):

2^3^2

(2^3)^2

. Přesnost výpočtů

Oproti běžným kalkulačkám je program Mathematica schopen spočítat přesně i velmi malá nebo naopak velmi velká čísla, která by se na displej běžné kalkulačky jednoduše nevešla. Např. výpočet (21^21):

21^21

Schopnost vypočítat zcela přesné výsledky je v matematice velmi potřebná, ve statistických výpočtech v geografii je ale obvyklejší, že chceme zapsat výsledek v jednoduché a přehledné formě, např. 10,3 mil. (tedy 1,03·(10^7)) místo „přesných“ 10 456 789, nebo 1,15 mm (tj. 1,15·(10^(-3))) místo přesných 0,001 149 896 780 m. V těchto případech nám tedy jde o přibližné hodnoty výsledku. K získání přibližné numerické hodnoty výrazu můžeme použít příkazy N[výraz] nebo výraz//N (výsledek má pak 6 platných číslic); přibližnou numerickou hodnotu vypočtenou na k platných číslic získáme použitím příkazu N[výraz,k]. Pokud je aplikujeme na předchozí příklad:

N[21^21]

21^21//N

N[21^21,4]

N[21^21,2]

Stejný efekt, jako požadavek na přibližnou numerickou hodnotu pomocí příkazu N[výraz] má, když je ve výrazu alespoň jedno číslo zapsané s desetinnou tečkou. Systém pak požadavek vyhodnotí jako žádost o přibližnou hodnotu výrazu. Z celého čísla přitom můžeme „udělat“ reálné (desetinné) pouhým přidáním desetinné tečky, není ani nutno za ni doplňovat nulu. V následujících příkladech si všimněte rozdílu: žádost o přesný výsledek vypadá takto (všechna čísla jsou celá nebo zapsaná v symbolickém tvaru):

21^21

5*((Sqrt[3])-(Sqrt[12]))

Z posledního příkladu můžeme udělat žádost o přibližný výsledek (ve tvaru desetinného čísla) jen tím, že např. číslo 3 zapíšeme jako reálné (3.):

5*((Sqrt[3.])-(Sqrt[12]))

V případě, že nepotřebujeme přesný výsledek, doporučuje se používat přibližné výpočty, protože jsou podstatně rychlejší. Že jde ale skutečně “jen” o přibližné výsledky, si můžeme ukázat na jednoduchém příkladu, u kterého je na první pohled jasné, že přesný výsledek je nulový:

1.567-15.67/10

Evidentně se výsledek od „přesné“ nuly liší, rozdíl je ale zanedbatelný (pokud by např. byly údaje ve výpočtu v kilometrech, míra „nepřesnosti“ předchozího přibližného výpočtu by byla asi 22 pikometrů, což je řádově velikost několika atomů. Kdyby chtěl nějaký „šťoural“ získat přeci jen zcela přesný výsledek, musel by zapsat desetinná čísla jako zlomky:

1567/1000-(1567/100)/10

. Základní matematické funkce

Jak jsme již uvedli, jsou do programu Mathematica včleněny všechny běžně používané matematické funkce. Názvy funkcí mají vždy velké počáteční písmeno, jejich proměnné a různé parametry se uvádějí vždy v hranatých závorkách (nelze je zaměnit jiným typem závorek). Názvy funkcí musí být vypisovány zcela přesně, pokud uděláme chybu v syntaxi příkazu, jádro programu nevrátí výsledek, ale upozornění na chybu. Protože některé názvy funkcí jsou poměrně dlouhé, je možné zápis urychlit např. volbou příkazu Complete selection v záložce Edit (nebo klávesovou zkratkou Ctrl + K). Program pak nabídne na výběr všechny funkce, jejichž název začíná zadaným písmenem nebo skupinou písmen. V následující tabulce uvedeme jen ty nejzákladnější a nejčastěji používané funkce a příkazy: 

({{Sqrt[x], odmocnina, (Sqrt[x])}, {Exp[x], exponenciální funkce o základu e, (e^x)}, {Log[x], přirozený logaritmus, ln x}, {Log[a,x], logaritmus o základu a, (Subscript[log, a])x}, {Sin[x], sinus (hodnota x v radiánech), sin(x)}, {Cos[x], kosinus (hodnota x v radiánech), cos(x)}, {Tan[x], tangens (hodnota x v radiánech), tg(x)}, {ArcSin[x], ArcCos[x],
 ArcTan[x], inverzní trigonometrické funkce, 
arcsin(x), arccos(x), arctg(x)}, {n!, n-faktoriál}, {Abs[x], absolutní  hodnota,|x|}, {Round[x], zaokrouhlení na celá čísla 
(tj. nejbližší celé číslo)}})
({{Ceiling[x], zaokrouhlení na celá čísla nahoru 
(tj. nejmenší celé číslo,které není menší než x)}, {Floor[x], zaokrouhlení na celá čísla dolů 
(tj. největší celé číslo,které není větší než x)}, {Max[x,y, ...] , maximum z čísel x, y, ... }, {Min[x,y, ...] , minimum z čísel x, y, ... }, {Sum[x,y, ...] , součet čísel x, y, ... }, {Sum[f((Subscript[x, i])),{i,c}], součet (∑_(i=1)^c)f((Subscript[x, i]))}, {Sum[f((Subscript[x, i])),{i,a,b}], součet (∑_(i=a)^b)f((Subscript[x, i]))}, {Sum[f((Subscript[x, i])),{i,a,b, h}], součet f((Subscript[x, i])) pro i = a,a+h, a+2h, a+3h, ..., b}, {Sum[f((Subscript[x, ij])),{i,a,b},{j,c,d}], součet (∑_(i=a)^b)(∑_(j=c)^d)f((Subscript[x, ij]))}, {Product[f((Subscript[x, i])),{i,a,b}], součin (∏_(i=a)^b)f((Subscript[x, i]))}, {NSum[...],NProduct[...] , numerická aproximace součtu, součinu}})

Před samotnými příklady použití základních matematických funkcí je nutné také upozornit na některé častěji používané konstanty. Ty si můžeme přirozeně sami nadefinovat (jako proměnné), program Mathematica má ale ty častěji používané už předdefinované (na rozdíl od proměnných jejich název začíná velkým písmenem, podobně jako u příkazů):

({{Pi, Ludolfovo číslo, π=3,14159...}, {E, Eulerovo číslo;základ přirozeného logaritmu, e=2,71828...}, {Degree, konstanta pro převod radiánů na stupně, (π/180)}, {I, imaginární jednotka komplexního čísla, i=(Sqrt[-1]), (i^2)=-1}, {Infinity, nekonečno, ∞}})

Výpočet druhé odmocniny:

Sqrt[9]

Pokud nám zápis dotazu v textové podobě z nějakého důvodu nevyhovuje, můžeme přirozeně použít i zápis symbolický (v praxi se ale tento způsob zápisu nepoužívá, protože je pomalejší, potřebné operátory musíme totiž vyhledávat v záložce Palettes - Basic Math Assistant):

(Sqrt[9])

Pozor na rozdíl mezi přesnými a přibližnými výpočty. Pokud zadáme výpočet jako přesný a výsledek není celé číslo, vrátí Mathematica výsledek v symbolickém tvaru:

Sqrt[5]

Pro výsledek v podobě desetinného čísla musíme systému “sdělit”, že stojíme o přibližný výsledek, tj. použijeme některou z možností:

N[Sqrt[5]]

Sqrt[5]//N

Sqrt[5.]

Výpočty trigonometrických funkcí:

Sin[Pi/4]

Předchozí výpočet je přesný, pro přibližný výpočet můžeme např. použít zápisu:

Sin[Pi/4.]

Pokud nezadáváme argument v radiánech, ale ve stupních, nesmíme zapomenout na jeho převod na radiány. Nejjednodušší je v tomto případě prosté vynásobení argumentu předdefinovanou konstantou Degree (tj. (π/180)). Upozorňujeme, že „Degree“ není pro program Mathematica označení jednotky, ale reálné číslo, proto je nutné dodržet syntaxi pro násobení (připomínáme, že pro násobení lze použít znak * nebo mezeru):

Tan[135*Degree]

resp. v podobě “Tan[135 Degree]”:

Tan[135 Degree]

Příklad chybné syntaxe (bez pro program srozumitelného označení násobení konstantou Degree):

a=45; Tan[aDegree]

Tan[a Degree]

Výpočty exponenciálních funkcí a logaritmů:

Hodnotu (e^2) můžeme vypočítat dvěma způsoby:

Exp[2.]

E^2.

Výpočty logaritmů by neměly být spojeny s žádnými problémy. Ukážeme si postupně výpočty ln 10, (Subscript[log, 8])64 a (Subscript[log, 2])512.

Log[10.]

Log[8,64.]

Log[2,512]

Všimněte si, že druhý výpočet jsme zadali jako přibližný (proto je výsledek 2, 0), následující výpočet je pak přesný (výsledek 8). V případě ln 10 by program poskytnul přesný výsledek v symbolickém tvaru:

Log[10]

Zaokrouhlování:

Rozdíly mezi funkcemi Round[x], Floor[x] a Ceiling [x] si ukážeme na jednoduchém příkladu. Pro kladné číslo 12,678 “dopadne” zaokrouhlování takto:

Round[12.678]

Floor[12.678]

Ceiling[12.678]

Pro srovnání: záporné číslo -12,678 (v zápisu si pomůžeme tím, že tuto hodnotu přiřadíme proměnné označené d)

d=-12.678

Round[d]

Floor[d]

Ceiling[d]

Součty a součiny řad:

Součet prvních 8 členů posloupnosti (2^i)-i, tj. 1+2+5+12+..., resp. (∑_(i=1)^8)((2^i)-i) :

Sum[2^i-i,{i,8}]

Pro výpočet  aritmetického průměru čísel 10, 10.5, 11, 11.5 ... 29.5, 30 můžeme využít součtu řady “po krocích” odlišných od jedničky:

Sum[10+i,{i,10,30,0.5}]/41

Při výpočtu nekonečné řady postupujeme obdobně, jen horní mezí nebude konkrétní číslo, ale konstanta označující nekonečno (Infinity). Např. pro (∑_(i=1)^∞)(1/(2^i)):

Sum[1/2^i,{i,Infinity}]

Výpočet “součtu součtů” (∑_(i=1)^10)(∑_(j=1)^10)(i+(i^j))by pak mohl být proveden např. takto:

Sum[i+i^j,{i,1,10},{j,1,10}]

Nebo jednodušší syntaxí (jak (Subscript[i, min]), tak (Subscript[j, min]) je 1):

Sum[i+i^j,{i,10},{j,10}]

Názornější je v tomto případě přirozeně uvedení výsledku v přibližném (numerickém) tvaru:

N[%]

Ten bychom ostatně obdrželi rovnou, pokud si o něj řekneme zadáním funkce NSum:

NSum[i+i^j,{i,10},{j,10}]

Konečný součin (∏_(i=1)^10)((i-(1/2))/(i+1))vypočteme takto:

Product[((i-(1/2))/(i+1)),{i,1,10}]

Nekonečný součin (∏_(i=1)^∞)((i-(1/2))/(i+1))pak takto:

Product[((i-(1/2))/(i+1)),{i,1,Infinity}]

. Funkce definované uživatelem

V programu Mathematica je možné velmi snadno definovat uživatelské funkce a tzv. procedury (procedura umožňuje opakování stejného příkazu nebo posloupnosti příkazů na různých místech notebooku). Funkce a procedury se definují stejným způsobem:

({{f[x_]:=výraz, definice funkce f jedné proměnné}, {f[x_,y_,...]:=výraz, definice funkce f více proměnných}, {?f, zobrazení definice funkce f}, {Clear[f], zrušení definice funkce}}) 

Názvy uživatelských funkcí se řídí stejnými pravidly jako názvy proměnných: tj. mohou být označeny libovolně dlouhým označením, je třeba ale respektovat 3 pravidla:

a)	první znak označení musí být písmeno, na dalších místech mohou být písmena a číslice,
b)	označení uživatelské funkce se nesmí shodovat s některým z příkazů, které používá počítačový program Mathematica (např. Thickness je příkaz určující tloušťku čar, žádná uživatelská funkce se tedy „Thickness” jmenovat nesmí),
c)	označení funkce se nesmí shodovat s názvem nějaké dříve nadefinované proměnné. 

Protože všechny příkazy v programu Mathematica začínají velkým počátečním písmenem, doporučuje se, aby jména uživatelských funkcí začínala písmenem malým.

Vyčíslení uživatelské funkce má stejnou syntaxi jako u funkcí předdefinovaných: napíše se její název a do hranatých závorek se umístí místo formálních proměnných konkrétní hodnoty.
 
Příklady:

funkce007[x_]:=x^2-2

funkce007[4]

Při definování uživatelských funkcí je třeba důsledně dbát na syntaxi - nesprávně definovanou funkci Mathematica “pochopí” chybně a odkazy na ni pak neprovádí:

funkce_spatna[x]:=x^2-2

funkce_spatna[3]

. Výpočty s komplexními čísly

Ve výpočtech je přirozeně možné pracovat nejen s reálnými, ale i s komplexními čísly. V programu Mathematica se zapisují ve formě a+bI.  

({{a+b I, zápis komplexního čísla z=a+bi}, {Re[z], reálná část komplexního čísla z}, {Im[z], imaginární část komplexního čísla z}, {Conjugate[z], (OverBar[z]), číslo komplexně sdružené k číslu z (pokud je z=a+bi, pak (OverBar[z])=a-bi)}, {Abs[z], absolutní hodnota komplexního čísla z, tj. |z| =(Sqrt[(a^2)+(b^2)])}, {Arg[z], argument φ goniometrického tvaru komplexního čísla, tj. z=|z|(cos φ+i.sin φ) }})

Příklady použití:

z=4+I 3

Re[z]

Im[z]

Conjugate[z]

Abs[z]

Arg[z]

N[Arg[z]]

Práce s algebraickými výrazy

Algebraický výraz je každý matematický zápis, který je tvořen z konstant a proměnných, mezi nimiž jsou pomocí algebraických operací (např. sčítání, násobení) a závorek vytvořeny smysluplné vztahy. S algebraickými výrazy se v matematickém textu setkáváme velmi často, jsou totiž přehledné a srozumitelnější než zdlouhavý slovní popis. Např. algebraický výraz ((5(x+y))/(Sqrt[x-y]))je rozhodně pro čtenáře pochopitelnější, než slovní popsání stejné situace, které by mělo pravděpodobně tuto podobu: “podíl pětinásobku součtu dvou reálných čísel a druhé odmocniny z jejich rozdílu”.

Systém Mathematica umožňuje symbolické výpočty, tj. může zpracovávat algebraické výrazy (např. 5+(x^2)) stejně jako výrazy číselné (např. 5+(4^2)). Nejčastěji uživatelé programu chtějí algebraické výrazy zjednodušit nebo vyčíslit.

. Zápis a úprava algebraických výrazů

V první řadě je třeba algebraický výraz zapsat tak, aby mu program správně porozuměl. Pomocí Basic Math Assistant můžeme výraz zapsat v příkazovém řádku přímo tak, jak je vysázen v běžném textu. Výhodou je, že nemůže dojít k nedorozumění, v praxi je však zápis tímto způsobem mimořádně pomalý. Kvůli časové úspoře se výrazy zapisují v příkazovém řádku pomocí symbolů vlastních programu Mathematica (např. / pro dělení, ^ pro mocninu, Sqrt pro odmocninu, apod.). Pokud máte na počítači nastavenou anglickou klávesnici, je tento zápis velmi rychlý.

Ukažme si oba způsoby zápisu na příkladu vzorce pro výpočet kořene kvadratické rovnice (Subscript[x, 1])=((-b+(Sqrt[(b^2)-4a c]))/(2a)):

x1=((-b+(Sqrt[(b^2)-4a c]))/(2a))

x1=(-b+Sqrt[b^2-4a c])/(2a)

Při přepisování algebraických výrazů, zejména vyskytují-li se v nich zlomky, je třeba mít na paměti, že pro počítačový program má násobení a dělení stejnou prioritu a výraz se vyhodnocuje zleva doprava. Výše uvedený vztah x1=(-b+Sqrt[b^2-4a c])/(2a) tedy nemůžeme zapsat ve formě x1=(-b+Sqrt[b^2-4a c])/2a, protože takto zapsaný algebraický výraz by program pochopil jinak:

x1=(-b+Sqrt[b^2-4a c])/2a

Jak je vidět z předchozího příkladu, u zlomků musí být v čitateli a jmenovateli výraz v závorkách nejen v případě, že se skládá z několika sčítanců, ale i v případech, kdy obsahuje pouze násobení.Při zapisování výrazů se proto doporučuje závorky psát velmi pozorně. Ostatně pokud je někde použijete přebytečně, na správnost vyhodnocení výrazu to nebude mít vliv.

Základní příkazy na úpravu algebraických výrazů:

({{Expand[výraz], upraví výraz do tvaru polynomu}, {Factor[výraz], upraví polynom do tvaru součinů a mocnin;
součet (nebo rozdíl) zlomků převede na společného jmenovatele}, {Simplify[výraz], výraz upraví na co nejjednodušší  tvar}, {Collect[výraz,x], spojí výrazy se stejnou mocninou x}, {FactorTerms[výraz,x], napíše výraz jako součin výrazů, z nichž jeden neobsahuje x}, {ExpandAll[zlomek], čitatel i jmenovatel zlomku upraví na polynom}, {Together[zlomek], převede všechny zlomky na společný jmenovatel}, {Cancel[zlomek], vykrátí zlomek }, {Apart[zlomek], upraví zlomek na součet parciálních zlomků}})

Nyní si uveďme několik příkladů:

v=(x+1)^3/(x-1)^2

Expand[v]

ExpandAll[v]

Apart[v]

v1=4 x^4+36 y^2+x^3 (12+16 y)+x^2 (9+48 y+16 y^2)+x (36 y+48 y^2)

Simplify[v1]

. Dosazování proměnných do algebraických výrazů

Při výpočtech s výrazy je časté, že nejdříve „zpracováváme“ vztahy v symbolickém tvaru a teprve následně do výsledného tvaru dosazujeme konkrétní hodnoty proměnných. Vedle konkrétních číselných hodnot můžeme do výrazu dosadit další výrazy. Chceme-li např. ve výrazu dosadit a místo proměnné x, používá se tento příkaz: výraz /. x -> a, pokud chceme za hodnoty x1 dosadit a1, za x2 pak a2, atd., použijeme příkaz: výraz /. {x1 -> a1, x2 -> a2, …}. Operátor /. se označuje jako dosazovací operátor, znak -> jako tzv. transformační pravidlo. Tento znak se zapisuje na klávesnici jako kombinace znaků ->. 

Příklad: ve výrazu ((((1+x))^3)/(((-1+x))^2)) chceme za x dosadit číslo 3:

v=((((1+x))^3)/(((-1+x))^2))

v /. x -> 3

Budeme-li chtít do stejného výrazu ((((1+x))^3)/(((-1+x))^2))za x dosadit výraz (Sqrt[y]):

v /. x -> Sqrt[y]

Na závěr bychom si měli objasnit rozdíl mezi transformačním pravidlem a přiřazovacím příkazem. Transformační pravidlo x -> 3 má vliv jen na ten výraz, na který je aplikováno (v našem případě na výraz v), nemění ale hodnotu proměnné x; přiřazovací příkaz x=3 má obecný charakter a mění trvale hodnotu proměnné x na 3 (přesněji řečeno: mění hodnotu proměnné x na 3 dokud ji nezměníme dalším přiřazovacím příkazem, nebo dokud ji nezrušíme příkazem Clear[x]. Situaci si přiblížíme na jednoduchém příkladu:

v=3b

v /. b -> 3

b

Jak je vidět, dosazení čísla 3 do výrazu 3b umožnilo vyčíslit výraz, ale neodrazilo se ve změně hodnoty proměnné b. Pokud bychom nyní proměnné b přiřadili hodnotu 4 (za příkaz jsme dali středník, abychom “ušetřili” řádek s odpovědí):

b=4;

pak by už měla proměnná b trvale hodnotu 4 a případný pokus o to, abychom ji přiřadili ve výrazu v hodnotu jinou by byl neúspěšný:

v /. b -> 3

V praxi se setkáváme i se situacemi, kdy chceme použít stejné transformační pravidlo do většího počtu výrazů. Program Mathematica umožňuje označení transformačního pravidla nějakým jménem (s malým počátečním písmenem), což usnadňuje jeho další používaní. Opět si situaci přiblížíme na jednoduchém příkladu. Nejdříve nadefinujeme 2 algebraické výrazy:

v1=2x^3 -1x+(1/2)

v2=((4x^3)/5)

A nyní vytvoříme transformační pravidlo se jménem alois:

alois =x -> y^5 + 3y^4+2y^2+(1/2)y-3

Dosazení výrazu -3+(y/2)+2 (y^2)+3 (y^4)+(y^5) za x do výrazů v1 a v2 pak bude mít tuto podobu:

v1/.alois

v2/.alois

Práce s grafikou v rovině

. Obecná pravidla pro práci s grafikou

Práce s grafikou patří mezi velmi silné stránky programu Mathematica, systém umožňuje zejména velmi precizní práci s grafy v rovině i v prostoru. Pro geografy je vedle toho užitečná i schopnost programu pracovat s vektorovou grafikou, což umožňuje do programu importovat data v běžných GIS formátech. Program přirozeně není geoinformační, jeho využití je proto spíše v poloze prezentace prostorových geografických dat, než v oblasti jejich analýzy.
 
Vlastní grafické výstupy programu jsou ukládány v prostorově úsporném vektorovém formátu – tj. jako soubor bodů, linií a ploch a přiřazení, která jim přidělují barvu, tloušťku čar, apod. Body jsou přitom definovány svými souřadnicemi, linie pomocí bodů lomu a plochy pomocí linie, která je ohraničuje. Grafický objekt jako množina dílčích jednoduchých objektů se zobrazuje pomocí funkce Show, tu však není třeba použít, pokud je objekt vytvořen pomocí funkcí (např. funkce na zobrazení grafu, 3D grafu, apod.).  

Vlastnosti zobrazení grafických objektů (např. tloušťka čar, barva) jsou předdefinovány, je možné je ale měnit dvěma způsoby: lokálně (změní předdefinované parametry pro aktivní dílčí části grafického objektu), nebo globálně (změní předdefinované parametry pro celý objekt). Globální volby vlastností se zadávají ve formě volba -> hodnota. Některé grafické volby se provádějí specifikací hodnoty (např. barva), jiné umožňují automatické nastavení optimální hodnoty použitím nastavení Automatic.

. Základní příkazy

Základní grafické objekty se vytvářejí pomocí těchto příkazů:

({{Point[{x,y}], bod se souřadnicemi [x, y]}, {Line[{{x1,y1},{x2,y2},...}], linie procházející body [x1, y1], [x2, y2], ...}, {Polygon[{{x1,y1},{x2,y2},...}], polygon s vrcholy v bodech [x1, y1], [x2, y2], ...}, {Text[výraz,{x,y}], text se středem v bodu [x, y]}})

Polygony v podobě základních geometrických útvarů se pak vytvářejí takto: 

({{Rectangle[{x1,y1},{x2,y2}], obdélník s levým dolním vrcholem [x1, y1] 
a s pravým horním vrcholem [x2, y2]}, {Circle[{x,y}, r], kružnice se středem [x, y] a poloměrem r}, {Disk[{x,y}, r], kruh se středem [x, y] a poloměrem r}, {Circle[{x,y},{r1,r2}], elipsa se středem [x, y] a s poloosami r1 a r2}, {Circle[{x,x},r,{uhel1,uhel2}], oblouk kružnice se středem [x, y] 
a poloměrem r s počátečním úhlem uhel1 a koncovým úhlem uhel2 
(měřeno v radiánech od kladné osy x
proti směru hodinových ručiček)}})


Jak již bylo uvedeno, grafický objekt se zobrazuje pomocí funkce Show[Graphic,options], skupina objektů pak pomocí Show[g1,g1,...]. Postup si ukážeme na jednoduchém příkladě. Nejdříve nadefinujeme 3 různé objekty: lomenou čáru (cara), trojúhelník (trojuhelnik) a elipsu:

cara=Line[{{1,2},{2,2},{2,3},{3,3},{3,4},{4,4},{4,5},{5,5},{5,1},{6,2},{6,3}}];

g1=Show[Graphics[cara]]

trojuhelnik=Polygon[{{2.5,2.5},{5,5},{5,2.5}}];

g2=Show[Graphics[trojuhelnik]]

elipsa=Circle[{5,6},{2,1}];

g3=Show[Graphics[elipsa]]

Pokud budeme chtít všechny 3 objekty zobrazit v jednom obrázku, použijeme příkaz Show[g1,g2,...]:

Show[g1,g2,g3]

Studenti geografie přirozeně využijí spíše možnosti zobrazovat v programu Mathematica grafy. 
K jejich zobrazení slouží příkaz Plot, který požadovaný graf okamžitě zobrazí (odpadá tedy mezikrok definování objektu a jeho zobrazení pomocí funkce Show). Základní syntaxe příkazu Plot je:

({{Plot[f,{x,(Subscript[x, min]),(Subscript[x, max])}], graf funkce f v intervalu <(Subscript[x, min]);(Subscript[x, max])>}, {Plot[{(Subscript[f, 1]),(Subscript[f, 2]),...},{x,(Subscript[x, min]), (Subscript[x, max])}], společný graf funkcí (Subscript[f, 1]), (Subscript[f, 2]) ... v intervalu <(Subscript[x, min]);(Subscript[x, max])>}})

A nyní několik příkladů. Graf funkce cos(x) v intervalu <-2π; 2π>:

Plot[Cos [x],{x,-2Pi,2Pi}]

Grafy funkcí y=cos (x) a y=(x/π) v intervalu < -2 π; 2 π > v jednom obrázku:

Plot[{Cos[x],x/Pi},{x,-2 Pi,2 Pi}]

Grafů může být v jednom obrázku podstatně více, doplňme tedy k už zobrazeným ještě y = 1.5 a y=2Cos(x-((ππ)/2)):

Plot[{Cos[x],x/Pi, 1.5,2 Cos[x-Pi/2]},{x,-2 Pi,2 Pi}]

Ke zobrazení bodového grafu slouží příkaz ListPlot, který požadovaný graf okamžitě zobrazí (odpadá tedy opět funkce Show). Základní syntaxe příkazu ListPlot je:

({{ListPlot[{(Subscript[y, 1]),(Subscript[y, 2]), ...}], zobrazí body [1, (Subscript[y, 1])], [2, (Subscript[y, 2])], ...}, {ListPlot[{{(Subscript[x, 1]), (Subscript[y, 1])}, {(Subscript[x, 2]), (Subscript[y, 2])},...], zobrazí body [(Subscript[x, 1]), (Subscript[y, 1])], [(Subscript[x, 2]), (Subscript[y, 2])], ...}})

První typ se hodí pro veličiny, které mají na x-ové souřadnici pravidelné rozestupy (např. volební výsledky strany ČSSD v obcích seřazené podle velikosti). Příklad:

ListPlot[{1.4,2.5,4,5, 7.8, 7.8, 7.9, 9.3}]

Druhý typ je vhodný pro případy, kdy jsou data na x-ové souřadnici vzdálena nerovnoměrně - např. údaje o počtu obyvatel za sčítání, která nejsou v pravidelných intervalech:

ListPlot[{{1900,356},{1910,300},{1921,245},{1930,301},{1950,134},{1961,145},{1970,120},{1980,97},{1991,95},{2001,87},{2011,80}}]

. Změny stylů kreslení

Pro změnu stylů komunita uživatelů zpravidla používá textových příkazů, pro začátečníky ale může být poměrně vítanou pomocí i nabídka v Suggestions Bar (řádek se objeví pod grafem po jeho vykreslení), který umožňuje základní úpravy bez znalosti přesné syntaxe příkazů.Pro specifikaci barvy se nejčastěji používají příkazy:

({{GrayLevel[i], odstín šedé mezi černou (hodnota 0) a bílou (hodnota 1)}, {RGBColor[r, g, b], barva definována barevným modelem RGB
(r- červená, g - zelená a b-modrá),
mohutnost složek se udává od 0 do 1 }, {CMYKColor[c, m, y, k], barva definována barevným modelem CMYK 
(c- azurová, m - purpurová, y - žlutá, k - černá),
mohutnost složek se udává od 0 do 1 }, {Hue[h], Odstín (0 - černá, 1 - bílá)}, {Hue[h, s, b], Odstín (h), sytost (s) a jas (b)}})


Velikost bodů se mění pomocí příkazů: 

({{PointSize[r], body se vykreslí jako kruhy s poloměrem r 
(relativní veličina od 0 do 1,
vzhledem k velikosti  zobrazovaného prostoru)}, {AbsolutePointSize[d], body se vykreslí jako kruhy s průměrem d 
(absolutní veličina bez ohledu na velikost zobrazovaného prostoru)}})

Tvar a tloušťka čar: 

({{Thickness[r], čárka s tloušťkou r (relativní veličina od 0 do 1,
vzhledem k velikosti zobrazovaného prostoru)}, {AbsoluteThickness[d], čárka s tloušťkou d (absolutní veličina)}, {Dashing[{(Subscript[r, 1]),(Subscript[r, 2]), ...}], čárkovaná/čerchovaná čára ((Subscript[r, 1]), (Subscript[r, 2]) udávají relativní délky čar a mezer)}})

Samotné změny nebo úpravy stylu se provádějí pomocí příkazu PlotStyle -> {seznam příkazů}, pokud jde o jeden graf, případně Plotstyle -> {{seznam příkazů pro 1. graf},{seznam příkazů pro 2. graf},{seznam příkazů pro 3. graf},...}, pokud se jedná o více grafů v jednom grafickém objektu. Barva pozadí se specifikuje příkazem Background -> barva, barva čar pak příkazem DefaultColor -> barva. Barvu pak označíme některým ze způsobů uvedených v přehledu příkazů pro specifikaci barvy. Tyto příkazy je vhodné umisťovat za údaje o funkci a intervalu do hranaté závorky příkazu Plot, tj. Plot[f,{x,(Subscript[x, min]),(Subscript[x, max])}, PlotStyle->{seznam  příkazů}]

Způsob provádění úprav stylu grafů asi nejlépe přiblíží několik příkladů. Například pokud chceme, aby byla barva grafu červená:

Plot[Cos[x],{x,-2 Pi,2 Pi},PlotStyle->RGBColor[1,0,0]]

... nebo pokud má být graf vykreslen silnější zelenou linií:

Plot[Cos[2x],{x,-2 Pi,2 Pi},PlotStyle->{RGBColor[0,1,0], Thickness[0.03]}]

... případně čerchovanou jen mírně silnější modrou linií:

Plot[Cos[x/2],{x,-2 Pi,2 Pi},PlotStyle->{RGBColor[0,0,1], Thickness[0.02], Dashing[{0.1,0.02, 0.02,0.02}]}]

Pokud bychom chtěli všechny 3 předchozí grafy vykreslit v jednom obrázku, byl by už příkaz s instrukcemi programu Mathematica poměrně dlouhý:

Plot[{Cos[x], Cos[2x],Cos[x/2]},{x,-2 Pi,2 Pi},PlotStyle->{{RGBColor[1,0,0]}, {RGBColor[0,1,0], Thickness[0.03]}, {RGBColor[0,0,1], Thickness[0.02], Dashing[{0.1,0.02, 0.02,0.02}]}}]

. Úprava zobrazované plochy grafu

Při zobrazování grafu vybírá program Mathematica zobrazovanou oblast tak, aby byl graf “ještě” dobře čitelný. V praxi, zejména v případech, kdy byl nevhodně zvolen interval zobrazovaných funkcí, to znamená, že některé příliš vzdálené body mohou ležet mimo zobrazovanou plochu grafu, nebo že i přes snahu programu je graf nepřehledný. Např. pokud budeme chtít zobrazit funkce cos(x) a (x^20)-10 v jenom grafu, bude výsledek opravdu podivný:

Plot[{Cos[x],x^20-10},{x,-2 Pi,2 Pi},PlotStyle->{ Thickness[0.01],RGBColor[0,0,1]}]

V takovýchto případech je užitečné použití příkazu PlotRange, který může omezit rozsah zobrazované oblasti - buď jen určitým rozsahem hodnot na ose y (PlotRange->{(Subscript[y, min]), (Subscript[y, max])}), nebo jak na ose y, tak na ose x (PlotRange->{{(Subscript[x, min]), (Subscript[x, max])}, {(Subscript[y, min]), (Subscript[y, max])}}). Například v předchozím grafu omezíme zobrazované hodnoty na ose y na interval od -2 do +40, což by mělo umožnit lepší srovnání obou funkcí:

Plot[{Cos[x],x^20-10},{x,-2 Pi,2 Pi},PlotStyle->{ Thickness[0.01],RGBColor[0,0,1]}, PlotRange->{-20,40}]

. Úprava os grafu a oblasti grafu

Příkazy pro zobrazování a popis os grafu:

({{Axes->True, osy se zobrazí
(tato hodnota je předdefinována)}, {Axes->False, osy se nezobrazí}, {Axes->{True,False}, x-ová osa se zobrazí, y-ová osa ne}, {AxesOrigin->{x,y}, osy se protnou v bodě [x,y] 
(předdefinována je hodnota Automatic,
tj. průsečík je nastaven tak,
aby se zobrazila co největší část grafu)}, {AxesStyle->{příkaz1, příkaz2, ...}, nastavení stylu kreslení os}, {AxesStyle->{{p1, p2, ...},
 {pA, pB, ...}}, nastavení různého stylu pro osu x a y}, {AxesLabel->None, osy bez popisu 
(předdefinovaná hodnota)}, {AxesLabel->"text", popis osy y}, {AxesLabel->{"text1", "text2"}, popis os x a y}, {Ticks->None, značky na osách se nezobrazí 
(předdefinovaná hodnota je Automatic - 
tj. polohu značek vypočítá Mathematica }, {Ticks->{{pravidlo},{pravidlo}}, specifické umístění značek na ose x a y}, {... {x1, x2, ...}, ... umístění značek na specifické pozice}})
({{... {{x1,"text1"},
{x2,"text2"}, ...}, ... umístění značek na specifické pozice
a jejich popis příslušným textem}, {... {{x1,"text1", délka1},
{x2,"text2", délka2}, ...}, ... umístění značek specifikované délky
na specifické pozice
 a jejich popis příslušným textem}, {... {{x1,text1,
{délkakladná, délkazáporná}}, ... }, ... umístění značek
specifikované délky v kladném
a jiné délky v záporném směru
na specifické pozice
a jejich popis příslušným textem}, {... {{x1,"text1", délka1, styl1}, ...}, ... umístění značek specifikované délky
a stylu na specifické pozice
a jejich popis příslušným textem}})

Příkazy pro zobrazování a úpravy rámečku:

({{Frame->True, okolo obrázku se vykreslí rámeček
(hodnoty x a y jsou pak uvedeny na rámečku,
nikoliv na osách)}, {Frame->False, rámeček se nezobrazí
(předdefinovaná hodnota)}, {FrameStyle->{příkaz1, příkaz2, ...}, specifikace stylu rámečku}, {FrameStyle->{{příkazy1}, {příkazy2}}, specifikace stylu pro každou stranu
rámečku samostatně (v pořadí dolní, levá)}, {FrameLabel->None, rámeček není označen
(předdefinovaná hodnota)}, {FrameLabel->{"text1", "text2", ...}, označení každé strany rámečku}, {RotateLabel->True, svislé osy/hrany jsou označeny zezdola nahoru
(předdefinovaná hodnota) }, {RotateLabel->False, všechny osy/hrany jsou označeny vodorovně}, {FrameTicks->Automatic, na hranách rámečku jsou značky,
jejich poloha se vypočítává automaticky
(předdefinovaná hodnota)}, {FrameTicks->None, na hranách rámečku nejsou značky}})


Příkazy pro zobrazování a úpravy mřížky:

({{GridLines->None, mřížka se nezobrazí
(předdefinovaná možnost)}, {GridLines->Automatic, zobrazí se mřížka
podle vnitřního algoritmu programu}, {GridLines->{{hodnoty x}, {hodnoty y}}, zobrazí se mřížka v určených hodnotách}})

Opět si ukážeme několik příkladů. Jak již bylo uvedeno v tabulce příkazů, automaticky se nastavuje průsečík os tak, aby byla zobrazena co největší část grafu. To ale může někdy vést k matoucím závěrům např. o kořenech rovnice. Jako příklad si uveďme automatickou volbu grafu funkce y=(x^2)+x+1:

Plot[x^2+x+1,{x,-1,1}]

Pokud program Mathematica “přinutíme” umístit průsečík os do bodu [0;0], je situace mnohem jasnější:

Plot[x^2+x+1,{x,-1,1}, AxesOrigin->{0,0}]

Popis os grafu si ukážeme na jednom z předchozích příkladů:

ListPlot[{{1900,356},{1910,300},{1921,245},{1930,301},{1950,134},{1961,145},{1970,120},{1980,97},{1991,95},{2001,87},{2011,80}}, PlotStyle->PointSize[0.02],AxesLabel->{rok, obyvatel},AxesOrigin->{1890,0}]

Na ukázku manipulace s polohou značek na ose si zopakujeme automatické vykreslení grafu funkce y=cos(x):

Plot[Cos [x],{x,-2Pi,2Pi}]

Popis osy x je velmi nepřehledný a také “nenázorný”, přitom lze mnohem lepšího efektu dosáhnout poměrně jednoduchou úpravou:

Plot[Cos [x],{x,-2Pi,2Pi}, Ticks->{{-2Pi,-3/2Pi,-Pi,-1/2Pi,0,Pi/2,Pi,3/2Pi,2Pi }, Automatic}]

Stejný graf v “rámečkové úpravě” pak vypadá takto:

Plot[Cos [x],{x,-2Pi,2Pi}, Frame->True, FrameTicks->{{-2Pi,-3/2Pi,-Pi,-1/2Pi,0,Pi/2,Pi,3/2Pi,2Pi }, Automatic}]

Popis hran rámečku můžeme provést pomocí FrameLabel->{“text1 “, “text2”, ...}:

Plot[Cos [x],{x,-2Pi,2Pi}, Frame->True, FrameTicks->{{-2Pi,-3/2Pi,-Pi,-1/2Pi,0,Pi/2,Pi,3/2Pi,2Pi }, Automatic}, FrameLabel->{"text1 ","text2"}]

Název grafu může umístit do jeho obrázku volbou PlotLabel -> “popis“:

ListPlot[{{1900,356},{1910,300},{1921,245},{1930,301},{1950,134},{1961,145},{1970,120},{1980,97},{1991,95},{2001,87},{2011,80}}, PlotStyle->PointSize[0.02],AxesLabel->{rok, obyvatel},AxesOrigin->{1890,0},PlotLabel->Graf...]

Práce s 3D grafikou

. Obecná pravidla pro práci s 3D grafikou

Podobně jako v případě 2D grafiky jsou vlastní grafické výstupy programu ukládány v prostorově úsporném vektorovém formátu – tj. jako soubor bodů, linií, ploch a v tomto případě i prostorových objektů a přiřazení, která jim přidělují barvu, tloušťku čar, apod. Body jsou přitom definovány svými souřadnicemi, linie pomocí bodů lomu, plochy pomocí linie, která je ohraničuje a prostorové objekty pomocí ploch, které je ohraničují. Grafický objekt jako množina dílčích jednoduchých objektů se zobrazuje i v tomto případě pomocí funkce Show, v tomto případě v podobě Show[Graphics3D[objekt]].

. Základní příkazy a souřadnicový systém pro 3D grafiku

Základní grafické objekty se vytvářejí pomocí těchto příkazů:

({{Point[{x,y,z}], bod se souřadnicemi [x, y, z]}, {Line[{{x1,y1,z2},{x2,y2,z2},...}], linie procházející body [x1, y1, z1],
[x2, y2, z2], ...}, {Polygon[{{x1,y1,z1},{x2,y2,z2},...}], polygon s vrcholy v bodech [x1, y1,z2],
[x2, y2,z2], ...}, {Text[výraz,{x,y,z}], text od bodu se souřadnicemi [x, y,z]}})

Základní prostorový útvar, tzv. “jednotková” krychle, se vytváří příkazem Cuboid[{x,y,z}]. Jde o krychli s dolním levým vrcholem [x, y, z] a horním pravým vrcholem [x+1, y+1, z+1]. 

Příklad:

Show[Graphics3D[Cuboid[{0,0,0}]]]

Při práci s 3D grafikou se používají shodné příkazy jako při práci s 2D grafikou (např. PointSize, Thickness, Dashing - pokud jde o relativní jednotky, resp. AbsolutePointSize, AbsoluteThickness, AbsoluteDashing, pokud vyjadřujeme údaje v jednotkách absolutních), přirozeně je ale nutné v syntaxi počítat s třetí osou z. Shodně s 2D grafikou se také vyjadřuje v 3D grafice barva. 

Protože se při zobrazování 3D objektů snaží Mathematica navodit co nejpřesvědčivější protorový efekt, simuluje program účinky osvětlení objektu. Tuto funkci je možné vypnout nebo opět zapnout pomocí volby Lighting->False a Lighting->True. Speciálně pro prostorovou grafiku jsou určeny také příkazy EdgeForm [] (zruší vykreslování čar na hranách polygonu), EdgeForm [grafické pravidlo] (vykreslí čáry požadovaným způsobem), FaceForm [grafické pravidlo 1, grafické pravidlo 2] (přední stěny polygonu vybarví podle pravidla 1, zadní podle pravidla 2).     

Při automatickém nastavení se prostorové objekty vykreslují do nitra pomyslného hranolu (box). Všechny části objektu, které leží mimo tento hranol pak nejsou zobrazeny. Velikost hranolu určí program tak, aby podstatná část objektu byla zobrazena, nicméně podobně jako ve 2D grafech mohou chybět v zobrazení extrémní nebo podle programu “nezajímavé” hodnoty. Box se v grafech zobrazuje, je ale možné ho potlačit příkazem Boxed->False (či obnovit příkazem Boxed->True). Ve většině případů potlačení hran vede k částečné ztrátě prostorového dojmu.

Rozsah zobrazované oblasti lze upravit podobně jako ve 2D grafech příkazem PlotRange->{(Subscript[z, min]), (Subscript[z, max])}; po jeho provedení se zobrazí jen ty části grafu, které jsou v zadaném rozmezí souřadnic z. Obnova automatického výpočtu zobrazované oblasti se provede příkazem PlotRange->Automatic, všechny části objektu se zobrazí na základě žádosti ve tvaru PlotRange->All. U hranolu, ve kterém je průběh 3D funkcí zobrazován, je také možno změnit programem vypočtený poměr délky stran. Používá se k tomu příkaz BoxRatios->{a,b,c}, x-ová, y-lonová a z-ová hrana jsou pak nastaveny v poměru a : b : c.

Další hodnota, kterou lze nastavit, je bod, ze kterého objekt pozorujeme. To lze volbou ViewPoint->{p,q,r}, která zajistí, že objekt je zobrazován z pohledu bodu o souřadnicích [p,q,r]. Nejde přitom o souřadnice vztažené k osám x, y a z, ale o hodnoty souřadnic ve zvláštním systému souřadnic se středem uprostřed hranolu. Změna místa, ze kterého je objekt pozorován, je v praxi výrazně zjednodušena použitím interaktivního menu programu. V programu lze nastavit i změnu středu zobrazení (ViewCenter) a orientace boxu (ViewVertical).

Ukázka:

Zobrazení grafu funkce z=(e^(-(Sqrt[(x^2)+(y^2)]))):

z=Exp[-Sqrt[x^2+y^2]]

graf1=Plot3D[Exp[-Sqrt[x^2+y^2]],{x,-2,2},{y,-2,2}]

změna poměru stran boxu na 1 : 1 : 2:

Show[graf1, BoxRatios->{1,1,2}]

Pohled z jiného úhlu:

Show[graf1, ViewPoint->{-2,-2,1}]

. Úpravy 3D grafů

Možnosti úpravy 3D grafů jsou obdobné, jako v případě 2D grafů. Rovněž v tomto případě lze měnit styl a popisky os, podobu zobrazované oblasti, barvy a další parametry. Příkazy jsou obdobné jako u 2D grafů, úplný seznam lze nalézt  v nápovědě programu.

Specifické typy grafů využívané v geografii

Mathematica umožňuje i tvorbu grafů, které jsou ve větší míře využívány pouze v geografii. Některé z nich si ukážeme v této kapitole.

. Trojúhelníkový graf

Trojúhelníkový graf slouží k prezentaci jednotek, u kterých sledujeme jev mající tři souřadnice, jejichž součtem dostáváme 1 (nebo 100 %). Například sledujeme v územních jednotkách zaměstnanost v sektorech hospodářství, zmíněné tři souřadnice představují zaměstnanost v primérním sektoru, sekundárním a terciérním (v součtu 100 % zaměstnaných). Takováto data lze jednoduše graficky prezentovat, konkrétně prostřednictvím tzv. trojúhelníkového grafu. Každá jednotka je zobrazena prostřednictvím jednoho bodu v rovnostranném trojúhelníku, jehož strany jsou nositelkami stupnic. Zobrazený bod A [20; 55; 25] tak představuje územní jednotku se zaměstnaností I. – 20 %; II. – 55 %; III. – 25 %.

Vytvoření trojúhelníkového grafu:

Trojúhelníkový graf není v programu Mathematica předdefinován. Jeho vytvoření je už poněkud složitější záležitostí, jak je ostatně vidět z definice funkce, která ho dokáže vytvořit:

TrianglePlot[data_List,{min_,max_},{nazevA_String,nazevB_String,nazevC_String},legend_:False]:=
Module[{body,skala},
skala[s_]:=promennaA s+promennaB/.Solve[{.025==promennaA min+promennaB,.1==promennaA max+promennaB},{promennaA,promennaB}];
If[MemberQ[data,_RGBColor,2],
(*multiColor*)body=Map[{Last[#],Drop[#,-1]/.{a_Real,b_Real,c_Real,size_?NumberQ}:>{PointSize[First@skala[size]],Point[{(1/2)((2b+c)/(a+b+c)),((√3)/2)(c/(a+b+c))}]}}&,data],
(*defaultColor*)body=data/.{a_Real,b_Real,c_Real,size_?NumberQ}:>{PointSize[First@skala[size]],Point[{(1/2)((2b+c)/(a+b+c)),((√3)/2)(c/(a+b+c))}]}
];

Graphics[{
(*triangle*)Line[{{0,0},{1,0},{1/2,√3/2},{0,0}}],Gray,
Line[Table[{{x,0},{1-Cos[60Degree]*(1-x),Sin[60Degree]*(1-x)}},{x,.1,.9,.1}]],
Line[Table[{{x,0},{Cos[60Degree]*x,Sin[60Degree]*x}},{x,.1,.9,.1}]],
Line[Table[{{Cos[60Degree]*x,Sin[60Degree]*x},{1-Cos[60Degree]*(x),Sin[60Degree]*(x)}},{x,.1,.9,.1}]],

(*axesNumber*)Black,Table[Text[Style[Round[x*100],FontFamily->"Arial"],{x,-.04}],{x,0,1,.2}],
Table[Rotate[Text[Style[Round[x*100],FontFamily->"Arial"],{1-Cos[60Degree]*x+Cos[30Degree]*.04,Sin[60Degree]*x+Sin[30Degree]*.04}],-π/3],{x,0,1,.2}],
Table[Rotate[Text[Style[Round[100-x*100],FontFamily->"Arial"],{Cos[60Degree]*x-Cos[30Degree]*.04,Sin[60Degree]*x+Sin[30Degree]*.04}],π/3],{x,0,1,.2}],

(*data*)body,

(*axesNames*)Rotate[Text[Style[nazevA,14],{Cos[60Degree]*.5-Cos[30Degree]*.1,Sin[60Degree]*.5+Sin[30Degree]*.1}],π/3],
Text[Style[nazevB,14],{.5,-.1}],
Rotate[Text[Style[nazevC,14],{1-Cos[60Degree]*.5+Cos[30Degree]*.1,Sin[60Degree]*.5+Sin[30Degree]*.1}],-π/3],

If[legend,{LightGray,EdgeForm[Black],Disk[{.1,-.2+.0875/2},.0875/2],Disk[{.22,-.2+.0625/2},.0625/2],Disk[{.32,-.2+.0375/2},.0375/2],Black,Text[Style[min+((5(max-min))/6),FontFamily->"Arial"],{.1,-.23}],Text[Style[min+((max-min)/2),FontFamily->"Arial"],{.22,-.23}],Text[Style[min+(((max-min))/6),FontFamily->"Arial"],{.32,-.23}]}]
}]
]

V takto nadefinovaném grafu (TrianglePlot[data_List,{min_,max_},{nazevA_String,nazevB_String,nazevC_String},legend_:False]) znamenají jednotlivé údaje: data_list je soubor dat ve formátu {souřadnice a1,souřadnice b1, souřadnice c1, hodnota},{souřadnice a2,souřadnice b2, souřadnice c2, hodnota2},... , {min_,max_} jsou meze hodnot pro tvorbu legendy, {nazevA_String,nazevB_String,nazevC_String} je soubor popisků os a, b a c a konečně na poslendím místě je informace, jestli má (True) nebo nemá (False) být uvedena legenda grafu. Ukážeme si použití fukce na jednoduchém souboru dat:

TrianglePlot[{{.2,.5,.3,120},{.7,.1,.2,350},{.55,.35,.1,200},{.4,.2,.4,300}},{100,400},{"A","B","C"},True]

Drobnou úpravou v syntaxi můžeme doplnit bodové znaky barvou - což by bylo možné využít např. pro odlišení kvalitativních znaků:

TrianglePlot[{{{.2,.5,.3,120},{.7,.1,.2,350},Yellow},{{.55,.35,.1,200},{.4,.2,.4,300},Purple}},{100,400},{"A","B","C"},True]

. Věková pyramida

Věková pyramida je de facto druhem histogramu, resp. spojením dvou histogramů, z nichž jeden udává počet mužů podle věkových kategorií, druhý pak počet žen podle stejných kategorií. Jeho vytvoření v programu Mathematica si ukažme jako příklad složitějšího zadání grafu prezentujícího už poměrně značné množství číselných údajů. Mathematica umožňuje import datových souborů všech běžných formátů, v tomto případě šlo o soubor excelu (umístění souboru musí být definováno zcela přesně):

stat=Import[FileNameJoin[{NotebookDirectory[],"1300641410.xlsx"}],"Data"];

Instrukce ke zpracování dat pak mají tuto podobu:

PairedBarChart[Map[Round[Total[#]] &, stat[[1, 7 ;; 107, 6 ;; 9]]], Map[Round[Total[#]] &, stat[[1, 7 ;; 107, 2 ;; 5]]], ImageSize -> 440, ChartStyle -> {{ColorData["Pastel", 0], ColorData["Pastel", 1]}, None, None}, BarSpacing -> {None, None, None}, ChartLabels -> {Placed[{Graphics[{FaceForm[White], EdgeForm[Gray], Rectangle[{0, 0}, {2, 1}], Text[Style["Ženy", Bold, 14], Scaled[{.5, .5}]]}, ImageSize -> 100], Graphics[{FaceForm[White], EdgeForm[Gray], Rectangle[{0, 0}, {2, 1}], Text[Style["Muži", Bold, 14], Scaled[{.5, .5}]]}, ImageSize -> 100]}, Center], None, Placed[Table[If[Divisible[n, 5], n,], {n, 0, 100}], Axis]}, AspectRatio -> 2, BaseStyle -> 16]

Práce s funkcemi

Systém Mathematica umožňuje provádět s funkcemi mj. symbolické derivování, integrování, výpočet limit, extrémů, výpočet součtů a součinů nekonečných řad, apod.

. Derivace funkcí

O derivování funkce můžeme program Mathematica “požádat” dvěma způsoby:

a)	pomocí příkazu D,
b)	pomocí apostrofu.

Syntaxe obou možností je tato:

({{D[funkce[x],x], f'[x], derivace prvního řádu podle x}, {D[funkce[x],{x,n}], f''[x], f'''[x], f''''[x] ..., derivace n-tého řádu podle x}})

Ukažme si obě možnosti na příkladu funkce y=(x^3) - cos(x):

f[x_]:=x^3-Cos[x]

D[f[x],x]

D[f[x],{x,2}]

f'[x]

f''[x]

Pokud není funkce určená k derivování příliš složitá, je nejjednodušší přímo ji vypsat do příkazu D:

D[x^2-2x+3,x]

Pokud chceme vypočítat derivaci v bodě, nejdříve funkci zderivujeme (výsledek bude výraz) a následně do výrazu dosadíme. Pro zopakování z kapitoly 3.2: dosazení se provádí pomocí příkazu výraz /. x -> a, kde se operátor /. označuje jako dosazovací operátor, znak -> jako tzv. transformační pravidlo. Např. hodnota derivace funkce y=(x^4)-2x v bodě 3 je:

v=D[x^4-2x+1,x]

v/.x->3

. Integrál

Program Mathematica lze použít i pro výpočet neurčitých a určitých integrálů funkcí. Příslušný příkaz je Integrate a použitá syntaxe je následující: 

({{Integrate[f,x], neurčitý integrál ∫fdx}, {Integrate[f,{x,a,b}], určitý integrál (∫_a^b)fdx}, {Integrate[f,{x,a,b},{y,c,d}], dvojný určitý integrál (∫_a^b)(∫_c^d)fdxdy }, {NIntegrate[f,{x,a,b}], numerická aproximace určitého integrálu (∫_a^b)fdx}})

Na tomto místě je třeba připomenout, že výpočet neurčitých integrálů je výrazně složitější, než derivování. Zatímco derivovat lze libovolnou - tedy i velmi složitou - funkci, u neurčitých integrálů mohou nastat 3 možnosti:

a)	primitivní funkci lze vyjádřit jako standardní funkce (exponenciální, logaritmické, trigonometrické, apod.),
b)	primitivní funkci lze vyjádřit jen pomocí speciálních funkcí,
c)	primitivní funkci není možné vyjádřit ani jako standardní, ani jako speciální funkce. 

Podívejme se, jak se s jednotlivými možnostmi “vypořádá” Mathematica. Do první kategorie patří např. funkce y=(x^2)-3x+2:

Integrate[x^2-3x+2,x]

Obdobně i u funkce y=(1/((x^5)+3)) relativně snado nalezne Mathematica primitivní funkci:

Integrate[(1/((x^5)+3)),x]

Správnost integrace si můžeme ověřit zpětnou derivací (výsledný výraz ještě bude třeba zjednodušit na pokud možno co nejkratší tvar):

v=D[1/(20 3^(4/5)) (2 Sqrt[2 (5+Sqrt[5])] ArcTan[(-3+3 Sqrt[5]+4 3^(4/5) x)/(3 Sqrt[2 (5+Sqrt[5])])]+2 Sqrt[10-2 Sqrt[5]] ArcTan[(-3 (1+Sqrt[5])+4 3^(4/5) x)/(3 Sqrt[10-2 Sqrt[5]])]+4 Log[3+3^(4/5) x]+(-1+Sqrt[5]) Log[3+1/2 3^(4/5) (-1+Sqrt[5]) x+3^(3/5) x^2]-(1+Sqrt[5]) Log[3-1/2 3^(4/5) (1+Sqrt[5]) x+3^(3/5) x^2]),x]

Simplify[v]

Na druhou stranu např. integrál ∫((ln(1-x))/x)dx vyjádřit pomocí standardních funkcí nelze:

Integrate[Log[1-x]/x,x]

Řešením je tedy speciální polylogaritmická funkce.

Příkladem neurčitého integrálu, který není řešitelný pomocí standardních ani speciálních funkcí, je např. ∫cos(sin x)dx. Mathematica v tomto případě integraci neprovede, na výstupu jen zopakuje zadání:

Integrate[Cos[Sin[x]],x]

I v případě, kdy není Mathematica schopna najít primitivní funkci, je nicméně možné přibližně numericky vyčíslit hodnotu určitého integrálu. Např. pro předchozí případ v mezích od 0 do 1:

NIntegrate[Cos[Sin[x]],{x,0,1}]

. Limity

Limity se vypočítávají pomocí příkazu Limit: 

({{Limit[f[x],x->a], limita funkce f pro x->a }, {Limit[f[x],x->a,Direction->1], limita funkce f pro x->a- (zleva)}, {Limit[f[x],x->a,Direction->-1], limita funkce f pro x->a+ (zprava)}})

Jako příklad limity zprava a zleva uvedeme funkci (1/(sin(x)))  pro  x->π- resp. pro x->π+. Funkce má tento graf:

Limit[1/Sin[x],x->Pi, Direction -> 1]

Limit[1/Sin[x],x->Pi, Direction -> -1]

Na předchozím příkladu můžeme upozornit na jednu “záludnost”: v případě, že limita zleva a limita zprava nejsou shodné, je zřejmé, že funkce v daném bodě limitu nemá - přesto nabízí vnitřní algoritmus programu Mathematica ve snaze nějaké řešení najít výsledek limity zprava:

Limit[1/Sin[x],x->Pi]

Podobně si snaží “poradit” i v jiném případě, kdy limita neexistuje: funkce sin((1/x)) osciluje pro x blížící se nule nekonečněkrát mezi +1 a –1, limita pro x ->0 zjevně neexistuje:

Plot[Sin[1/x],{x,-1,1}]

Systém Mathematica vyjádří tuto skutečnost takto:

Limit[Sin[1/x],x->0]

tj. určí, že jde o neznámou hodnotu, která ale leží někde uvnitř intervalu <-1,+1>. Podobně by skončila snaha najít limitu funkce sin(x) pro x -> ∞:

Limit[Sin[x],x->Infinity]

Je tedy zřejmé, že i při použití programu Mathematica je pro správné určení limity vždy nezbytné znát průběh funkce.

Využití programu Mathematica ve statistice pro geografy

Nejpravděpodobnější využití programu Mathematica pro studenty geografie je její použití pro statistické analýzy, případně pro vizualizaci statistických dat. Proto se na tuto oblast zaměříme podrobněji a ukážeme si některé typické aplikace.

. Třídění dat a rozdělení četností

Četností rozumíme počet prvků se stejnou hodnotou statistického znaku (každý statistický soubor tak generuje své rozdělení četností) nebo četností myslíme počet prvků s hodnotami znaku patřícími do určitého intervalu (nebo třídy) – pak se bavíme o tzv. skupinovém (intervalovém) rozdělení četností.

Absolutní četnost (označujeme (Subscript[n, i])) vyjadřuje absolutní hodnotou četnost zastoupených hodnot ve statistickém souboru, resp. v daném intervalu. Relativní četnost vyjadřuje četnost pomocí relativních hodnot, výpočet je dán vztahem (Subscript[f, i])=((Subscript[n, i])/n), tj. je dána podílem jednotlivých absolutních četností (Subscript[n, i]) k rozsahu souboru n. Může být uvedena desetinným číslem, nebo procentuálně. Kumulativní četnosti absolutní (Subscript[N, i]), resp. relativní (Subscript[F, i]) udávají úhrnnou četnost statistických jednotek s hodnotami znaku menšími, nebo rovnými hodnotě znaku nebo horní hranici intervalu, při seřazení hodnot nebo intervalů podle pořadí neklesajících hodnot znaku. Kumulovanou četnost lze vyjadřovat a počítat z absolutních četností i z relativních četností.

. Třídění dat do intervalů

Nejdříve si připomeňme používanou terminologii: 
Hranice intervalu (neboli mez intervalu), ať už horní nebo dolní, určuje, které hodnoty do intervalu patří. 
Délka intervalu (též rozpětí či šířka) je rozdíl (kladný) dvou po sobě následujících dolních (nebo horních) hranic intervalů. 
Střed intervalu (označujeme ho (Subscript[x, s])) – je důležitou hodnotu, která při výpočtech z intervalového rozdělení četností zastupuje příslušný interval. Střed intervalu spočítáme jako aritmetický průměr horní a dolní hranice intervalu, neboli: (a+b) / 2, kde a (b) je dolní (horní) hranice intervalu.  

Typologie intervalů:
<a; b> – uzavřený interval, množina všech x, pro která platí a ≤ x ≤ b
(a; b) – otevřený interval, množina všech x, pro která platí a < x < b
<a; b) – uzavřený interval zleva, množina všech x, pro která platí a ≤ x < b
(a; b> – uzavřený interval zprava, množina všech x, pro která platí a < x ≤ b

Jednotlivé intervaly, do kterých sledovaný statistický soubor rozdělíme, vzniknou roztříděním jeho hodnot podle určitých kritérií: 
a)	každý interval je přesně vymezen svojí horní a dolní hranicí,
b)	jsou vymezeny tak, aby šel každý prvek jednoznačně zařadit (intervaly se nesmí překrývat),
c)	šířka intervalů by měla být stejná (pro snadnější výpočty),
d)	počet intervalů volit optimálně („ani málo, ani příliš“).

Exaktní pravidla pro určení optimálního počtu intervalů neexistují, celý algoritmus bude vždy obsahovat subjektivní prvek. Přesto se setkáme s doporučeními, jak postupovat. Následující algoritmus představuje jedno z nich: 

a)	určíme R jako rozdíl mezi maximální a minimální hodnotou (jedná se o variační rozpětí) sledovaného souboru, tzn. R=(Subscript[x, min])-(Subscript[x, max]),
b)	výpočet počtu intervalů (tříd) označme k – rozdělíme ho na tři případy:
	•	je-li rozsah souboru n > 100, pak  k = 10 log n,
	•	je-li rozsah souboru 40 < n ≤ 100, pak k=2(Sqrt[n]),
	•	je-li rozsah souboru n ≤ 40, pak k=1+1.4426 ln n,
c)	výpočet šířky intervalu h je pak dán vztahem h=(R/k).

Jak už bylo uvedeno výše, volba počtu intervalů se těmito pravidly nemusí řídit, může být intuitivní, provedená na základě analýzy struktury studovaných dat nebo na základě zkušeností.

. Grafické vyjádření rozdělení četností

Zjištěné četnosti nejpřehledněji uvádíme v tabulkách intervalového (skupinového) rozdělení četností. Pro přehlednost, nadhled, nebo lepší orientaci prezentujeme data z těchto tabulek graficky, nejčastěji pomocí histogramu, polygonu a součtové čáry.

Histogram je graf vyjadřující rozložení četností ve statistickém souboru. Jedná se o graf sloupcový, při jeho konstrukci nezáleží na tom, zda jako zdrojová data uvažujeme absolutní, nebo relativní četnosti (pro oba způsoby vypadá diagram stejně). Na vodorovnou osu x nanášíme intervaly v příslušných jednotkách, na ose svislé y se vynáší absolutní (relativní) četnosti. Jak již bylo řečeno, jedná se o sloupcový graf, kde šířce sloupce odpovídá délka (šířka) intervalu a výšce pak četnost v daném intervalu. Z vhodně sestrojeného histogramu lze vypozorovat rozložení hodnot ve statistickém souboru, jejich rozmístění okolo střední hodnoty, rovněž jejich rozptyl v souboru a dají se určit další charakteristiky, jako například modální interval aj.

Polygon je obdobou histogramu, také vyjadřuje rozložení četností ve statistickém souboru, liší se pouze typem grafu. Zatímco v případě histogramu se jedná o sloupcový graf, u polygonu jde o spojnicový typ grafu. Z vlastností polygonu vyplývá, že v případě jeho sestrojení z relativních četností ohraničuje křivka polygonu plochu o velikosti 1 (v případě vyjádření v procentech pak 100 %). Polygon i histogram tak znázorňují stejné údaje poněkud odlišným způsobem, nezáleží na výběru z absolutních nebo relativních četností.

Součtová čára slouží pro znázornění kumulovaných četností. Při konstrukci se vynáší hodnoty kumulovaných četností (nezáleží na tom, zda absolutní, či relativní, ale častěji se používají relativní) k horním hranicím intervalů, body se spojí lomenou čarou. Z grafu součtové čáry lze vyčíst řadu charakteristik, mj. hodnoty kvartilů, medián atd.

Tvorba histogramu:

Tvorba histogramu je v programu Mathematica poměrně jednoduchá, používá se příkaz Histogram[data,{(Subscript[x, min]),(Subscript[x, max]),d}], kde data je množina hodnot, pro kterou vytváříme histogram, (Subscript[x, min]) a (Subscript[x, max]) jsou meze hodnot, pro které z dat vytváříme histogram a konečně d je šířka intervalu v histogramu. Na obrázcích ukážeme, jak změní podobu histogramu právě volba šířky intervalu:

data={22,25,19,17,25,31,8,17,18,15,27,17,16,22,24,21,18,23,18,13,21,12,22,10,16,13,29,19,21,22};

Histogram[data,{6,38,3}]

. Základní statistické charakteristiky : charakteristiky úrovně a polohy

Statistickými charakteristikami (ukazateli) úrovně, resp. polohy statistického souboru, rozumíme hodnoty zkoumaného znaku, které udávají velikost jevu v daném souboru a udávají polohu četností. Slouží k porovnávání dvou i více souborů, charakteristiky úrovně vlastně zastupují všechny hodnoty statistického souboru (typicky např. aritmetický průměr). Nejčastěji používanými charakteristikami úrovně jsou střední hodnoty (průměry, modus, medián apod.), dále sem řadíme např. kvantily (kvartily, decily, percentily).

Střední hodnoty patří k nejdůležitějším a nejpoužívanějším charakteristikám statistických souborů vůbec. Obzvlášť průměr, modus a medián. O středních hodnotách se bavíme v případě různých druhů průměrů (aritmetický, harmonický, geometrický, vážený), řadíme sem také modus, medián a aritmetický střed.

Patrně nejpoužívanější statistickou charakteristikou je aritmetický průměr. Jeho výpočet je navíc velmi jednoduchý – jde o úhrn hodnot statistického znaku, dělený rozsahem souboru. Mezi základní vlastnosti aritmetického průměru patří:
a)	algebraický součet všech odchylek jednotlivých hodnot znaku od aritmetického průměru je roven nule,
b)	je-li znak konstantní, průměr je roven této konstantě,
c)	přičteme-li ke všem hodnotám znaku konstantu k, zvětší se i průměr o tuto konstantu,
d)	vynásobíme-li všechny hodnoty znaku konstantou k, je i průměr k-krát větší. 

Kromě té výhody, že výpočet aritmetického průměru je velmi jednoduchý, má tato charakteristika i některé nevýhody, a to zejména tu, že nemusí vždy podávat správnou informaci. Může být zkreslen extrémní (výraznou maximální nebo minimální) hodnotou v případě, že vycházíme ze souboru s nižším rozsahem, rovněž rozdělení hodnot v souboru může mít dva nebo více vrcholů, a ty jedním ukazatelem nelze popsat. Pak mluvíme o „typickém“ průměru – kdy je většina hodnot souboru „blízká“ průměru – a naopak o „netypickém“ průměru.

Výpočet aritmetického průměru:

K výpočtu aritmetického průměru slouží funkce Mean[{x1, x2, x3, ...}]. Pokud ji aplikujeme na data z předchozí podkapitoly (jen na připomenutí: “//N” přidáváme k příkazu, protože chceme přibližný, nikoliv přesný výsledek), dostáváme:

Mean[data]//N

Vážený průměr se využívá v případě, kdy prvky statistického souboru mají různou důležitost, tj. že každému prvku statistického souboru (Subscript[x, i]) je přiřazena jeho váha (Subscript[n, i]). Typickým, i když negeografickým, příkladem jsou získané známky ze zkoušek absolvovaných předmětů, váhami pak jsou kredity příslušné těmto předmětům. Vážený průměr dostaneme jako součet součinů prvků a jejich vah dělený celkovým součtem vah. Pro výpočet aritmetického průměru roztříděného statistického souboru (kdy neznáme vstupní data), se používá právě váženého průměru, jde pak o průměr středů intervalů a jednotlivé váhy jsou pak četnosti příslušné jednotlivým intervalům.

Výpočet váženého průměru:

Vážený průměr nemá v programu Mathematica samostatnou funkci, snadno ji ale můžeme sami nadefinovat ((Subscript[x, i]) je hodnota i-tého znaku, (Subscript[n, i])jeho váha):

VazAritmPrum[x_List,n_List]:=Sum[x[[i]]*n[[i]],{i,1,Length[x]}]/Sum[n[[i]],{i,1,Length[x]}]

Pokud by např. v souboru znaků {1,2,3,4,5,6,7,8} byla prvnímu znaku přiřazena váha 8, druhému 12, třetímu 18 ...), vypadal by výpočet takto:

VazAritmPrum[{1,2,3,4,5,6,7,8},{8,12,18,36,63,46,23,14}]//N

Geometrický průměr se používá v případech, kdy hodnoty tvoří alespoň přibližně geometrickou řadu. Tehdy má smysl uvažovat o použití geometrického průměru. V geografii se pomocí geometrického průměru analyzují zpravidla časové řady, typickou úlohou je výpočet průměrného tempa růstu. Geometrický průměr se počítá jako n-tá odmocnina ze součinu všech hodnot souboru:

Výpočet geometrického průměru:

Rovněž geometrický průměr je možné snadno nadefinovat:

GeomPrum[x_List]:=N[(Apply[Times,x])^(1/Length[x])]

Geometrický průměr dat uvedených na počátku kapitoly u histogramu by byl:

GeomPrum[data]

Geometrický průměr z čísel 3, 4 a 5:

GeomPrum[{3,4,5}]

Aritmetický střed je spíše doplňkový ukazatel, popřípadě podává prvotní informaci o rozložení hodnot ve statistickém souboru. V případě, že jsou hodnoty v něm rozloženy rovnoměrně, podává poměrně kvalitní informaci v tom smyslu, že se aritmetický střed v takovém případě blíží aritmetickému průměru. Z jeho vlastní definice (jedná se o aritmetický průměr maximální a minimální hodnoty v souboru) pak plynou i případné nevýhody. Je-li maximální, nebo minimální hodnota výrazně „vychýlena“ či „vzdálena“ od ostatních hodnot, není jeho použití vhodné a nemá příliš velkou vypovídající hodnotu.

Výpočet aritmetického středu:

Pro výpočet aritmetického středu můžeme použít např. funkce Min[x1, x2, x3, ...], která vybírá ze souboru hodnot aritmeticky nejnižší, a funkci Max[x1, x2, x3, ...]:

((Min[data]+Max[data])/2)//N

Modus je nejčetnější (nejčastější) hodnota kvantitativního znaku studovaného souboru, to v případě, že vycházíme z neroztříděného souboru, tedy ze všech jeho hodnot. Na první pohled je tak zřejmé, že pro snadné nalezení modu je vhodné seřadit hodnoty znaku vzestupně nebo sestupně. Důležitost modu se projeví při vystižení typické hodnoty znaku v daném souboru a následně při porovnávání typických hodnot souborů.

Výpočet modu:

Pro výpočet modu se užívá funkce Commonest[list]:

Commonest[data]

Medián je prvek řady (hodnot sledovaného znaku), uspořádané v neklesajícím (rostoucím) pořadí, který ji rozděluje na dvě části v tom smyslu, že polovina prvků této řady má menší hodnotu znaku a polovina má větší hodnotu znaku, než je hodnota mediánu. Jinými slovy lze prohlásit, že za medián považujeme hodnotu, která nám dělí vzestupně seřazené hodnoty statistického souboru na dvě stejné poloviny. Výhodou mediánu je, že zachycuje úroveň (polohu) hodnot lépe než průměr.

Výpočet mediánu:

Pro výpočet mediánu se užívá funkce Median[list]:

Median[data]

Kvantily se řadí mezi charakteristiky úrovně, střední hodnotou je však pouze jeden z nich, a to medián. Kvantily obecně fungují na stejném principu jako medián. Jak již bylo uvedeno, za medián považujeme hodnotu, která dělí vzestupně seřazené hodnoty statistického souboru na dvě stejné poloviny. Kvartily jsou takové hodnoty, které od sebe oddělují čtvrtiny vzestupně seřazených hodnot souboru. Jsou tedy celkem tři. První (dolní) kvartil odděluje první čtvrtinu hodnot od zbylých tří čtvrtin, druhý (prostřední) kvartil odděluje první dvě čtvrtiny od zbylých dvou a je tedy totožný s mediánem, třetí (horní) kvartil odděluje první tři čtvrtiny hodnot od poslední čtvrtiny. Obdobně v souboru identifikujeme decily, kterých je v každém statistickém souboru celkem devět a dělí ho na jednotlivé desetiny, a konečně percentily, které ho dělí na setiny. Percentilů je v souboru 99.

. Základní statistické charakteristiky : charakteristiky variability

Charakteristiky variability jsou hodnoty, které charakterizují stupeň proměnlivosti statistického znaku (resp. hodnot sledovaného jevu) v daném statistickém souboru. Měříme proměnlivost vzhledem k typické hodnotě souboru, zpravidla vzhledem k průměru nebo mediánu. Charakteristiky variability jsou důležitým doplňkem informací, které poskytují střední hodnoty.

Nejjednodušší ukazatel variability souboru je variační rozpětí, určí se jako rozdíl minimální a maximální hodnoty ve sledovaném souboru.
Jedná se o ukazatel jednoduchý, ale protože závisí pouze na dvou extrémních hodnotách, nemusí být dostatečně výstižný, maximální a minimální hodnota může být „nahodilá“. Tato ne příliš dokonalá míra variability slouží především k první informaci o variabilitě souboru.

Výpočet variačního rozpětí:

Pro výpočet variačního rozpětí můžeme použít vztah:

R[xMin_,xMax_]:=xMax-xMin

Průměrné odchylky vyjadřují míru odlišnosti (variace) od střední hodnoty (průměru, mediánu).Jsou doplňkovou informací ke střední hodnotě a spočítají se jako aritmetický průměr absolutních hodnot odchylek (rozdílů) všech hodnot znaku od střední hodnoty (aritmetického průměru, mediánu…). Pokud vydělíme průměrnou odchylku střední hodnotou (průměrem, nebo mediánem), dostaneme relativní bezrozměrnou míru.

Výpočet průměrné odchylky:

Pro výpočet průměrné odchylky můžeme použít vztah MeanDeviation[list]:

MeanDeviation[data]//N

Střední diference je definována jako aritmetický průměr absolutních hodnot všech možných vzájemných rozdílů n jednotlivých hodnot sledovaného znaku x. Je to vhodná míra variability pro soubory s malým rozsahem, v ostatních případech je její výpočet zbytečně pracný.

Výpočet střední diference:

Výpočet střední diference podle definičního vztahu:

StredDif[data_List]:=Sum[((Abs[data[[i]]-data[[j]]])/(Length[data]*(Length[data]-1))),{i,1,Length[data]},{j,1,Length[data]}]//N

A aplikace na náš pokusný soubor dat:

StredDif[data]

Rozptyl vypočítáme jako průměr ze čtverců odchylek jednotlivých hodnot znaku od jejich aritmetického průměru. Vybrané vlastnosti rozptylu: pokud odečteme od všech hodnot statistického souboru stejnou konstantou k, rozptyl souboru zůstane nezměněn, po vynásobení všech hodnot statistického souboru stejnou konstantu k musíme rozptyl vynásobit druhou mocninou této konstanty.

Výpočet rozptylu:

Výpočet rozptylu umožňuje funkce Variance[list]:

Variance[data]//N

V praxi se častěji než s rozptylem setkáváme se směrodatnou odchylkou, která je definována jako druhá odmocnina z rozptylu a vlastně se jedná o míru rozptylu hodnot sledovaného znaku (Subscript[x, i]) kolem průměru.
 
Vybrané vlastnosti směrodatné odchylky: pokud odečteme od všech hodnot statistického souboru stejnou konstantu k, směrodatná odchylka zkoumaného souboru zůstane nezměněna; po vynásobení všech hodnot statistického souboru konstantou k, se směrodatná odchylka musí vynásobit také touto konstantou.

Výpočet směrodatné odchylky:

Výpočet rozptylu je vzhledem k definici velmi jednoduchý, jde o:

SmerodOdch[x_List]:=Sqrt[Variance[x]]

V našem modelovém případě:

SmerodOdch[data]//N

Variační koeficient je dán poměrem směrodatné odchylky a aritmetického průměru a z definice tohoto poměru plyne, že jde o ukazatel (míru) bezrozměrný.

Výpočet variačního koeficientu:

Variační koeficient je možné vypočítat jako podíl směrodatné odchylky a aritmetického průměru, tj.

VarKoef[x_List]:=Sqrt[Variance[x]]/Mean[x]

V našem modelovém případě:

VarKoef[data]//N

. Základní statistické charakteristiky : charakteristiky šikmosti

Charakteristikami šikmosti (symetrie, asymetrie) myslíme míry (čísla), která charakterizují nerovnoměrné (nesouměrné) rozložení četností ve statistickém souboru. Pomocí nich jsme schopni odhadnout tvar rozdělení četností (resp. jeho souměrnost, nebo nesouměrnost). Souměrné rozdělení četností má míry šikmosti nulové.

Míra šikmosti je jednoduchou charakteristikou šikmosti co do výpočtu, ale jinak je to míra poměrně nedokonalá, ovlivněná maximální a minimální hodnotou souboru, které mohou být „nahodilé“. Hodnoty míry šikmosti se pohybují v intervalu (-1;1).

Koeficient šikmosti je, na rozdíl od míry šikmosti založené na variačním rozpětí, nebo založené na rozpětí kvantilů, dokonalejším ukazatelem. Je definován jako aritmetický průměr z třetích mocnin odchylek jednotlivých hodnot znaku od aritmetického průměru vydělený třetí mocninou směrodatné odchylky. Je-li koeficient > 0, pak je rozdělení četností zešikmeno doleva (kladná šikmost), pokud je roven 0, pak je rozdělení četností souměrné (nulová šikmost) a je-li koeficient < 0, pak je rozdělení četností zešikmeno doprava (záporná šikmost).

Výpočet koeficientu šikmosti:

Koeficient šikmosti je v programu Mathematica preddefinován jako Skewness[list]. V našem případě:

Skewness[data]//N

. Základní statistické charakteristiky : charakteristiky špičatosti

Jedná se o čísla, která charakterizují koncentraci prvků souboru v blízkosti určité hodnoty znaku, jejich úkolem je poskytnout představu o tvaru rozdělení četností co do špičatosti nebo plochosti.

Koeficient špičatosti je definován jako průměrná hodnota součtu čtvrtých mocnin odchylek hodnot znaku od aritmetického průměru dělených čtvrtou mocninou směrodatné odchylky. Pokud je koeficient > 0, pak je rozdělení četností kladně zašpičatělé (špičaté), je-li nulový, pak je rozdělení četností normálně zašpičatělé a pokud je < 0, pak je rozdělení četností záporně zašpičatělé (ploché).

Výpočet koeficientu špičatosti:

Koeficient špičatosti je v programu Mathematica předdefinován jako Kurtosis[list]. V našem případě:

Kurtosis[data]//N

. Závislosti mezi náhodnými veličinami

V praxi se často dostáváme do situace, kdy je nutné analyzovat a charakterizovat vztah dvou jevů (resp. dvou náhodných veličin), tento vztah (případně závislost) změřit, a pokud existuje, tak ho vyjádřit matematicky, nejlépe pomocí funkce. Nejčastěji se to dělá pomocí korelačního počtu, resp. regresní analýzou.

Korelační počet

Úkolem korelačního počtu je změřit těsnost vztahu mezi dvěma proměnnými, nebo těsnost změny hodnoty znaku závisle proměnné při změně hodnoty znaku nezávisle proměnné. Stanovení této těsnosti (těsnosti korelační závislosti) je nutným krokem, jež předchází regresní analýze a vyjádření této závislosti matematickou funkcí. Korelační koeficient se řadí k nejdůležitějším charakteristikám hodnocení korelační závislosti. Předpokládá linearitu studovaných proměnných. Zmíněnou těsnost závislosti dvou jevů (dvou náhodných veličin) X a Y změříme pomocí charakteristiky „koeficient korelace“:

(Subscript[r, xy])=(((Underoverscript[(1/n)∑, (i=1), n])((Subscript[x, i])-(OverBar[x]))((Subscript[y, i])-(OverBar[y])))/(Sqrt[(Underoverscript[(1/n)∑, (i=1), n])((((Subscript[x, i])-(OverBar[x])))^2)(Underoverscript[.(1/n)∑, (i=1), n])((((Subscript[y, i])-(OverBar[y])))^2)]))

Použití korelačního koeficientu předpokládá normální rozdělení obou výběrů (pokud tomu tak není, je třeba oba výběry na toto rozdělení převést), další podmínkou je linearita vztahu jevů X a Y, tzn. že regresní funkcí musí být přímka. Výše zmiňovaný koeficient se nazývá v odborné literatuře často též „Pearsonův korelační koeficient“. V praxi se též můžeme setkat ještě s tzv. „Spearmanovým koeficientem“, který nebere v potaz jednotlivé hodnoty sledovaných jevů, ale jejich pořadí. Důležitým prvkem korelační a regresní analýzy, který nám může okamžitě napovědět o vztahu mezi dvěma veličinami je tzv. „korelační pole (diagram)“, což je bodový graf zobrazující obě náhodné veličiny X a Y.

Pro (Pearsonův) korelační koeficient platí, že:
a)	hodnoty se pohybují v intervalu <–1; 1>,
b)	v případě, že (Subscript[r, xy]) = 1, hovoříme o tzv. přímé korelační závislosti, kdy přírůstek nezávisle proměnné znamená přírůstek závisle proměnné,
c)	v případě, že (Subscript[r, xy]) = –1, hovoříme o tzv. nepřímé korelační závislosti, kdy přírůstek nezávisle proměnné znamená úbytek závisle proměnné,
d)	statistická závislost (resp. její významnost) se posuzuje pomocí t-testu, testujeme korelační koeficient, testové kritérium t je dáno vztahem (t-rozdělení s n–2 stupni volnosti):

t=((Subscript[r, xy])/(Sqrt[1-((Subscript[r, xy])^2)])) . (Sqrt[n-2]) 


V programu Mathematica se korelační koeficient vypočte pomocí příkazu Correlation[v1, v2], kde v1 a v2 jsou 2 vektory, resp. sady dat, např. {(Subscript[a, 1]),(Subscript[a, 2]), ...} a {(Subscript[b, 1]),(Subscript[b, 2]), ...}.

Jako příklad výpočtu se pokusíme prověřit těsnost korelační závislosti mezi proměnnými X a Y v tabulce: 
({{x, 25, 45, 34, 192, 136, 218, 221, 201, 228, 158, 64, 75}, {y, 155, 930, 383, 1443, 1069, 1460, 1208, 1325, 491, 785, 186, 222}})

Correlation[{25,45, 34, 192, 136, 218, 221, 201, 228, 158, 64, 75},{155, 930, 383, 1443, 1069, 1460, 1208, 1325, 491, 785, 186, 222.}]

Regresní analýza

Cílem regresní analýzy je nalézt tvar (předpis) funkce, která co nejlépe vystihuje závislost mezi jevy X a Y (tzv. regresní funkce). Obvykle jej volíme tak, aby co nejvíce odpovídal vyšetřované nebo uvažované závislosti. Bývá zvykem volit regresní funkci s co nejmenším počtem regresních koeficientů, avšak dostatečně flexibilní a s požadovanými vlastnostmi (např. monotonie, předepsané hodnoty, asymptoty aj.). Vychází se přitom povětšinou ze zkušenosti, avšak v současné době se při realizaci regresní analýzy s využitím statistických softwarů dají často úspěšně použít vhodné databáze regresních funkcí. Regresní funkce rozdělujeme na lineární a nelineární (vzhledem k regresním koeficientům). Některé nelineární regresní funkce (např. kvadratickou, logaritmickou, exponenciální regresi) můžeme vhodnou transformací převést na lineární (např. mocninnou nebo exponenciální funkci logaritmujeme). Jde sice o běžně používaný postup, kdy však nakonec řešíme jiný regresní model nežli původně uvažovaný.

Nejjednodušší případ regresní funkce je lineární regrese, kdy regresní čárou je přímka. Tato přímka je dána vztahem y = a + bx, který vyjadřuje výskyt hodnot y (závisle proměnná), očekávaných s největší pravděpodobností a podmíněných změnami x (nezávisle proměnná). Průběh regresní přímky (vyjádření koeficientů a, b) je nejčastěji počítán tzv. metodou nejmenších čtverců. Metoda spočívá v podmínce, aby se hledaná přímka co nejvíce přimykala bodům korelačního pole tak, že součet druhých mocnin (čtverců) vzdáleností bodů pole od přímky musí být minimální.

Příklad: pro proměnné x a y z předchozího příkladu vytvoříme nejdříve bodový graf:

ListPlot[{{25,155},{45,930},{34,383},{192,1443},{136,1069},{218,1460},{221,1208},{201,1325},{228,491},{158,785},{64,186},{75,222}}, PlotStyle->PointSize[0.02],AxesLabel->{"data x","data y"}]

K výpočtu regresní přímky používá Mathematica příkaz LinearModelFit. Nejdříve si označíme soubor dat jako např. data123:

data123={{25,155},{45,930},{34,383},{192,1443},{136,1069},{218,1460},{221,1208},{201,1325},{228,491},{158,785},{64,186},{75,222}};

Regresní přímku pak získáme:

primka=LinearModelFit[data123,x, x]

Pro převedení do tvaru funkce:

Normal[primka]

Poměrně jednoduché je i její zobrazení v grafu:

Show[ListPlot[data123, PlotStyle->PointSize[0.02]], Plot[primka[x],{x,0,230}, PlotStyle->RGBColor[1,0,0]],AxesLabel->{"údaje x","údaje y"}]

Podle stejného principu lze najít i nelineární regrese, příslušný příkaz je NonlinearModelFit [{(Subscript[y, 1]),(Subscript[y, 2]),…},form,{(Subscript[β, 1]),…},x], kde je {(Subscript[y, 1]),(Subscript[y, 2]),…} soubor dat, form je předpis regresní funkce, (Subscript[β, 1]) ... pak její parametry. Např. pokud bychom chtěli najít “regresní” hyperbolu:

krivka=NonlinearModelFit[data123, e/x+h,{e,h},x]

Show[ListPlot[data123, PlotStyle->PointSize[0.02]], Plot[krivka[x],{x,0,230}, PlotStyle->RGBColor[1,0,0]],AxesLabel->{"údaje x","údaje y"}]

Export a úprava souborů formátu shp v programu Mathematica

Pozn. Pro přílišnou délku kódu u obou programů v této kapitole je v tištěné verzi schován. V internetové verzi (soubor *.nb) je možné si ho zobrazit.

Program Mathematica umožňuje i zpracování souborů shp. Jejich export a základní zpracování je poměrně komplikovaným úkolem, který čtenářům tohoto textu zjednodušíme programem:

Manipulate[
DynamicModule[{path="",file,fileLabels,window=1,labels={},lblListU,dataG,dataP,col="SolarColors",minG=200000,maxG=800000,stepG=100000,nMax,gradient,mapPieces,fileData,gradNearest,a=4,b=2,minP,maxP,stepP,hran1P=1000000,hran2P=2500000,hran3P=4000000,nearP,skalaP,position,fileDataTotal,meritkoG=100000,meritkoP=100000},
Column[{
Dynamic@Switch[window,

1,Column[{FileNameSetter[Dynamic[path],"Open",{"SHP"->{"*.shp"}}],Row[{Style["Cesta:"],Spacer[10],Dynamic@path}],Button["Načíst",If[path=="",Beep[];MessageDialog["Není vybrán žádný soubor."],file=Import[path,"Data"];window=2]]}],

2,Column[{
Style["Vyberte data, se kterými chcete dále pracovat"],

fileLabels=Flatten["Labels"/.file];
DynamicModule[{fL=fileLabels,lblList,d},Array[lblList,Length[fL]];
Table[lblList[i]=False,{i,Length[fL]}];
d=Floor[Length[fL]/11];
Column[{
Row[Join[Table[Column[Table[With[{n=n},Row[{Checkbox[Dynamic[lblList[n]]],Spacer[10],fL[[n]]}]],{n,k*11-10,k*11}]],{k,d}],{Column[Table[With[{n=n},Row[{Checkbox[Dynamic[lblList[n]]],Spacer[10],fL[[n]]}]],{n,d*11+1,Length[fL]}]]}],Spacer[5]],
Row[{
Button["Pokračuj",If[MemberQ[Table[lblList[k],{k,Length[fL]}],True],fileLabels=Cases[Transpose[{fL,Table[lblList[k],{k,Length[fL]}]}],{l_,True}->l];window=3,CreateDialog[{TextCell["Není vybraná oblast dat."],DefaultButton[]}]]],
Button["Zpět",window=1]
}]
}]]
}],

3,mapPieces=Flatten["Geometry"/.file];
Column[{
Style[Dynamic[ToUpperCase@First["LayerName"/.file]],20,Bold],
TabView[{
"Gradient"->Row[{
ListPicker[Dynamic[dataG],fileLabels,Multiselection->False],

Column[{
PopupMenu[Dynamic[col],{"SolarColors"->ImageRotate[ColorData["SolarColors","Image"],180 Degree],"ValentineTones"->ImageRotate[ColorData["ValentineTones","Image"],180 Degree],Delimiter,Delimiter,"TemperatureMap"->ImageRotate[ColorData["TemperatureMap","Image"],0 Degree]},"Typ gradientu"],

Grid[{
{Style["Min"],Spacer[5],InputField[Dynamic[minG],Number,FieldSize->{5,2}],
Spacer[10],Style["Šířka kroku:"]},
{Style["Max"],Spacer[5],InputField[Dynamic[maxG],Number,FieldSize->{5,2}],Spacer[10],InputField[Dynamic[stepG],Number,FieldSize->{5,2}]},
{Button["Mapa",
nMax=Round[((maxG-minG)/stepG)];
gradNearest=Nearest[Table[minG+((2n-1)/2)stepG,{n,nMax}]];
gradient=ColorData[{col,If[col=="TemperatureMap",{minG,maxG},{maxG,minG}]}];
fileData=Flatten[dataG/.("LabeledData"/.file)];
CreateDialog[
(*fileData*)
Graphics[{
EdgeForm[Black],Table[{FaceForm[If[fileData[[k]]<minG||fileData[[k]]>maxG,LightGray,gradient[First@gradNearest[fileData[[k]]]]]],mapPieces[[k]]},{k,Length[(*mapPieces*)fileData]}],

(*stupnice*)Inset[Graphics[{EdgeForm[Black],Table[{FaceForm[gradient[minG+((2k-1)/2)stepG]],Rectangle[{a*(k-1)-Round[(nMax/2)]a,0},{k*a-Round[(nMax/2)]a,b}]},{k,nMax}],Table[Text[minG+h*stepG,{a*(h-Round[(nMax/2)]),-.5}],{h,0,nMax}]},ImageSize->250],Scaled[{0,-.1}]],

(*meritko*)Inset[Graphics[{EdgeForm[Black],FaceForm[Black],Rectangle[{0,0-.0008Log[meritkoG]},{.5,.025-.0008Log[meritkoG]}],FaceForm[White],Rectangle[{.5,0-.0008Log[meritkoG]},{1,.025-.0008Log[meritkoG]}],Text[If[Length[IntegerDigits[meritkoG]]>3,Style[Row[{FromDigits@Drop[IntegerDigits[meritkoG],-3],Spacer[5],"km"}],14],Row[{meritkoG,"m"}]],{.5,.006Log[meritkoG+10000]}]}],ImageScaled[{0.7,.95}],Automatic,{meritkoG,Automatic}]
},ImageSize->800]
]],SpanFromLeft},
{Row[{"Měřítko mapy",InputField[Dynamic@meritkoG,FieldSize->{5,1}]},Spacer[5]],SpanFromLeft}
},Spacings->0]
}],
Dynamic@Histogram[Flatten[dataG/.("LabeledData"/.file)],"Sturges",ImageSize->{400,350}]
},Spacer[10]],

"Pie Chart"->Row[{
Column[{
ListPicker[Dynamic[dataP],fileLabels,Multiselection->True],
Style["Podržte CTRL \npro výběr \nvíce hodnot",10]
}],

Grid[{

{Style["Velikost 1"],Spacer[5],InputField[Dynamic[hran1P],Number,FieldSize->{5,2}]},
{Style["Velikost 2"],Spacer[5],InputField[Dynamic[hran2P],Number,FieldSize->{5,2}]},
{Style["Velikost 3"],Spacer[5],InputField[Dynamic[hran3P],Number,FieldSize->{5,2}]},
{Button["Mapa",
If[hran1P<hran2P<hran3P,
skalaP[s_]:=u s+v/.Solve[{30==u hran1P+v,60==u hran3P+v},{u,v}];
nMax=Round[((maxG-minG)/stepG)];
fileData=Transpose[Flatten[dataP/.("LabeledData"/.file),1]];
fileDataTotal=Map[Total,Transpose[Flatten[{"OB91","OB01","OB11"}/.("LabeledData"/.file),1]]];
position=Transpose@Flatten[{"SX_G","SY_G"}/.("LabeledData"/.file),1];
CreateDialog[
Graphics[{
EdgeForm[Black],FaceForm[Gray],

mapPieces,

Table[Inset[PieChart[fileData[[p]],ChartStyle->24,ImageSize->Round[skalaP[fileDataTotal[[p]]]]],position[[p]]],{p,Length[fileData]}],

(*stupnice*)Table[Inset[Graphics[Circle[],ImageSize->Round[skalaP[{hran1P,hran2P,hran3P}[[k]]]]],Scaled[{-.05+.1*(3-k),-.05}]],{k,3}],
Table[Inset[Graphics[Text[Style[{hran1P,hran2P,hran3P}[[k]],Bold,12],{0,1.2}]],Scaled[{-.05+.1*(3-k),-.05}]],{k,3}],

(*meritko*)Inset[Graphics[{EdgeForm[Black],FaceForm[Black],Rectangle[{0,0-.0008Log[meritkoP]},{.5,.025-.0008Log[meritkoP]}],FaceForm[White],Rectangle[{.5,0-.0008Log[meritkoP]},{1,.025-.0008Log[meritkoP]}],Text[If[Length[IntegerDigits[meritkoP]]>3,Style[Row[{FromDigits@Drop[IntegerDigits[meritkoP],-3],Spacer[5],"km"}],14],Row[{meritkoP,"m"}]],{.5,.006Log[meritkoP+10000]}]}],ImageScaled[{0.7,.95}],Automatic,{meritkoP,Automatic}]
},ImageSize->800]
],
Beep[];CreateDialog[TextCell["Zvolené hranice nejdou vzestupně za sebou!"]]]
],SpanFromLeft},

{Row[{"Měřítko mapy",InputField[Dynamic@meritkoP,FieldSize->{5,1}]},Spacer[5]],SpanFromLeft}
},Spacings->0],
Dynamic@Histogram[If[dataP≠{},Map[Total,Transpose@Flatten[dataP/.("LabeledData"/.file),1]],{}],"Sturges",ImageSize->{400,350}]
},Spacer[10]]
}],
Button["Zpět",window=2,ImageSize->50]
}]]
}]
],Style["NAČÍTÁNÍ A ZPRACOVÁNÍ MAP",30,Bold,FontFamily->"TimesNewRoman"],ImageMargins->{800,400}]

Popis funkcí programu:

V 1. okně se zmáčkne tlačítko "Browse..." -> Musí se najít *.shp soubor, kteý chceme načíst. Při úspěšném načtení se u "Cesta: " zobrazí umístění daného souboru. Stiskem "Načíst" se obsah *.shp souboru načte a otevře se následující okno. V tomto okně je nutno zaškrnout data, se kterými se má v dalším pracovat, výběr se potvrdí tlačítkem "Pokračuj", otevře se finální okno. V průběhu se dá vracet mezi jednotlivými okny pomocí tlačítka "Zpět". Ve finálním okně se provede výběr typu mapy (kartogram nebo koláčové diagramy). Histogram vpravo slouží jako přehled o tom, jaká data tam jsou zpracovávána a jakých dosahují hodnot. Jakmile si nastaví požadované parametry, mapa se vykreslí stiskem tlačítka "Mapa".

({{}, {Obr. 1: Mapa krajů ČR - počet obyvatel v roce 2001 (Kartogram) }})

({{}, {Obr. 2: Mapa krajů ČR - počet obyvatel v letech 1991, 2001 a 2011 (Koláčový diagram)}})

Následující program je určen pro zobrazení map jednotlivých krajů či okresů v České Republice. Před jeho spuštěním je třeba načíst potřebné soubory, obsahující data a mapy nutná ke správnému chodu programu.

kraM=Flatten["Geometry"/.Import[NotebookDirectory[]<>"kraje.shp","Data"],1];
kraD=Import[NotebookDirectory[]<>"kraje.dbf","LabeledData"];
kraD=Table[MapThread[Rule,{kraD[[All,1]],kraD[[All,2,n]]}],{n,Length[kraD[[1,2]]]}];

okrM=Flatten["Geometry"/.Import[NotebookDirectory[]<>"okresy.shp","Data"],1];
okrD=Import[NotebookDirectory[]<>"okresy.dbf","LabeledData"];
okrD=Table[MapThread[Rule,{okrD[[All,1]],okrD[[All,2,n]]}],{n,Length[okrD[[1,2]]]}];

orpM=Flatten["Geometry"/.Import[NotebookDirectory[]<>"SO_ORP.shp","Data"],1];
orpD=Import[NotebookDirectory[]<>"SO_ORP.dbf","LabeledData"];
orpD=Table[MapThread[Rule,{orpD[[All,1]],orpD[[All,2,n]]}],{n,Length[orpD[[1,2]]]}];

obce=Import[NotebookDirectory[]<>"obce.shp","Data"];
obeM=Flatten["Geometry"/.obce,1];
obeD=Flatten["LabeledData"/.obce,1];
obeD=Table[MapThread[Rule,{obeD[[All,1]],obeD[[All,2,n]]}],{n,Length[obeD[[1,2]]]}];

Manipulate[
map=Graphics[{FaceForm[LightGray],EdgeForm[Black],
(*zobrazení map*)
If[writeData,
If[switch,
(*gradient*){Switch[selected[[1]],
"OKR",Table[{FaceForm[gradient[First@Flatten@Position[gradRozsah,First[gradNearest[datab/.okrD[[selected[[2,ok]]]]]]]]],okrM[[selected[[2,ok]]]]},{ok,Length[selected[[2]]]}],
"ORP",Table[{FaceForm[gradient[First@Flatten@Position[gradRozsah,First[gradNearest[datab/.orpD[[selected[[2,or]]]]]]]]],orpM[[selected[[2,or]]]]},{or,Length[selected[[2]]]}],
"OBE",Table[{FaceForm[gradient[First@Flatten@Position[gradRozsah,First[gradNearest[datab/.obeD[[selected[[2,ob]]]]]]]]],obeM[[selected[[2,ob]]]]},{ob,Length[selected[[2]]]}]
],
(*gradientBar*){Transpose[{
Table[gradient[c],{c,Length[gradRozsah]}],Table[Rectangle[(*násobek*)coordG[[2]]*{r-Length[gradRozsah],0}+coordG[[1]],(*nasobek*)coordG[[2]]*{(r+1)-Length[gradRozsah],1}+coordG[[1]]],{r,0,Length[gradRozsah]-1}]}],
(*txt*)Table[Text[Style[(gradRozsah[[l]]+gradRozsah[[l+1]])/2,Bold,12],(*nasobek*){coordG[[2,1]],-1500}*{l-Length[gradRozsah],1}+coordG[[1]]],{l,Length[gradRozsah]-1}]}
},

(*piechart*){Switch[selected[[1]],
"OKR",{selection,Table[Inset[PieChart[datab/.okrD[[selected[[2,ok]]]],ChartStyle->24,ImageSize->Which[Total[datab/.okrD[[selected[[2,ok]]]]]≤pieChartSkala[[1]],10*(size/250),Total[datab/.okrD[[selected[[2,ok]]]]]≤pieChartSkala[[2]],20*(size/250),True,30*(size/250)]],{"SX_G","SY_G"}/.okrD[[selected[[2,ok]]]]],{ok,Length[selected[[2]]]}]},
"ORP",{selection,Table[Inset[PieChart[datab/.orpD[[selected[[2,or]]]],ChartStyle->24,ImageSize->Which[Total[datab/.orpD[[selected[[2,or]]]]]≤pieChartSkala[[1]],10*(size/250),Total[datab/.orpD[[selected[[2,or]]]]]≤pieChartSkala[[2]],20*(size/250),True,30*(size/250)]],{"SX_G","SY_G"}/.orpD[[selected[[2,or]]]]],{or,Length[selected[[2]]]}]},
"OBE",{selection,Table[Inset[PieChart[datab/.obeD[[selected[[2,ob]]]],ChartStyle->24,ImageSize->Which[Total[datab/.obeD[[selected[[2,ob]]]]]≤pieChartSkala[[1]],10*(size/250),Total[datab/.obeD[[selected[[2,ob]]]]]≤pieChartSkala[[2]],20*(size/250),True,30*(size/250)]],{"SX_G","SY_G"}/.obeD[[selected[[2,ob]]]]],{ob,Length[selected[[2]]]}]}],

(*skala*)Inset[Graphics@Table[{Text[Style[pieChartSkala[[k]],Bold,12],{0,k*0.5+.1}],Circle[{0,0.25*k},0.25k]},{k,3}],coordG[[1]]]}
],

(*čistá mapa*)selection],meritko},ImageSize->size],

{selection,ControlType->None},{selected,ControlType->None},{makroM,ControlType->None},{{size,850,"Velikost"},100,1000,50},{meritko,ControlType->None},{writeData,ControlType->None},{switch,ControlType->None},{datab,ControlType->None},{gradient,ControlType->None},{gradRozsah,ControlType->None},{gradNearest,ControlType->None},{coordG,ControlType->None},{dir,ControlType->None},{fileName,ControlType->None},{map,ControlType->None},{pieChartSkala,ControlType->None},

Button[Style["Volba mapy"],
CreateDialog[DynamicModule[{makro,vKraj,vOkres,hranice=4},

Row[{
Dynamic@Graphics[{EdgeForm[Black],FaceForm[LightGray],
(*náhled map*)Switch[makro,

1,{If[vKraj==2,
FilledCurve[{{Line[Take[kraM[[vKraj,1,1,1,1]],{1,-1,200}]]},{Line[Take[kraM[[vKraj,1,2,1,1]],{1,-1,200}]]}}],
Polygon[Take[kraM[[vKraj,1]],{1,-1,200}]]],
Switch[hranice,
1,okrM[[#]]&/@Cases[{"OBJECTID","KN"}/.okrD,{x_,"KN"/.kraD[[vKraj]]}->x],
2,orpM[[#]]&/@Cases[{"OBJECTID","NK"}/.orpD,{x_,"NK"/.kraD[[vKraj]]}->x],
3,obeM[[#]]&/@Cases[{"OBJECTID","NK"}/.obeD,{x_,"NK"/.kraD[[vKraj]]}->x],
_,Null]},

2,{Polygon[Take[okrM[[vOkres,1]],{1,-1,100}]],
Switch[hranice,
2,orpM[[#]]&/@Cases[{"OBJECTID","KODOK"}/.orpD,{x_,"KODOK"/.okrD[[vOkres]]}->x],
3,obeM[[#]]&/@Cases[{"OBJECTID","KODOK"}/.obeD,{x_,"KODOK"/.okrD[[vOkres]]}->x],
_,Null]},

_,Null]
},Background->Lighter[Gray,0.9]],

Column[{(*panel s tlačítky*)
(*přepínání makra*)RadioButtonBar[Dynamic[makro],{1->"Kraj",2->"Okres"}],

(*volba kraje*)Row[{Style["Kraj"],Spacer[10],PopupMenu[Dynamic[vKraj],MapThread[Rule,Transpose[{"OBJECTID","NAZKR"}/.kraD]],Enabled->Dynamic[makro==1]]}],

(*volba okresu*)Row[{Style["Okres"],Spacer[10],Dynamic@If[makro==2,PopupMenu[Dynamic[vOkres],MapThread[Rule,Transpose[Cases[{"OBJECTID","NAZOK","KN"}/.okrD,{x_,y_,"KN"/.kraD[[vKraj]]}->{x,y}]]]],""]}],

(*volba jemnosti hranic*)Row[{Style["Hranice"],Spacer[15],Dynamic[If[makro==1,RadioButtonBar[Dynamic[hranice],{1->"Okresy",2->"ORP",3->"Obce",4->"Blank"}],RadioButtonBar[Dynamic[hranice],{2->"ORP",3->"Obce",4->"Blank"}]]]}],

DefaultButton[DialogReturn[
{selection=Switch[makro,
1,{kraM[[vKraj]],
Switch[hranice,
1,okrM[[#]]&/@Cases[{"OBJECTID","KN"}/.okrD,{x_,"KN"/.kraD[[vKraj]]}->x],
2,orpM[[#]]&/@Cases[{"OBJECTID","NK"}/.orpD,{x_,"NK"/.kraD[[vKraj]]}->x],
3,obeM[[#]]&/@Cases[{"OBJECTID","NK"}/.obeD,{x_,"NK"/.kraD[[vKraj]]}->x],
_,Null]},
2,{okrM[[vOkres]],
Switch[hranice,
2,orpM[[#]]&/@Cases[{"OBJECTID","KODOK"}/.orpD,{x_,"KODOK"/.okrD[[vOkres]]}->x],
3,obeM[[#]]&/@Cases[{"OBJECTID","KODOK"}/.obeD,{x_,"KODOK"/.okrD[[vOkres]]}->x],
_,Null]}],
selected=If[vKraj≠1,
Switch[makro,
1,Switch[hranice,
1,{"OKR",Cases[{"OBJECTID","KN"}/.okrD,{x_,"KN"/.kraD[[vKraj]]}->x]},
2,{"ORP",Cases[{"OBJECTID","NK"}/.orpD,{x_,"NK"/.kraD[[vKraj]]}->x]},
3,{"OBE",Cases[{"OBJECTID","NK"}/.obeD,{x_,"NK"/.kraD[[vKraj]]}->x]},
_,Null],
2,Switch[hranice,
2,{"ORP",Cases[{"OBJECTID","KODOK"}/.orpD,{x_,"KODOK"/.okrD[[vOkres]]}->x]},
3,{"OBE",Cases[{"OBJECTID","KODOK"}/.obeD,{x_,"KODOK"/.okrD[[vOkres]]}->x]},
_,Null]]],
meritko=Switch[makro,
1,Switch[vKraj,
1,{Table[{If[OddQ[n],Black,White],EdgeForm[Black],Rectangle[{2000n-2000,0}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[kraM[[1,1]]]),{2000n,1250}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[kraM[[1,1]]])]},{n,5}],
Text[Style[0,12,Bold],{2000*1-2000,2125}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[kraM[[1,1]]])],Text[Style["10 km",12,Bold],{2000*6-2000,2125}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[kraM[[1,1]]])]},
2,{Table[{If[OddQ[n],Black,White],EdgeForm[Black],Rectangle[{5000n-5000,0}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[kraM[[2,1,1,1,1]]]),{5000n,2500}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[kraM[[2,1,1,1,1]]])]},{n,5}],
Text[Style[0,12,Bold],{5000*1-5000,4000}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[kraM[[2,1,1,1,1]]])],
Text[Style["25 km",12,Bold],{5000*6-5000,4000}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[kraM[[2,1,1,1,1]]])]},
_,{Table[{If[OddQ[n],Black,White],EdgeForm[Black],Rectangle[{5000n-5000,0}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[kraM[[vKraj,1]]]),{5000n,2500}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[kraM[[vKraj,1]]])]},{n,5}],
Text[Style[0,12,Bold],{5000*1-5000,4000}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[kraM[[vKraj,1]]])],
Text[Style["25 km",12,Bold],{5000*6-5000,4000}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[kraM[[vKraj,1]]])]}],
2,{Table[{If[OddQ[n],Black,White],EdgeForm[Black],Rectangle[{2000n-2000,0}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[okrM[[vOkres,1]]]),{2000n,1250}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[okrM[[vOkres,1]]])]},{n,5}],
Text[Style[0,12,Bold],{2000*1-2000,2125}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[okrM[[vOkres,1]]])],Text[Style["10 km",12,Bold],{2000*6-2000,2125}+(*posun*){-10000,-15000}+(Min[#]&/@Transpose[okrM[[vOkres,1]]])]},
_,Null],
coordG=Switch[makro,
1,Switch[vKraj,
1,{(*posun*){15000,-5000}+(Min[#]&/@Transpose[kraM[[1,1]]]),{15000,4000}},
2,{(*posun*){30000,-6000}+(Min[#]&/@Transpose[kraM[[2,1,1,1,1]]]),{10000,2500}},
3,{(*posun*){30000,-6000}+(Min[#]&/@Transpose[kraM[[vKraj,1]]]),{10000,2500}},
_,{(*posun*){30000,-5000}+(Min[#]&/@Transpose[kraM[[vKraj,1]]]),{10000,2500}}],
2,{(*posun*){15000,-10000}+(Min[#]&/@Transpose[okrM[[vOkres,1]]]),{5000,1250}},
_,Null],
writeData=False}
]]}]
}]
]]
],

(*volba dat*)Button["Data",
CreateDialog[DynamicModule[{dataG={},dataP={},col,minGrad,maxGrad,minPie,maxPie,minGradVol,maxGradVol,minPieVol,maxPieVol,gradVol,pieVol,gradRoz={},krok=5,showData=False,jemn=100000},
TabView[{
"Gradient"->Row[{

Switch[selected[[1]],
"OKR",ListPicker[Dynamic[dataG],DeleteCases[DeleteCases[Transpose[{okrD[[1,All,1]],Apply[And,#]&/@Table[NumberQ[#]&/@okrD[[All,c,2]],{c,Length[okrD[[1,All,1]]]}]}],{__,False}],{"OBJECTID",__}][[All,1]],Multiselection->False],
"ORP",ListPicker[Dynamic[dataG],DeleteCases[DeleteCases[Transpose[{orpD[[1,All,1]],Apply[And,#]&/@Table[NumberQ[#]&/@orpD[[All,c,2]],{c,Length[orpD[[1,All,1]]]}]}],{__,False}],{"OBJECTID",__}][[All,1]],Multiselection->False],
"OBE",ListPicker[Dynamic[dataG],DeleteCases[DeleteCases[Transpose[{obeD[[1,All,1]],Apply[And,#]&/@Table[NumberQ[#]&/@obeD[[All,c,2]],{c,Length[obeD[[1,All,1]]]}]}],{__,False}],{"OBJECTID",__}][[All,1]],Multiselection->False],
_,Null],

Column[{
PopupMenu[Dynamic[col],{"SolarColors"->ImageRotate[ColorData["SolarColors","Image"],180 Degree],"ValentineTones"->ImageRotate[ColorData["ValentineTones","Image"],180 Degree],Delimiter,Delimiter,"TemperatureMap"->ImageRotate[ColorData["TemperatureMap","Image"],0 Degree]},"Typ gradientu"],

Grid[{
{Style["Min"],Spacer[5],InputField[Dynamic[If[dataG≠{},minGrad=Min[Switch[selected[[1]],
"OKR",dataG/.okrD[[selected[[2]]]],
"ORP",dataG/.orpD[[selected[[2]]]],
"OBE",dataG/.obeD[[selected[[2]]]]]]]],Number,Enabled->False,FieldSize->5,Background->Dynamic[If[gradVol,LightGray]]],
InputField[Dynamic[minGradVol],Number,FieldSize->5,Enabled->Dynamic@gradVol,Background->Dynamic[If[!gradVol,LightGray]]],Spacer[10],Style["Šířka kroku:"]},
{Style["Max"],Spacer[5],InputField[Dynamic[If[dataG≠{},maxGrad=Max[Switch[selected[[1]],
"OKR",dataG/.okrD[[selected[[2]]]],
"ORP",dataG/.orpD[[selected[[2]]]],
"OBE",dataG/.obeD[[selected[[2]]]]]]]],Number,Enabled->False,FieldSize->5,Background->Dynamic[If[gradVol,LightGray]]],InputField[Dynamic[maxGradVol],Number,FieldSize->5,Enabled->Dynamic@gradVol,Background->Dynamic[If[!gradVol,LightGray]]],Spacer[10],InputField[Dynamic[krok],FieldSize->2]},
{RadioButtonBar[Dynamic[gradVol],{False->"Použít defaultní",True->"Nastavit vlastní"}],SpanFromLeft}
},Spacings->0],

DefaultButton[DialogReturn[{switch=True,datab=First[dataG],gradient=ColorData[{col,If[col=="TemperatureMap",{1,krok},{krok,1}]}],gradRoz=If[gradVol,Table[minGradVol+N[(maxGradVol-minGradVol)/(2krok)]*(2n-1),{n,krok}],Table[minGrad+N[(maxGrad-minGrad)/(2krok)]*(2n-1),{n,krok}]],gradRozsah=gradRoz,gradNearest=Nearest[gradRoz],writeData=True}]]
}],Spacer[20]
}],


"PieChart"->Row[{
Switch[selected[[1]],
"OKR",ListPicker[Dynamic[dataP],DeleteCases[DeleteCases[Transpose[{okrD[[1,All,1]],Apply[And,#]&/@Table[NumberQ[#]&/@okrD[[All,c,2]],{c,Length[okrD[[1,All,1]]]}]}],{__,False}],{"OBJECTID",__}][[All,1]]],
"ORP",ListPicker[Dynamic[dataP],DeleteCases[DeleteCases[Transpose[{orpD[[1,All,1]],Apply[And,#]&/@Table[NumberQ[#]&/@orpD[[All,c,2]],{c,Length[orpD[[1,All,1]]]}]}],{__,False}],{"OBJECTID",__}][[All,1]]],
"OBE",ListPicker[Dynamic[dataP],DeleteCases[DeleteCases[Transpose[{obeD[[1,All,1]],Apply[And,#]&/@Table[NumberQ[#]&/@obeD[[All,c,2]],{c,Length[obeD[[1,All,1]]]}]}],{__,False}],{"OBJECTID",__}][[All,1]]]],

Grid[{
{Style["Min"],Spacer[5],InputField[Dynamic[If[dataP≠{},minPie=Min[Switch[selected[[1]],
"OKR",Total[Transpose[dataP/.okrD[[selected[[2]]]]]],
"ORP",Total[Transpose[dataP/.orpD[[selected[[2]]]]]],
"OBE",Total[Transpose[dataP/.obeD[[selected[[2]]]]]]]]]],Number,Enabled->False,FieldSize->5,Background->Dynamic[If[pieVol,LightGray]]],
InputField[Dynamic[minPieVol],Number,FieldSize->5,Enabled->Dynamic@pieVol,Background->Dynamic[If[!pieVol,LightGray]]],Spacer[10]},
{Style["Max"],Spacer[5],InputField[Dynamic[If[dataP≠{},maxPie=Max[Switch[selected[[1]],
"OKR",Total[Transpose[dataP/.okrD[[selected[[2]]]]]],
"ORP",Total[Transpose[dataP/.orpD[[selected[[2]]]]]],
"OBE",Total[Transpose[dataP/.obeD[[selected[[2]]]]]]]]]],Number,Enabled->False,FieldSize->5,Background->Dynamic[If[pieVol,LightGray]]],InputField[Dynamic[maxPieVol],Number,FieldSize->5,Enabled->Dynamic@pieVol,Background->Dynamic[If[!pieVol,LightGray]]]},
{RadioButtonBar[Dynamic[pieVol],{False->"Použít defaultní",True->"Nastavit vlastní"}],SpanFromLeft}
},Spacings->0]
}]
}]
]],Enabled->Dynamic[selected≠{}]],
Initialization:>{writeData=False}
]

Popis funkcí programu:

Po načtení potřebných souborů se po stisknutí “Volba mapy” otevře okno, ve kterém je třeba zvolit kraj, jehož mapu chceme zobrazit, popřípadě je možno zobrazit pouze mapu jednoho z krajů v daném okrese. Volbou konkrétní “Hranice” můžeme dále mapu rozdělit na obce s rozšířenou působností (volba “ORP”), na obce (volba “Obce”) či nechat pouze prázdnou mapu (volba “Blank”). Na levé straně okna se vykresluje zmenšenina naši zvolené mapy. Stiskem “OK” si necháme mapu vykreslit. Posuvníkem “Velikost” můžeme zmenšovat či zvětšovat zobrazovanou mapu. Stiskem tlačítka “Data” se zobrazí okno, kde můžeme zvolit data, která chceme na mapě zobrazit pro vybrané oblasti, a to buď jako kartogram nebo jako koláčové diagramy (záložky “Gradient” a “PieChart”).

({{}, {Obr. 3: Výběr mapy Olomouckého kraje, rozděleného na obce s rozšířenou působností}})

({{}, {Obr. 4: Počet obyvatel v obcích s rozšířenou působností v roce 1991 (kartogram)}})

Využití WolframAlpha v geografii

Jak jsme již uvedli v první kapitole, pro geovědy je důležitou funkcí programu možnost importovat data z neustále rozšiřované databáze matematických, vědeckých a socioekonomických informací, která je pro uživatele programu dostupná online prostřednictvím služby WolframAlpha. WolframAlpha funguje i samostatně jako „odpovídající stroj ". Výhodou pro uživatele je možnost zadávat otázky přirozeným jazykem (přesněji anglicky). Dotaz má velmi jednoduchou syntaxi WolframAlpha [“text dotazu”]. Nejdříve si ukážeme, jak si poradí s notoricky známou otázku: “Jaká je odpověď na základní otázku života, vesmíru a vůbec?”:

WolframAlpha["Answer to the Ultimate Question of Life, the  Universe, and Everything"]

Jak je vidět, s tímto “podrazem” si WolframAlpha poradil velmi dobře. Geografům se ale bezesporu bude více hodit např. dotaz na počet obyvatel Olomouce:

WolframAlpha["Population of Olomouc, Czech Republic"]

Jak je vidět z odpovědi, je primárně strukturována pro amerického uživatele, proto se snaží přiblížit počet obyvatel srovnáním s obyvatelstvem Amerických Panenských ostrovů. Využití odpovědí je také limitováno chybějícími údaji o zdrojích dat, nelze tedy posoudit jejich validitu ani kriticky komparovat různé zdroje. Nic ale nebrání použití WolframAlfa pro účely popularizační a prezentační. Ukážeme si několik možností:


WolframAlpha poskytuje i obrázky:

WolframAlpha["flag of the Czech Republic"]

Bibliografické údaje:

WolframAlpha["Václav Havel"]

Mapové podklady:

WolframAlpha["map of Burundi"]

Data o počasí:

WolframAlpha["Weather forecast for Olomouc, Czech Republic"]

Data o struktuře populace:

WolframAlpha["Saudi Arabia population distribution"]

Jaderné elektrárny v okruhu do 500 kilometrů od Vídně:

WolframAlpha["nuclear power reactors within 500 kilometers of Wien, Austria"]

Závěr

Anotace

Text Software Mathematica pro geografy je koncipován jako učební materiál pro studenty geografických oborů, zejména Regionální geografie, Geografie (dvouoborové) a Mezinárodních rozvojových studií. Úvodní oddíly učebnice jsou věnovány představení programu a jeho základním funkcím, podstatná část textu pak představuje užití programu při řešení typických geografických problémů. Příklady použití jsou voleny s ohledem na potřeby studentů bakalářského a navazujícího studia.

Závěr

Jednou z ambicí tvůrců programu Mathematica je zpřístupnění matematiky širokému okruhu „nematematické" odborné veřejnosti. Tato koncepce činí z programu ideální nástroj pro geografy, kteří se ve svém výzkumu neobejdou bez statistických analýz a prostorových vizualizací, v jejich vzdělávání ale zpravidla na matematiku nezbývá mnoho prostoru. Text Software Mathematica pro geografy mapuje možnosti využití programu při řešení typických geografických úloh zhruba v rozsahu studia navazujících magisterských studijních oborů. Protože je cílen na začátečníky, věnuje prostor i základnímu představení programu, jeho funkcí a způsobů komunikace s jádrem programu. Autoři si rozhodně nekladli za cíl vytvořit vyčerpávající přehled všech možností použití programu, který se ostatně sám neustále vyvíjí a v nových verzích stále přibývají nástroje propojující program Mathematica se softwarem geografických informačních systémů (GIS).

Summary

One of Mathematica program creators' ambitions is to make mathematics accessible to a wide range of a "non - mathematical" professional community. This concept makes the program an ideal tool for geographers who cannot do their research without statistical analysis and spatial visualization. But there is no much room left for mathematics in their educational curriculum. Software Mathematika text for geographers maps possible program usage for solving typical geographical tasks around the scope of Master degree study. Being targeted at the beginners, it presents the basic performance of the program, its function and ways of communicating with the core of the program. The authors of the program were certainly not focused on creating the exhausted list of all its possible uses. The program is being constantly developed and the new versions of it are characterized by constantly growing number of tools that link Mathematica program with the Geographical Information Systems software (GIS).

Použitá literatura

Baumann, G.: Mathematica for Theoretical Physics. Springer Science, New York. 2005.
Dick, S., Riddle, A., Stein, D.: Mathematica in the Laboratory. Cambridge University Press, Cambridge.1997.
Hassani, S.: Mathematical methods using Mathematica: for students of physics and related field. Springer Science, New York. 2003.
Chramcov, B.: Základy práce v prostředí Mathematica. Univerzita Tomáše Bati ve Zlíně, Zlín. 2005.
Jirásek, F., Čipera, S., Vacek, M.: Sbírka řešených příkladů z matematiky II. SNTL, Praha.1989.
Jirásek, F., Kriegelstein, E., Tichý, Z.: Sbírka řešených příkladů z matematiky. SNTL/ALFA, Praha. 1982.
Kopáček, J. a kol.: Příklady z matematiky pro fyziky III. MATFYZPRESS MFF UK, Praha. 1996.
Kováčová, M., Záhonová, V.: Matematika pomocou THE MATHEMATICAL EXPLORER. Slovenská technická univerzita v Bratislave, 2006.
McMahon, D., Topa, D.: A Beginner's Guide to Mathematica. Chapman & Hall/CRC, New York. 2006.
Wellin, P., Gaylord, R., Kamin, S.: An Introduction to Programming with Mathematica. Cambridge University Press, Cambridge. 2008.

Homepage of Wolfram Research http://www.wolfram.com.