MathematicaSouvisející informace naleznete také v článku Wolfram Language.
Wolfram Mathematica (dříve Mathematica, vyslovuj [matematika], dále též „editor“) je počítačový program původně určený pro provádění matematických, vědeckých a technických výpočtů. V současnosti se jedná o vývojové prostředí programovacího jazyka Wolfram Language, jenž nabízí funkcionalitu z mnoha oblastí jako jsou matematické výpočty, numerické simulace, zpracování a vizualizace dat, strojové učení, tvorba webových stránek, úprava videa a zvuku, generování dokumentů atd. Tento program je od roku 1988[1] vyvíjen jako komerční produkt americkou softwarovou společností Wolfram Research, spoluzaloženou a vedenou Stephenem Wolframem. Samotné jméno „Mathematica“ navrhl Steve Jobs[2] a zpočátku toto jméno označovalo jak program, který slouží pro vyhodnocování uživatelem zadaných příkazů, tak i sadu příkazů samotnou. S verzí 10.0.0 došlo k oddělení těchto dvou konceptů[3] — zatímco editor samotný se stále jmenuje Mathematica, programovací jazyk, který tento program implementuje, se nazývá Wolfram Language. Přesné rozdělení nebylo nicméně společností Wolfram Research jasně vymezeno, což vedlo k jistému zmatení v názvosloví, pro podrobnosti viz oddíl „Pojmenování“ v článku Wolfram Language. Popis programovacího jazyka Wolfram Language lze nalézt na jeho vlastní stránce, tato stránka se věnuje především uživatelskému prostředí editoru Mathematica. Editor neslouží pouze k vývoji a vyhodnocování kódu. Lze v něm přehrávat zvuk, sledovat video, kreslit dvourozměrnou grafiku a interagovat s grafikou trojrozměrnou. Kód lze seskupovat do hierarchicky uspořádaných celků, z nichž některé lze skrýt pro zvýšení čitelnosti ostatního kódu. V Mathematice lze dále psát textové dokumenty, kde lze text dělit do kapitol s různými úrovněmi nadpisů, dodávat číslování stránek a nastavovat prvky známé z textových procesorů. Lze v ní i vytvářet prezentace ve stylu programu PowerPoint. Od verze 13 lze v Mathematice automaticky analyzovat zdrojový kód a vytvářet pro něj dokumentaci. Mathematica je dostupná pro operační systémy Microsoft Windows, macOS a Linux. Přibližně od roku 2017 se vlajkovým produktem společnosti Wolfram Research pro nové uživatele postupně stává systém Wolfram One, přičemž Mathematica získává roli produktu pro stávající uživatele[4][5]. Pokud má uživatel založený účet u společnosti Wolfram Research, může editor propojit se svým cloudovým účtem a kód vyvíjený lokálně na svém počítači může nahrát přímo z editoru na cloud. V následujícím je popisována verze Mathematicy 13, pokud není vysloveně uvedeno jinak. Podobný a konkurenční softwareSouvisející informace naleznete také v článku Wolfram Language#Vývojová prostředí.
Pro práci s jazykem Wolfram Language existuje kromě Mathematicy několik dalších programů, většinou vyvíjených společností Wolfram Research. Alternativou k Mathematice, která je jí nicméně velmi podobná, je program Wolfram|One[6]. Omezenější možnosti nabízí Wolfram Cloud, který je přístupný přímo z webového prohlížeče. V prostředí příkazové řádky lze s Wolfram Language pracovat pomocí programů WolframKernel či wolframscript. Pro profesionální práci slouží pak plugin Wolfram Workbench pro vývojové prostředí Eclipse, který je vyvíjen společností Wolfram Research, a plugin pro Wolfram Language ve vývojovém prostředí IntelliJ IDEA, vyvíjený společností JetBrains. Silnou stránkou Wolfram Language jsou symbolické výpočty. V tomto ohledu je přímým konkurentem Mathematicy program Maple s podobným zaměřením, jenž je vyvíjen firmou Maplesoft. Open-sourceovými alternativami k těmto dvěma komerčním produktům jsou pak Maxima a SageMath. Wolfram Language ale nabízí i numerické výpočty, a v tomto ohledu je Mathematica často srovnávána s programem MATLAB vyvíjeným společností MathWorks, jehož původním zaměřením byla práce s numerickými maticemi. V oblasti numerických výpočtů je MATLAB často zřetelně rychlejší než Mathematica[7]. Oba tyto produkty se také často srovnávají s numerickými a symbolickými knihovnami jazyka Python, jehož výhodou je široká uživatelská základna a to, že se jedná o otevřený software. Koncept notebooků jako výpočetního prostředí byl z Mathematicy převzat dalšími projekty, přičemž nejvýraznějším představitelem je patrně Jupyter[8][9], což je open source projekt umožňující zobrazovat notebook ve webovém prohlížeči a výpočty zasílat do výpočetního jádra v různých programovacích jazycích. V Jupyteru lze pracovat i s jazykem Wolfram Language[10], ačkoli s omezenou funkcionalitou. Struktura programuUživatelské prostředíSouvisející informace naleznete také v článku Wolfram Language.
Vývojové prostředí má podobu prázdného okna, označovaného jako notebook (viz níže), na jehož horním okraji je hlavní menu obsahující nabídky s různou funkcionalitou. Rozesazení ovládacích prvků tak má podobné uspořádání jako např. v programech balíku Microsoft Office. Takto nabízená funkcionalita je rozebrána v základních obrysech níže v oddíle „Přehled funkcionality“. Do prázdného okna se vypisují příkazy psané v jazyce Wolfram Language, čímž se vytvářejí skripty, které jsou při vyhodnocení interpretovány výpočetním jádrem Mathematicy. Velikost písma v okně lze přizpůsobit nastavením odpovídajícího zoomu. Pro vyvolání nápovědy lze kromě odpovídající nabídky využít i klávesy F1. V Mathematice existují tři způsoby rozvržení vývojového prostředí, kde každé z nich zobrazí tentýž kód odlišně[11][12] — výchozím rozvržením je prostředí working (to jest pracovní), které klade důraz na přehlednost kódu. Pro tvorbu prezentací, viz níže, je použito prostředí slideshow, kde je kód rozdělen do jednotlivých snímků, jež se mají zobrazit jeden po druhém. Konečně pro tisk je určeno prostředí printout, jež bere v potaz rozměry stránky, na níž se má tisknout, její okraje apod. Kód lze v rámci daného rozvržení dále zobrazovat a zadávat v různých formátech — vstupní kód se obyčejně vkládá ve formátu V minulosti se pojmem Mathematica označoval i programovací jazyk implementovaný programem Mathematica. Od verze 10.0.0 se jazyk nazývá Wolfram Language a pro jeho popis proto čtenáře odkážeme na odpovídající článek. K většině funkcionality popsané v tomto článku lze přistupovat jednak přes uživatelské rozhraní, jak rozebráno níže, jednak i programově pomocí nejrůznějších příkazů[13][14]. Například nový notebook lze vytvořit z již existujícího notebooku příkazem Koncept notebookůVýchozím pracovním prostředím pro psaní kódu v Mathematice je tak zvaný notebook, kde je kód strukturován do hierarchie elementárních částí zvaných buňky (angl. cells). Příkazy jsou psány do vstupních buněk a po vyhodnocení vstupní buňky je výsledek výpočtu vrácen do výstupní buňky, která se automaticky pod tou vstupní vytvoří[16]. Buňky lze dále seskupovat do větších celků a utvářet tak strukturu kódu podobnou kapitolám a podkapitolám známým z psaných knih. Buňky plní různé role, lze vkládat i čistě textové buňky či nadpisy. Tyto buňky nejsou při běhu chodu vyhodnoceny a mohou tak zastupovat funkci komentářů. Viz též oddíl „Struktura notebooků“ níže. Koncept notebooku jako druhu pracovního prostředí rozděleného do buněk vynalezl Theodore Gray[17], spoluzakladatel společnosti Wolfram Research. Toto pracovní prostředí umožňuje flexibilní interakci uživatele s kódem a jeho výstupem. Notebook je při uložení zapsán do textového souboru s příponou Notebooků existuje několik druhů[19]. Kromě základní verze lze uzpůsobovat vzhled i chování prvků daného notebooku a vytvářet tak knihy, seznam poznámek, vědecké články apod. Speciální notebook je určen pro tvorbu prezentací. Mathematica dále nabízí notebooky pro tvorbu dotazníků, notebooky pro jednotkové testy, či notebooky pro tvorbu šablon, kde je do předpřipravených polí programově dodán obsah. Dále lze využít notebooků s více vývojářsky orientovanou podobou pro tvorbu balíků a nízkoúrovňových skriptů. Dokumentace pro funkce a symboly v Mathematice má také formu notebooků, kde lze přímo v dokumentaci interagovat s kódem či ho rovnou přepisovat. V neposlední řadě se k tomu určené notebooky používají pro tvorbu zdrojů a funkcí určených do online repozitářů. Jádro a front endNa tuto kapitolu je přesměrováno heslo WSTP.
Výpočetní systém je rozdělen do dvou částí – jádra a front endu. Jádro (angl. kernel) se stará o samotné vyhodnocování kódu a provádění výpočtů, zatímco front end slouží k interakci s uživatelem a poskytuje grafické uživatelské rozhraní[18]. Interakcí se přitom nemyslí jen vypisování číselných a jiných výsledků, ale i podpora náročných interaktivních widgetů, přehrávání videa a zvuku, apod. Například vykreslovaná 3D grafika reaguje rotací na tažení kurzoru uživatelem, v případě 2D grafiky lze tuto kreslit myší přímo do uživatelského rozhraní atd. Změny ve front endu se neprojeví ve výpočtech dokud nejsou tyto odeslány do jádra. Příkazy se přitom vyhodnocují v pořadí ve kterém byly do jádra zaslány, ne tedy nutně ve stejném pořadí, ve kterém jsou vypsány ve front endu. S tím souvisí i fakt, že při úpravě kódu, např. při změně definice nějaké funkce, nemusí aktuální verze kódu odpovídat definicím, které jsou v jádře uloženy z předchozího provedení kódu. To může z pohledu uživatele občas vést k neočekávaným výsledkům. Vypíše-li uživatel do front endu kód, je tento kód předzpracován a v upravené formě zaslán front endem do jádra pomocí protokolu WSTP (Wolfram Symbolic Transfer Protocol[20], dříve známý pod jménem MathLink). Po skončení výpočtu zašle stejným protokolem poté jádro výsledek zpět do front endu, který tento výsledek vhodně naformátuje a vykreslí uživateli[21]. Tento model tak připomíná klient–server síťovou architekturu, ačkoli se od ní odlišuje, viz níže. Protokol WSTP slouží i pro předávání vstupů a výstupů mezi výpočetním jádrem a externí aplikací, která může být napsána v jiném jazyce. Součástí Mathematicy jsou například takováto propojení s jazyky Java (knihovna J/Link[22]), R (knihovna RLink[23]) či s .NET frameworkem (knihovna .NET/Link[24])[pozn. 1]. Z jednoho front endu lze kontrolovat více výpočetních jader a podobně jedno jádro může obsluhovat vícero front endů. Přesněji vzato, mezi front endem a jádrem existují tři propojení[27] — hlavní (angl. main link), preemptivní (angl. preemptive link) a servisní (angl. service link). Hlavní spojení se stará o zasílání příkazů zadaných uživatelem do jádra a následné navrácení výsledků zpět do front endu. Front end udržuje frontu čekajících žádostí o vyhodnocení, které mají být poslány do jádra. Mezitím přitom zůstává front end plně funkční a lze s ním pracovat — uživatel do něj může psát, může otevírat a ukládat soubory apod. Výpočet zaslaný do jádra hlavním propojením může trvat libovolně dlouho, není zde nastaven žádný limit na dobu vyhodnocování[pozn. 2]. Preemtivní spojení funguje odlišně — na straně front endu není žádná fronta čekajících příkazů. Místo toho zasílá toto spojení příkazy do jádra rovnou a po zaslání jednoho příkazu vždy čeká, dokud neobdrží výsledek. Mezitím je front end uzamčen a žádná interakce s uživatelem není možná. Na straně jádra pak je příkazům přicházejícím z preemtivního spojení dána přednost před příkazy ze spojení hlavního. Pokud požadavek na vyhodnocení přijde do jádra v době, kdy zrovna zpracovává úlohu z hlavního spojení, je tato úloha na potřebnou dobu přerušena. Preemtivního spojení je užíváno pro implementaci interaktivních prvků jazyka Wolfram Language, především pak výrazu Struktura notebooků![]() BuňkyPři vyhodnocování zdrojového kódu jsou příkazy ze vstupních buněk zasílány do výpočetního jádra, jednu buňku po druhé. Při vyhodnocení dostane daná buňka pořadové číslo, které si ponechává až do konce běhu výpočetního jádra. Daná vstupní buňka je pak uvozena řetězcem V těle funkce a podobných konstruktů se musí každý příkaz zakončit středníkem. Toto však není nutností, jsou-li příkazy psány jednotlivě po řádcích rovnou do editoru. V takovém případě se za vstupní buňku vypíše ve stejném pořadí výsledek každého řádku. Konkrétní kód v editoru pak může vypadat následovně: In[1]:= promenna = 0.2
Out[1]= 0.2
In[2]:= obsahKruhu = Pi*polomer^2;
In[3]:= 1 + 2*3
Out[3]= 7
Všimněme si, že napsáním středníku za příkaz se zamezí vypsání jeho výsledku. Tento výsledek je ale i přesto uložen do Interně je každá buňka představována konstruktem Strukturování kóduBuňky lze sdružovat do větších celků, kterým lze dávat nadpisy, a vytvořit tak hierarchickou strukturu buněk, která může sloužit k přehlednějšímu rozdělení kódu[30]. Nadpisy v hierarchii lze navíc formátovat různým způsobem. Editor dále umožňuje jednotlivé sekce kódu zavřít tak, že se kód v této sekci skryje aniž by došlo k jeho smazání. Lze tak skrýt buňky v různých úrovních hierarchie a vždy ponechat jen právě používanou sekci. Tímto způsobem lze do jednoho souboru vložit velké množství zdrojového kódu bez toho, aniž by se neúměrně zvýšila těžkopádnost práce s kódem. Související informace lze nalézt v oddíle „Tvorba psaných dokumentů“ níže. Dvě a více buněk lze v případě potřeby sloučit od jedné anebo lze část kódu z již existující buňky vydělit a udělat z něj buňku novou. Namísto slučování lze buňky pouze seskupit. Příslušnost dané buňky do skupiny se pozná podle tzv. buňkové závorky (angl. cell bracket)[31], což je dekorovaná svislá čára na pravé straně okna, která se táhne přes výšku celé buňky, celé podskupiny, skupiny atd. jak je ukázáno na obrázku vpravo výše. Danou skupinu lze přitom zavřít poklepáním na její závorku tak, že je viditelný pouze nadpis dané skupiny anebo jen jedna konkrétní buňka. Zavřenou skupinu lze opětovným poklepáním na její závorku znovu otevřít. Pro ilustraci použijme následující příklad, kde podbarvený text níže připomíná formátovaný text a zdrojový kód v Mathematice: Toto je titul
První sekce
Další sekce
a = 2 Text a kód jsou sdruženy pod titulem, jenž zní „Toto je titul“ a jenž je dále rozdělen do dvou sekcí, z nichž první má nadpis „První sekce“ a druhá zní „Další sekce“. V první sekci je použit prostý text „Spočti výsledek následujícího výrazu:“, jenž je ohraničen rámečkem. Pod tímto textem je jako vstupní kód vložen zlomek 12/3, který je formátován tak, že čitatel je vykreslen nad vodorovnou zlomkovou čárou a jmenovatelem přesně tak, jaká je zvyklost v matematice. Dále je tento kód nastaven tak, aby se vyhodnotil před ostatním kódem jako inicializační buňka. Konečně ve druhé sekci se nachází kód Přehled funkcionalityNásledující rozdělení do tematických okruhů je jen orientační, mnoho funkcí z jednoho okruhu lze použít i v okruzích ostatních. Dále není v následujícím příliš rozlišováno mezi Mathematicou a jazykem Wolfram Language — v mnoha případech je tatáž funkčnost dostupná jednak z nabídky editoru, jednak jako příkaz programovacího jazyka. Vývoj kóduEditor umožňuje komentovat kód, dynamicky doplňovat rozepsaný výraz, zobrazit nízkoúrovňovou variantu vypsaného kódu či výsledku atd. Tlačítko „zpět“ vrací pouze změny provedené ve front endu a změny, které byly již odeslány do jádra, tak nejsou tímto tlačítkem ovlivněny. Dále lze zobrazit historii úprav notebooku[32] či okno, do nějž se vypisují chybová hlášení, která nejsou běžně vypisována přímo do notebooku. Vybrané buňce lze přiřadit dodatečný popisek (angl. cell tag)[33], který může sloužit k vytváření skupin stejně označených buněk, což může dále usnadňovat jejich manipulaci. Mathematica nabízí debugger a od verze 13 analýzu kódu[34], jež sleduje například, zda jsou využity všechny deklarované lokální proměnné, zda nelze kód zjednodušit apod. Od verze 13 lze dále uzpůsobit formátování kódu a je možno vytvářet dokumentaci způsobem typickým pro vestavěné funkce[35][pozn. 4]. Je k dispozici též speciální druh notebooků určený pro tvorbu jednotkových testů[36]. Nastavení nejrůznějších voleb prostředí lze provádět buď pomocí příkazů vepsaných do notebooku nebo ručně výběrem v nástroji option inspector[37][38]. Historicky byla Mathematica, jak ostatně její název napovídá, určena především pro práci s matematickými výrazy a funkcemi. Z tohoto důvodu obsahuje tento editor dodatečnou funkcionalitu vztahující se právě k matematice. Vyvolat lze palety nástrojů pro zadávání speciálních symbolů, operátorů nebo písmen alfabety. Dále lze pomocí klávesových zkratek vkládat matice, horní a dolní indexy[39][40], či matematické vzorce ve značkovacím jazyce TeX[pozn. 5]. Podporována je široká škála speciálních znaků, jež lze vkládat pomocí aliasů či jejich jmen[41][11]. Pokud má sloužit za vstup obrázek, lze tento buď načíst z externího souboru, anebo ho přímo uložit do notebooku a přiřadit ho nějaké proměnné. Mathematica umožňuje „drag and drop“ a obrázek tak lze do notebooku vložit čistě tak, že ho uživatel myší přetáhne z daného souboru přímo do okna editoru. Dodatečnou funkcionalitu lze do Mathematicy doplnit různými způsoby. Lze nahrát do aktuálního běhu jádra balík s kódem, lze k samotnému jádru připojit dynamické knihovny pomocí sady funkcí LibraryLink[42], lze ale též instalovat externí aplikace, které s jádrem komunikují protokolem WSTP. Dále je podporováno vkládání kódu v jiných jazycích přímo do notebooku[43]. Takto lze například do speciální buňky vložit kód v Pythonu. Při vyhodnocení buňky je tento kód zpracován externím programem, v tomto případě výpočetním jádrem Pythonu, a výsledek je navrácen do notebooku už jako výraz interpretovaný v jazyce Wolfram Language[44][pozn. 6]. Vyhodnocování kóduKód lze vyhodnocovat po jednotlivých buňkách. Stisknutím kláves ⇧ Shift + ↵ Enter je kód z dané buňky zaslán do výpočetního jádra[16]. Výsledek je pak vepsán pod danou buňku. Alternativně lze kód nahradit jeho výsledkem v dané buňce, což je označováno jako evaluate in place[45] a provede se klávesami CTRL + ⇧ Shift + ↵ Enter. Trvá-li výpočet dané buňky dlouhou dobu a uživatel potřebuje v mezičase vyhodnotit nějaký jiný krátký úsek kódu, lze toto provést vybráním daného kódu a stisknutím klávesy F7, čímž se na chvíli přeruší probíhající výpočet a jádro spočte daný úsek kódu. Po navrácení výsledku se jádro automaticky vrátí k původnímu výpočtu. Tento druh vyhodnocení kódu se nazývá evaluate in subsession[46]. Výpočet lze též předčasně ukončit či přerušit. V případě dlouhých notebooků s mnoha buňkami umožňuje editor najít právě vyhodnocovanou buňku. Někdy může provádění dynamických výrazů neúnosně zatěžovat jádro, což může vést k zamrzání front endu. V takových případech lze vypnout vyhodnocování dynamických prvků v notebooku[47]. Notebook obsahuje nejen vstupní kód, ale vypisují se do něj i odpovídající výsledky výpočtu jako jsou čísla, seznamy či obrázky. Velikost souboru s kódem tak může tímto způsobem značně vzrůst a klást tak větší nároky na pamět. Editor tak umožňuje smazat naráz veškerý výstup všech buněk v notebooku[48]. Pokud je naopak žádoucí, aby byl daný kus kódu či výsledek v notebooku uložen, lze tento zabalit do výrazu Z nabídek editoru lze konfigurovat výpočetní jádro[50] a v případě potřeby ho vypnout či zapnout bez nutnosti zavření okna notebooku. Lze nastavit, jaké jádro se má pro daný notebook použít, protože jedno jádro může například obsluhovat několik různých notebooků a definice provedené v jednom notebooku se tak projeví v notebooku druhém. Pro oddělení funkčnosti obou notebooků lze buď každému nastavit jiné jádro, anebo lze místo toho každému notebooku přiřadit unikátní jmenný prostor (v Mathematice označovaný jako kontext, angl. context) tak, že symbol definovaný v daném notebooku je automaticky kvalifikován odpovídajícím kontextem. V případě paralelizovaných výpočtů pak lze nastavit způsob, jakým mají být paralelní jádra použita, a lze sledovat jejich aktuální činnost a zátěž[51]. Formátování kóduVe výchozím nastavení umožňuje Mathematica uživateli nastavit vzhled různých částí uživatelského prostředí tak, že informace o tomto vzhledu je uložena přímo do souboru obsahujícího zdrojový kód. Hranice mezi specifikací vzhledu a zdrojovým kódem je navíc tenká, protože zdrojový kód samotný může tyto nízkoúrovňové specifikace měnit[13][52]. Vzhled lze buď měnit globálně pro všechny buňky daného typu pomocí stylopisů uvedených ve volbě Dále umožňuje Mathematica zobrazovat buď zdrojový kód nebo jeho výstup různým způsobem pomocí příkazů jako Grafika se vykresluje ve výchozím nastavením ve formátu Interakce![]() Mathematica nabízí velkou míru interaktivity s uživatelem. Kromě práce s grafikou, jež je rozvedena v oddíle níže, lze přehrávat zvuk a video přímo z notebooku. Je podporováno i nahrávání zvuku pomocí mikrofonu, nahrávání videa z webkamery či snímání obrazovky — screenshoty a screencasty. Uživatel sám může programově vytvářet interaktivní objekty podobné widgetům či Java appletům, kde je při stisknutí tlačítka či tažení kontrolky dynamicky aktualizován obsah daného objektu. Na obrázku vpravo je příklad jednoho takového objektu vytvořeného pomocí kódu zabaleného do výrazu Větší kontrolu nad dynamickými prvky umožňuje výraz Další způsob interakce představuje přístup do systému zpracovávajícího přirozený jazyk, čehož lze dosáhnout tak, že se kurzor nastaví na začátek řádku a poté je stisknuta klávesa pro rovnítko. Tím se aktivuje zadávací pole, do nějž lze psát dotazy v přirozené angličtině[66]. Výsledkem je pak v optimálním případě odpovídající kód v jazyce Wolfram Language. Pokud je rovnítko stisknuto na začátku řádky ne jednou, ale dvakrát, tak je výstupem na zadaný dotaz sada dat získaná ze systému Wolfram Alpha[67][pozn. 9]. Zpracování jednoduchých požadavků lze i uvnitř kódu a to stisknutím klávesové zkratky CTRL + =, po jejímž zadání se na místo kurzoru vloží malé zadávací pole, do nějž lze opět vepisovat požadavky. Takto lze například elegantně vkládat fyzikální jednotky pomocí jejich zkratek, kdy Mathematica automaticky vygeneruje odpovídající výraz Tvorba grafiky![]() Editor umožňuje pokročilou práci s 2D i 3D grafikou, a to jak vektorovou, tak rastrovou. Trojrozměrná grafika, a to jak vektorová představovaná výrazem 2D vektorovou grafiku lze vytvářet dvěma způsoby a to buď skriptováním, kde daný kód ve Wolfram Language vygeneruje odpovídající grafiku[74][75], anebo přímo kreslením kurzorem pomocí různých kreslicích nástrojů. Při manuálním kreslení je nejprve nutné vyvolat plátno, a to buď klávesovou zkratkou, zapsáním odpovídajícího výrazu či vyvoláním z nabídky programu. Do plátna se posléze kreslí kurzorem. Do verze 12.1 se nejprve otevřela prázdná grafika představovaná výrazem Primárním účelem mnoha příkazů je vykreslování grafů matematických funkcí a dat. Barevnou škálu použitou pro vykreslení grafů lze mimo jiné vybrat pomocí odpovídající palety. Odlišnou paletu lze použít v případě sloupcových a podobných grafů. Wolfram Language prostřednictvím Mathematicy ale podporuje i mnoho grafických primitivů a dodatečných funkcí, které přímo s vykreslováním matematických funkcí nesouvisejí. Lze tak vytvářet 2D obrázky či 3D animace. Ve verzi 13 byly možnosti 3D vektorové grafiky dále rozšířeny o pokročilejší a realističtější renderování v čele s výrazem ![]() svetla = {DirectionalLight[Yellow, {{0,-1,0}, {0,0,0}}], PointLight[Yellow, {-1.2,.2,.2}, {0,0,5}]};
drevo = ImageMultiply[ExampleData[{"Texture", "Bark"}], Brown];
deska = {MaterialShading[<|"BaseColor"->Texture[drevo]|>], Cuboid[-1/2{1,1,.1}, 1/2{1,1,.1}]};
noha = Translate[Scale[deska, {.2,.2,10}], {.2,-.2,-.5}];
ubrus = {MaterialShading[{"Satin",Red}], Polygon[1/2{{.8,1,.11}, {-1,1,.11}, {-1,-1,.11}, {.3,-1,.11}}]};
zraseni = Plot3D[.01 Sin[6\[Pi] x] Log[1+5 y], {x,0,1}, {y,0,1}, PlotStyle->MaterialShading[{"Satin",Red}], Mesh->None, Lighting->svetla];
zraseni = First@Cases[InputForm[zraseni], _GraphicsComplex, Infinity, 1];
zraseni = Rotate[Translate[zraseni, {-.5,-.5,0}], -\[Pi]/2, {1,0,0}, {-.5,-.5,0}];
zraseni = Translate[Scale[zraseni, {.65,1,1}, {-.5,-.5,0}], {0,-.01,.06}];
vazafun = Interpolation[BSplineFunction[{{0,.5}, {1,1.5}, {2,.1}, {2.3,.1}, {3,.7}}] /@ Range[0, 1, .1]];
vaza = RevolutionPlot3D[vazafun[x], {x,0,3}, RevolutionAxis->{1,0,0}, PlotStyle->{Thickness[.2], MaterialShading["Gold"]}, Mesh->False, Lighting->svetla];
vaza = First@Cases[InputForm[vaza], _GraphicsComplex, Infinity, 1];
vaza = Translate[Rotate[Scale[vaza, .2, {0,0,0}], -\[Pi]/2, {0,1,0}], {.1,.1,.06}];
zatisi = Graphics3D[{EdgeForm[], deska, noha, zraseni, ubrus, vaza}, Lighting->svetla, Boxed->False];
zatisi = Graphics[{RadialGradientFilling[{Darker@Orange, Black}, ImageScaled[{.5,.7}]], Rectangle[-{1,1}, {1,1}], Inset[zatisi, {0,0}, ImageScaled[{.5,.5}], 2.1]}, PlotRange->{{-.8,.8}, {-.7,1}}]
Tvorba psaných dokumentůProstředí notebooků lze využít nejen pro vývoj kódu, ale i pro tvorbu psaných dokumentů[pozn. 11]. Editor umožňuje členit text do kapitol, sekcí apod. s odpovídajícími nadpisy, viz též oddíl „Strukturování kódu“. Do textu lze vkládat obrázky, úryvky kódu, odrážky, číslované seznamy, vodorovné čáry jako předěly, citace, číslované rovnice atd. Je podporována kontrola pravopisu v angličtině a pro potřeby psaní textu je k dispozici několik dodatečných nástrojových lišt, které např. mohou zobrazit pravítka na okraj okna editoru či měnit formát textu. Uživatel má mnoho možností, jak uzpůsobit vzhled a chování různých částí textu. Lze nastavit font písma, stejně jako jeho řez, velikost či barvu. Podobně jako v textových procesorech typu Microsoft Word lze nastavit zarovnání textu, barvu pozadí, šířku stránky či styl odrážek. Sady stylů pro různé úrovně textu lze sdružovat do stylopisů (angl. stylesheets)[53]. Místo nastavování jednotlivých stylů tak lze jednoduše například propojit daný notebook se souborem, který obsahuje celou sadu k sobě ladících stylů. Stylopis pro daný notebook lze vyvolat a upravovat z okna editoru. Formátování konkrétní části textu lze i manuálně smazat. Tvorba prezentacíV Mathematice lze vytvářet i prezentace[82] připomínající ty z programu PowerPoint, kde je obsah daného notebooku rozdělen do stránek, mezi kterými lze přecházet pomocí tlačítek na dodatečné nástrojové liště. Výhodou těchto prezentací je to, že mohou obsahovat kód, který se naživo vyhodnocuje. Prezentace tak může obsahovat interaktivní prvky. Pro usnadnění tvorby prezentací je v Mathematice dostupná odpovídající paleta nástrojů. Příklady prezentací vytvořených v Mathematice lze nalézt například na oficiálních stránkách vývojáře[83]. KomunikaceDaný notebook lze uložit do mnoha dalších formátů jako např. PDF pro snazší komunikaci výpočtů, textu a kódu i s lidmi, kteří Mathematicou nedisponují. Notebook lze i přímo vytisknout, či zaslat celý či jen jeho část přímo z editoru na zadaný email. Při práci více uživatelů na jednom projektu lze využít chatu, který je součástí Mathematicy[84]. Některá funkčnost je přístupná jen tehdy, je-li uživatel registrován u společnosti Wolram Research. Důležitým příkladem jsou v tomto ohledu cloudové služby. Lokální objekty lze přímo z notebooku poslat na cloud a zpřístupnit dalším uživatelům[85]. Lze též v samostatném okně sledovat aktivitu přístupu Mathematicy ke cloudu. Mnoho funkcí v Mathematice využívá dat, která je nejprve nutno stáhnout z internetu, příkladem budiž např. mapové podklady pro funkci Nízkoúrovňová reprezentace výrazů v buňkách může být velmi komplikovaná a při kopírování části kódu do externí aplikace jako třeba textového editoru tak překopírovaný výraz nemusí být totožný s tím, o kterém se uživatel domnívá, že z notebooku zkopíroval. Z tohoto důvodu umožňuje Mathematica kopírovat daný kód či prvek z notebooku různými způsoby. Lze kopírovat výraz jako čistý text, jako vzorec v jazyce TeX či reprezentaci MathML. Lze též daný výraz přetvořit na bitmapový obrázek a tento uložit či vložit do jiné aplikace. Struktura souborůVe výchozím nastavení je zdrojový kód jazyka Wolfram Language ukládán v textovém souboru s příponou Notebook jako výrazPodobně jako jiné konstrukty ve Wolfram Language lze i samotný notebook vyjádřit jako výraz. A sice jako výraz s hlavičkou Notebook[{
Cell["Toto je titul", "Title"],
Cell["První sekce", "Section"],
Cell["Spočti výsledek následujícího výrazu:", "Text", CellFrame->True],
Cell[BoxData[FractionBox["12", "3"]], "Input", InitializationCell->True],
Cell["Další sekce", "Section"],
Cell["a = 2", "Input"]
}]
Kód je rozdělen do buněk, kde každá buňka může mít různé vlastnosti a vzhled v závislosti na svém typu. První buňka má jako druhý parametr Interní struktura notebookuPokud je výše uvedený výraz s hlavičkou Notebook[{
Cell[CellGroupData[{
Cell["Toto je titul", "Title"],
Cell[CellGroupData[{
Cell["Prvn\[IAcute] sekce", "Section"],
Cell["Spo\[CHacek]ti v\[YAcute]sledek n\[AAcute]sleduj\[IAcute]c\[IAcute]ho v\[YAcute]razu:", "Text", CellFrame->True],
Cell[CellGroupData[{
Cell[BoxData[FractionBox["12", "3"]], "Input", InitializationCell->True, CellLabel->"In[1]:="],
Cell[BoxData["4"], "Output", CellLabel->"Out[1]="]
}, Open ]]
}, Open ]],
Cell[CellGroupData[{
Cell["Dal\[SHacek]\[IAcute] sekce", "Section"],
Cell[CellGroupData[{
Cell[BoxData[RowBox[{"a", "=", "2"}]], "Input", CellLabel->"In[2]:="],
Cell[BoxData["2"], "Output", CellLabel->"Out[2]="]
}, Open ]]
}, Open ]]
}, Open ]]
},
StyleDefinitions->"Default.nb"
]
kde v každé buňce byly pro zvýšení přehlednosti vynechány volby Interní struktura balíkuJak vidno, takto upravený kód uchovávaný v souborech typu (* ::Package:: *)
(* ::Title:: *)
(*Toto je titul*)
(* ::Section:: *)
(*Prvn\[IAcute] sekce*)
(* ::Text:: *)
(*Spo\[CHacek]ti v\[YAcute]sledek n\[AAcute]sleduj\[IAcute]c\[IAcute]ho v\[YAcute]razu:*)
(* ::Input::Initialization:: *)
12/3
(* ::Section:: *)
(*Dal\[SHacek]\[IAcute] sekce*)
(* ::Input:: *)
(*a=2*)
Téměř veškerý kód, až na původně inicializační buňky, je vložen do komentáře. Typ každé buňky je vypsán před její obsah a obložen dvojitými dvojtečkami Na závěr uveďme, že pokud místo OdkazyPoznámky
Reference
Literatura
Související článkyExterní odkazy
|
Portal di Ensiklopedia Dunia